YES Problem: active(f(g(X),Y)) -> mark(f(X,f(g(X),Y))) mark(f(X1,X2)) -> active(f(mark(X1),X2)) mark(g(X)) -> active(g(mark(X))) f(mark(X1),X2) -> f(X1,X2) f(X1,mark(X2)) -> f(X1,X2) f(active(X1),X2) -> f(X1,X2) f(X1,active(X2)) -> f(X1,X2) g(mark(X)) -> g(X) g(active(X)) -> g(X) Proof: DP Processor: DPs: active#(f(g(X),Y)) -> f#(X,f(g(X),Y)) active#(f(g(X),Y)) -> mark#(f(X,f(g(X),Y))) mark#(f(X1,X2)) -> mark#(X1) mark#(f(X1,X2)) -> f#(mark(X1),X2) mark#(f(X1,X2)) -> active#(f(mark(X1),X2)) mark#(g(X)) -> mark#(X) mark#(g(X)) -> g#(mark(X)) mark#(g(X)) -> active#(g(mark(X))) f#(mark(X1),X2) -> f#(X1,X2) f#(X1,mark(X2)) -> f#(X1,X2) f#(active(X1),X2) -> f#(X1,X2) f#(X1,active(X2)) -> f#(X1,X2) g#(mark(X)) -> g#(X) g#(active(X)) -> g#(X) TRS: active(f(g(X),Y)) -> mark(f(X,f(g(X),Y))) mark(f(X1,X2)) -> active(f(mark(X1),X2)) mark(g(X)) -> active(g(mark(X))) f(mark(X1),X2) -> f(X1,X2) f(X1,mark(X2)) -> f(X1,X2) f(active(X1),X2) -> f(X1,X2) f(X1,active(X2)) -> f(X1,X2) g(mark(X)) -> g(X) g(active(X)) -> g(X) Matrix Interpretation Processor: dim=3 usable rules: active(f(g(X),Y)) -> mark(f(X,f(g(X),Y))) mark(f(X1,X2)) -> active(f(mark(X1),X2)) mark(g(X)) -> active(g(mark(X))) f(mark(X1),X2) -> f(X1,X2) f(X1,mark(X2)) -> f(X1,X2) f(active(X1),X2) -> f(X1,X2) f(X1,active(X2)) -> f(X1,X2) g(mark(X)) -> g(X) g(active(X)) -> g(X) interpretation: [g#](x0) = [0 0 1]x0, [mark#](x0) = [1 1 0]x0 + [1], [f#](x0, x1) = [0 0 1]x0 + [0 0 1]x1, [active#](x0) = [1 0 0]x0, [0 0 0] [0] [mark](x0) = [0 1 0]x0 + [0] [1 1 1] [1], [0 0 0] [0] [active](x0) = [0 1 0]x0 + [0] [1 0 1] [1], [1 1 1] [0 0 0] [0] [f](x0, x1) = [0 1 0]x0 + [0 0 1]x1 + [1] [0 0 0] [0 0 0] [0], [1 0 1] [1] [g](x0) = [0 1 0]x0 + [1] [0 1 0] [1] orientation: active#(f(g(X),Y)) = [1 2 1]X + [3] >= [0 0 1]X = f#(X,f(g(X),Y)) active#(f(g(X),Y)) = [1 2 1]X + [3] >= [1 2 1]X + [2] = mark#(f(X,f(g(X),Y))) mark#(f(X1,X2)) = [1 2 1]X1 + [0 0 1]X2 + [2] >= [1 1 0]X1 + [1] = mark#(X1) mark#(f(X1,X2)) = [1 2 1]X1 + [0 0 1]X2 + [2] >= [1 1 1]X1 + [0 0 1]X2 + [1] = f#(mark(X1),X2) mark#(f(X1,X2)) = [1 2 1]X1 + [0 0 1]X2 + [2] >= [1 2 1]X1 + [1] = active#(f(mark(X1),X2)) mark#(g(X)) = [1 1 1]X + [3] >= [1 1 0]X + [1] = mark#(X) mark#(g(X)) = [1 1 1]X + [3] >= [1 1 1]X + [1] = g#(mark(X)) mark#(g(X)) = [1 1 1]X + [3] >= [1 1 1]X + [2] = active#(g(mark(X))) f#(mark(X1),X2) = [1 1 1]X1 + [0 0 1]X2 + [1] >= [0 0 1]X1 + [0 0 1]X2 = f#(X1,X2) f#(X1,mark(X2)) = [0 0 1]X1 + [1 1 1]X2 + [1] >= [0 0 1]X1 + [0 0 1]X2 = f#(X1,X2) f#(active(X1),X2) = [1 0 1]X1 + [0 0 1]X2 + [1] >= [0 0 1]X1 + [0 0 1]X2 = f#(X1,X2) f#(X1,active(X2)) = [0 0 1]X1 + [1 0 1]X2 + [1] >= [0 0 1]X1 + [0 0 1]X2 = f#(X1,X2) g#(mark(X)) = [1 1 1]X + [1] >= [0 0 1]X = g#(X) g#(active(X)) = [1 0 1]X + [1] >= [0 0 1]X = g#(X) [0 0 0] [0 0 0] [0] [0 0 0] [0] active(f(g(X),Y)) = [0 1 0]X + [0 0 1]Y + [2] >= [0 1 0]X + [1] = mark(f(X,f(g(X),Y))) [1 2 1] [0 0 0] [4] [1 2 1] [2] [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0] mark(f(X1,X2)) = [0 1 0]X1 + [0 0 1]X2 + [1] >= [0 1 0]X1 + [0 0 1]X2 + [1] = active(f(mark(X1),X2)) [1 2 1] [0 0 1] [2] [1 2 1] [0 0 0] [2] [0 0 0] [0] [0 0 0] [0] mark(g(X)) = [0 1 0]X + [1] >= [0 1 0]X + [1] = active(g(mark(X))) [1 2 1] [4] [1 2 1] [4] [1 2 1] [0 0 0] [1] [1 1 1] [0 0 0] [0] f(mark(X1),X2) = [0 1 0]X1 + [0 0 1]X2 + [1] >= [0 1 0]X1 + [0 0 1]X2 + [1] = f(X1,X2) [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0] [1 1 1] [0 0 0] [0] [1 1 1] [0 0 0] [0] f(X1,mark(X2)) = [0 1 0]X1 + [1 1 1]X2 + [2] >= [0 1 0]X1 + [0 0 1]X2 + [1] = f(X1,X2) [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0] [1 1 1] [0 0 0] [1] [1 1 1] [0 0 0] [0] f(active(X1),X2) = [0 1 0]X1 + [0 0 1]X2 + [1] >= [0 1 0]X1 + [0 0 1]X2 + [1] = f(X1,X2) [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0] [1 1 1] [0 0 0] [0] [1 1 1] [0 0 0] [0] f(X1,active(X2)) = [0 1 0]X1 + [1 0 1]X2 + [2] >= [0 1 0]X1 + [0 0 1]X2 + [1] = f(X1,X2) [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0] [1 1 1] [2] [1 0 1] [1] g(mark(X)) = [0 1 0]X + [1] >= [0 1 0]X + [1] = g(X) [0 1 0] [1] [0 1 0] [1] [1 0 1] [2] [1 0 1] [1] g(active(X)) = [0 1 0]X + [1] >= [0 1 0]X + [1] = g(X) [0 1 0] [1] [0 1 0] [1] problem: DPs: TRS: active(f(g(X),Y)) -> mark(f(X,f(g(X),Y))) mark(f(X1,X2)) -> active(f(mark(X1),X2)) mark(g(X)) -> active(g(mark(X))) f(mark(X1),X2) -> f(X1,X2) f(X1,mark(X2)) -> f(X1,X2) f(active(X1),X2) -> f(X1,X2) f(X1,active(X2)) -> f(X1,X2) g(mark(X)) -> g(X) g(active(X)) -> g(X) Qed