YES Problem: active(f(x)) -> mark(x) top(active(c())) -> top(mark(c())) top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) check(x) -> start(match(f(X()),x)) match(f(x),f(y)) -> f(match(x,y)) match(X(),x) -> proper(x) proper(c()) -> ok(c()) proper(f(x)) -> f(proper(x)) f(ok(x)) -> ok(f(x)) start(ok(x)) -> found(x) f(found(x)) -> found(f(x)) top(found(x)) -> top(active(x)) active(f(x)) -> f(active(x)) f(mark(x)) -> mark(f(x)) Proof: Matrix Interpretation Processor: dim=3 interpretation: [1 1 1] [found](x0) = [0 0 0]x0 [0 0 0] , [1 0 0] [ok](x0) = [0 1 1]x0 [0 1 0] , [1 0 0] [0] [proper](x0) = [0 0 0]x0 + [1] [0 0 0] [1], [1 1 0] [0] [start](x0) = [0 0 0]x0 + [1] [0 0 0] [0], [1 0 0] [1 0 0] [0] [match](x0, x1) = [0 1 0]x0 + [0 0 0]x1 + [0] [0 0 0] [0 0 0] [1], [0] [X] = [1] [0], [1 0 0] [0] [check](x0) = [0 0 0]x0 + [1] [0 0 0] [0], [1 0 1] [top](x0) = [0 0 0]x0 [1 0 0] , [0] [c] = [1] [0], [1 0 0] [mark](x0) = [0 0 0]x0 [0 0 0] , [1 0 0] [active](x0) = [1 0 0]x0 [0 1 0] , [1 0 0] [f](x0) = [0 0 0]x0 [0 0 0] orientation: [1 0 0] [1 0 0] active(f(x)) = [1 0 0]x >= [0 0 0]x = mark(x) [0 0 0] [0 0 0] [1] [0] top(active(c())) = [0] >= [0] = top(mark(c())) [0] [0] [1 0 0] [1 0 0] top(mark(x)) = [0 0 0]x >= [0 0 0]x = top(check(x)) [1 0 0] [1 0 0] [1 0 0] [0] [1 0 0] check(f(x)) = [0 0 0]x + [1] >= [0 0 0]x = f(check(x)) [0 0 0] [0] [0 0 0] [1 0 0] [0] [1 0 0] [0] check(x) = [0 0 0]x + [1] >= [0 0 0]x + [1] = start(match(f(X()),x)) [0 0 0] [0] [0 0 0] [0] [1 0 0] [1 0 0] [0] [1 0 0] [1 0 0] match(f(x),f(y)) = [0 0 0]x + [0 0 0]y + [0] >= [0 0 0]x + [0 0 0]y = f(match(x,y)) [0 0 0] [0 0 0] [1] [0 0 0] [0 0 0] [1 0 0] [0] [1 0 0] [0] match(X(),x) = [0 0 0]x + [1] >= [0 0 0]x + [1] = proper(x) [0 0 0] [1] [0 0 0] [1] [0] [0] proper(c()) = [1] >= [1] = ok(c()) [1] [1] [1 0 0] [0] [1 0 0] proper(f(x)) = [0 0 0]x + [1] >= [0 0 0]x = f(proper(x)) [0 0 0] [1] [0 0 0] [1 0 0] [1 0 0] f(ok(x)) = [0 0 0]x >= [0 0 0]x = ok(f(x)) [0 0 0] [0 0 0] [1 1 1] [0] [1 1 1] start(ok(x)) = [0 0 0]x + [1] >= [0 0 0]x = found(x) [0 0 0] [0] [0 0 0] [1 1 1] [1 0 0] f(found(x)) = [0 0 0]x >= [0 0 0]x = found(f(x)) [0 0 0] [0 0 0] [1 1 1] [1 1 0] top(found(x)) = [0 0 0]x >= [0 0 0]x = top(active(x)) [1 1 1] [1 0 0] [1 0 0] [1 0 0] active(f(x)) = [1 0 0]x >= [0 0 0]x = f(active(x)) [0 0 0] [0 0 0] [1 0 0] [1 0 0] f(mark(x)) = [0 0 0]x >= [0 0 0]x = mark(f(x)) [0 0 0] [0 0 0] problem: active(f(x)) -> mark(x) top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) check(x) -> start(match(f(X()),x)) match(f(x),f(y)) -> f(match(x,y)) match(X(),x) -> proper(x) proper(c()) -> ok(c()) proper(f(x)) -> f(proper(x)) f(ok(x)) -> ok(f(x)) start(ok(x)) -> found(x) f(found(x)) -> found(f(x)) top(found(x)) -> top(active(x)) active(f(x)) -> f(active(x)) f(mark(x)) -> mark(f(x)) Matrix Interpretation Processor: dim=1 interpretation: [found](x0) = 3x0, [ok](x0) = 2x0, [proper](x0) = 3x0, [start](x0) = 2x0, [match](x0, x1) = 2x0 + 3x1, [X] = 0, [check](x0) = 6x0, [top](x0) = x0, [c] = 1, [mark](x0) = 6x0, [active](x0) = 3x0, [f](x0) = 2x0 orientation: active(f(x)) = 6x >= 6x = mark(x) top(mark(x)) = 6x >= 6x = top(check(x)) check(f(x)) = 12x >= 12x = f(check(x)) check(x) = 6x >= 6x = start(match(f(X()),x)) match(f(x),f(y)) = 4x + 6y >= 4x + 6y = f(match(x,y)) match(X(),x) = 3x >= 3x = proper(x) proper(c()) = 3 >= 2 = ok(c()) proper(f(x)) = 6x >= 6x = f(proper(x)) f(ok(x)) = 4x >= 4x = ok(f(x)) start(ok(x)) = 4x >= 3x = found(x) f(found(x)) = 6x >= 6x = found(f(x)) top(found(x)) = 3x >= 3x = top(active(x)) active(f(x)) = 6x >= 6x = f(active(x)) f(mark(x)) = 12x >= 12x = mark(f(x)) problem: active(f(x)) -> mark(x) top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) check(x) -> start(match(f(X()),x)) match(f(x),f(y)) -> f(match(x,y)) match(X(),x) -> proper(x) proper(f(x)) -> f(proper(x)) f(ok(x)) -> ok(f(x)) start(ok(x)) -> found(x) f(found(x)) -> found(f(x)) top(found(x)) -> top(active(x)) active(f(x)) -> f(active(x)) f(mark(x)) -> mark(f(x)) Matrix Interpretation Processor: dim=1 interpretation: [found](x0) = 4x0 + 3, [ok](x0) = 4x0 + 4, [proper](x0) = 2x0, [start](x0) = x0 + 2, [match](x0, x1) = x0 + 2x1, [X] = 0, [check](x0) = 6x0 + 5, [top](x0) = x0 + 2, [mark](x0) = 6x0 + 5, [active](x0) = 4x0 + 2, [f](x0) = 2x0 + 1 orientation: active(f(x)) = 8x + 6 >= 6x + 5 = mark(x) top(mark(x)) = 6x + 7 >= 6x + 7 = top(check(x)) check(f(x)) = 12x + 11 >= 12x + 11 = f(check(x)) check(x) = 6x + 5 >= 2x + 3 = start(match(f(X()),x)) match(f(x),f(y)) = 2x + 4y + 3 >= 2x + 4y + 1 = f(match(x,y)) match(X(),x) = 2x >= 2x = proper(x) proper(f(x)) = 4x + 2 >= 4x + 1 = f(proper(x)) f(ok(x)) = 8x + 9 >= 8x + 8 = ok(f(x)) start(ok(x)) = 4x + 6 >= 4x + 3 = found(x) f(found(x)) = 8x + 7 >= 8x + 7 = found(f(x)) top(found(x)) = 4x + 5 >= 4x + 4 = top(active(x)) active(f(x)) = 8x + 6 >= 8x + 5 = f(active(x)) f(mark(x)) = 12x + 11 >= 12x + 11 = mark(f(x)) problem: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) DP Processor: DPs: top#(mark(x)) -> check#(x) top#(mark(x)) -> top#(check(x)) check#(f(x)) -> check#(x) check#(f(x)) -> f#(check(x)) f#(found(x)) -> f#(x) f#(mark(x)) -> f#(x) TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) TDG Processor: DPs: top#(mark(x)) -> check#(x) top#(mark(x)) -> top#(check(x)) check#(f(x)) -> check#(x) check#(f(x)) -> f#(check(x)) f#(found(x)) -> f#(x) f#(mark(x)) -> f#(x) TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) graph: f#(found(x)) -> f#(x) -> f#(mark(x)) -> f#(x) f#(found(x)) -> f#(x) -> f#(found(x)) -> f#(x) f#(mark(x)) -> f#(x) -> f#(mark(x)) -> f#(x) f#(mark(x)) -> f#(x) -> f#(found(x)) -> f#(x) check#(f(x)) -> f#(check(x)) -> f#(mark(x)) -> f#(x) check#(f(x)) -> f#(check(x)) -> f#(found(x)) -> f#(x) check#(f(x)) -> check#(x) -> check#(f(x)) -> f#(check(x)) check#(f(x)) -> check#(x) -> check#(f(x)) -> check#(x) top#(mark(x)) -> check#(x) -> check#(f(x)) -> f#(check(x)) top#(mark(x)) -> check#(x) -> check#(f(x)) -> check#(x) top#(mark(x)) -> top#(check(x)) -> top#(mark(x)) -> top#(check(x)) top#(mark(x)) -> top#(check(x)) -> top#(mark(x)) -> check#(x) SCC Processor: #sccs: 3 #rules: 4 #arcs: 12/36 DPs: top#(mark(x)) -> top#(check(x)) TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) CDG Processor: DPs: top#(mark(x)) -> top#(check(x)) TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) graph: Qed DPs: check#(f(x)) -> check#(x) TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) Subterm Criterion Processor: simple projection: pi(check#) = 0 problem: DPs: TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) Qed DPs: f#(found(x)) -> f#(x) f#(mark(x)) -> f#(x) TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) Subterm Criterion Processor: simple projection: pi(f#) = 0 problem: DPs: TRS: top(mark(x)) -> top(check(x)) check(f(x)) -> f(check(x)) match(X(),x) -> proper(x) f(found(x)) -> found(f(x)) f(mark(x)) -> mark(f(x)) Qed