We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) , top(mark(X)) -> top(proper(X)) , top(ok(X)) -> top(active(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We add the following dependency tuples: Strict DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } and mark the set of starting terms. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) , top(mark(X)) -> top(proper(X)) , top(ok(X)) -> top(active(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We replace rewrite rules by usable rules: Weak Usable Rules: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We decompose the input problem according to the dependency graph into the upper component { top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } and lower component { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) } Further, following extension rules are added to the lower component. { top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } TcT solves the upper component with certificate YES(O(1),O(n^1)). Sub-proof: ---------- We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'Small Polynomial Path Order (PS,1-bounded)' to orient following rules strictly. DPs: { 1: top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , 2: top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } Sub-proof: ---------- The input was oriented with the instance of 'Small Polynomial Path Order (PS,1-bounded)' as induced by the safe mapping safe(active) = {}, safe(f) = {1, 2}, safe(g) = {1}, safe(mark) = {1}, safe(proper) = {}, safe(ok) = {1}, safe(active^#) = {}, safe(proper^#) = {}, safe(top^#) = {}, safe(c_10) = {}, safe(c_11) = {} and precedence empty . Following symbols are considered recursive: {active, top^#} The recursion depth is 1. Further, following argument filtering is employed: pi(active) = 1, pi(f) = [1], pi(g) = [1], pi(mark) = [1], pi(proper) = 1, pi(ok) = [1], pi(active^#) = [], pi(proper^#) = [], pi(top^#) = [1], pi(c_10) = [1, 2], pi(c_11) = [1, 2] Usable defined function symbols are a subset of: {active, f, g, proper, active^#, proper^#, top^#} For your convenience, here are the satisfied ordering constraints: pi(top^#(mark(X))) = top^#(mark(; X);) > c_10(top^#(X;), proper^#();) = pi(c_10(top^#(proper(X)), proper^#(X))) pi(top^#(ok(X))) = top^#(ok(; X);) > c_11(top^#(X;), active^#();) = pi(c_11(top^#(active(X)), active^#(X))) pi(active(f(X1, X2))) = f(; X1) >= f(; X1) = pi(f(active(X1), X2)) pi(active(f(g(X), Y))) = f(; g(; X)) >= mark(; f(; X)) = pi(mark(f(X, f(g(X), Y)))) pi(active(g(X))) = g(; X) >= g(; X) = pi(g(active(X))) pi(f(mark(X1), X2)) = f(; mark(; X1)) >= mark(; f(; X1)) = pi(mark(f(X1, X2))) pi(f(ok(X1), ok(X2))) = f(; ok(; X1)) >= ok(; f(; X1)) = pi(ok(f(X1, X2))) pi(g(mark(X))) = g(; mark(; X)) >= mark(; g(; X)) = pi(mark(g(X))) pi(g(ok(X))) = g(; ok(; X)) >= ok(; g(; X)) = pi(ok(g(X))) pi(proper(f(X1, X2))) = f(; X1) >= f(; X1) = pi(f(proper(X1), proper(X2))) pi(proper(g(X))) = g(; X) >= g(; X) = pi(g(proper(X))) The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak DPs: { top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { top^#(mark(X)) -> c_10(top^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> c_11(top^#(active(X)), active^#(X)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded We return to the main proof. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) } Weak DPs: { top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 7: g^#(ok(X)) -> c_7(g^#(X)) , 10: top^#(mark(X)) -> proper^#(X) , 12: top^#(ok(X)) -> active^#(X) , 13: top^#(ok(X)) -> top^#(active(X)) } Trs: { f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(ok(X)) -> ok(g(X)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1, 3}, Uargs(c_3) = {1, 2}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1, 2, 3}, Uargs(c_9) = {1, 2} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [active](x1) = [1] x1 + [0] [f](x1, x2) = [2] x1 + [0] [g](x1) = [5] x1 + [0] [mark](x1) = [1] x1 + [0] [proper](x1) = [0] [ok](x1) = [1] x1 + [1] [active^#](x1) = [1] x1 + [0] [c_1](x1, x2) = [4] x1 + [1] x2 + [0] [f^#](x1, x2) = [0] [c_2](x1, x2, x3) = [1] x1 + [1] x3 + [0] [g^#](x1) = [1] x1 + [0] [c_3](x1, x2) = [2] x1 + [3] x2 + [0] [c_4](x1) = [1] x1 + [0] [c_5](x1) = [1] x1 + [0] [c_6](x1) = [1] x1 + [0] [c_7](x1) = [1] x1 + [0] [proper^#](x1) = [0] [c_8](x1, x2, x3) = [3] x1 + [2] x2 + [1] x3 + [0] [c_9](x1, x2) = [2] x1 + [1] x2 + [0] [top^#](x1) = [2] x1 + [2] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [2] X1 + [0] >= [2] X1 + [0] = [f(active(X1), X2)] [active(f(g(X), Y))] = [10] X + [0] >= [2] X + [0] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [5] X + [0] >= [5] X + [0] = [g(active(X))] [f(mark(X1), X2)] = [2] X1 + [0] >= [2] X1 + [0] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [2] X1 + [2] > [2] X1 + [1] = [ok(f(X1, X2))] [g(mark(X))] = [5] X + [0] >= [5] X + [0] = [mark(g(X))] [g(ok(X))] = [5] X + [5] > [5] X + [1] = [ok(g(X))] [proper(f(X1, X2))] = [0] >= [0] = [f(proper(X1), proper(X2))] [proper(g(X))] = [0] >= [0] = [g(proper(X))] [active^#(f(X1, X2))] = [2] X1 + [0] >= [1] X1 + [0] = [c_1(f^#(active(X1), X2), active^#(X1))] [active^#(f(g(X), Y))] = [10] X + [0] >= [1] X + [0] = [c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X))] [active^#(g(X))] = [5] X + [0] >= [5] X + [0] = [c_3(g^#(active(X)), active^#(X))] [f^#(mark(X1), X2)] = [0] >= [0] = [c_4(f^#(X1, X2))] [f^#(ok(X1), ok(X2))] = [0] >= [0] = [c_5(f^#(X1, X2))] [g^#(mark(X))] = [1] X + [0] >= [1] X + [0] = [c_6(g^#(X))] [g^#(ok(X))] = [1] X + [1] > [1] X + [0] = [c_7(g^#(X))] [proper^#(f(X1, X2))] = [0] >= [0] = [c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2))] [proper^#(g(X))] = [0] >= [0] = [c_9(g^#(proper(X)), proper^#(X))] [top^#(mark(X))] = [2] X + [2] > [0] = [proper^#(X)] [top^#(mark(X))] = [2] X + [2] >= [2] = [top^#(proper(X))] [top^#(ok(X))] = [2] X + [4] > [1] X + [0] = [active^#(X)] [top^#(ok(X))] = [2] X + [4] > [2] X + [2] = [top^#(active(X))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) } Weak DPs: { g^#(ok(X)) -> c_7(g^#(X)) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 5: f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , 10: top^#(mark(X)) -> proper^#(X) , 12: top^#(ok(X)) -> active^#(X) , 13: top^#(ok(X)) -> top^#(active(X)) } Trs: { f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(ok(X)) -> ok(g(X)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1, 3}, Uargs(c_3) = {1, 2}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1, 2, 3}, Uargs(c_9) = {1, 2} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [active](x1) = [1] x1 + [0] [f](x1, x2) = [1] x1 + [1] x2 + [0] [g](x1) = [5] x1 + [0] [mark](x1) = [0] [proper](x1) = [0] [ok](x1) = [1] x1 + [1] [active^#](x1) = [1] x1 + [0] [c_1](x1, x2) = [1] x1 + [1] x2 + [0] [f^#](x1, x2) = [1] x2 + [0] [c_2](x1, x2, x3) = [1] x1 + [1] x3 + [0] [g^#](x1) = [0] [c_3](x1, x2) = [4] x1 + [3] x2 + [0] [c_4](x1) = [1] x1 + [0] [c_5](x1) = [1] x1 + [0] [c_6](x1) = [1] x1 + [0] [c_7](x1) = [1] x1 + [0] [proper^#](x1) = [0] [c_8](x1, x2, x3) = [1] x1 + [2] x2 + [2] x3 + [0] [c_9](x1, x2) = [1] x1 + [2] x2 + [0] [top^#](x1) = [1] x1 + [7] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [1] X1 + [1] X2 + [0] >= [1] X1 + [1] X2 + [0] = [f(active(X1), X2)] [active(f(g(X), Y))] = [5] X + [1] Y + [0] >= [0] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [5] X + [0] >= [5] X + [0] = [g(active(X))] [f(mark(X1), X2)] = [1] X2 + [0] >= [0] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [1] X1 + [1] X2 + [2] > [1] X1 + [1] X2 + [1] = [ok(f(X1, X2))] [g(mark(X))] = [0] >= [0] = [mark(g(X))] [g(ok(X))] = [5] X + [5] > [5] X + [1] = [ok(g(X))] [proper(f(X1, X2))] = [0] >= [0] = [f(proper(X1), proper(X2))] [proper(g(X))] = [0] >= [0] = [g(proper(X))] [active^#(f(X1, X2))] = [1] X1 + [1] X2 + [0] >= [1] X1 + [1] X2 + [0] = [c_1(f^#(active(X1), X2), active^#(X1))] [active^#(f(g(X), Y))] = [5] X + [1] Y + [0] >= [5] X + [1] Y + [0] = [c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X))] [active^#(g(X))] = [5] X + [0] >= [3] X + [0] = [c_3(g^#(active(X)), active^#(X))] [f^#(mark(X1), X2)] = [1] X2 + [0] >= [1] X2 + [0] = [c_4(f^#(X1, X2))] [f^#(ok(X1), ok(X2))] = [1] X2 + [1] > [1] X2 + [0] = [c_5(f^#(X1, X2))] [g^#(mark(X))] = [0] >= [0] = [c_6(g^#(X))] [g^#(ok(X))] = [0] >= [0] = [c_7(g^#(X))] [proper^#(f(X1, X2))] = [0] >= [0] = [c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2))] [proper^#(g(X))] = [0] >= [0] = [c_9(g^#(proper(X)), proper^#(X))] [top^#(mark(X))] = [7] > [0] = [proper^#(X)] [top^#(mark(X))] = [7] >= [7] = [top^#(proper(X))] [top^#(ok(X))] = [1] X + [8] > [1] X + [0] = [active^#(X)] [top^#(ok(X))] = [1] X + [8] > [1] X + [7] = [top^#(active(X))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) } Weak DPs: { f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(ok(X)) -> c_7(g^#(X)) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We decompose the input problem according to the dependency graph into the upper component { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } and lower component { active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) } Further, following extension rules are added to the lower component. { active^#(f(X1, X2)) -> active^#(X1) , active^#(f(X1, X2)) -> f^#(active(X1), X2) , active^#(g(X)) -> active^#(X) , active^#(g(X)) -> g^#(active(X)) , proper^#(f(X1, X2)) -> f^#(proper(X1), proper(X2)) , proper^#(f(X1, X2)) -> proper^#(X1) , proper^#(f(X1, X2)) -> proper^#(X2) , proper^#(g(X)) -> g^#(proper(X)) , proper^#(g(X)) -> proper^#(X) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } TcT solves the upper component with certificate YES(O(1),O(n^1)). Sub-proof: ---------- We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> active^#(X) } Weak DPs: { top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 1: active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , 2: active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) } Trs: { active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_3) = {1, 2}, Uargs(c_8) = {1, 2, 3}, Uargs(c_9) = {1, 2} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [active](x1) = [1] x1 + [0] [f](x1, x2) = [4] x1 + [3] [g](x1) = [1] x1 + [1] [mark](x1) = [1] x1 + [0] [proper](x1) = [1] x1 + [0] [ok](x1) = [1] x1 + [0] [active^#](x1) = [1] x1 + [0] [c_1](x1, x2) = [1] x1 + [4] x2 + [1] [f^#](x1, x2) = [0] [g^#](x1) = [0] [c_3](x1, x2) = [5] x1 + [1] x2 + [0] [proper^#](x1) = [0] [c_8](x1, x2, x3) = [1] x1 + [5] x2 + [1] x3 + [0] [c_9](x1, x2) = [1] x1 + [1] x2 + [0] [top^#](x1) = [2] x1 + [0] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [4] X1 + [3] >= [4] X1 + [3] = [f(active(X1), X2)] [active(f(g(X), Y))] = [4] X + [7] > [4] X + [3] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [1] X + [1] >= [1] X + [1] = [g(active(X))] [f(mark(X1), X2)] = [4] X1 + [3] >= [4] X1 + [3] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [4] X1 + [3] >= [4] X1 + [3] = [ok(f(X1, X2))] [g(mark(X))] = [1] X + [1] >= [1] X + [1] = [mark(g(X))] [g(ok(X))] = [1] X + [1] >= [1] X + [1] = [ok(g(X))] [proper(f(X1, X2))] = [4] X1 + [3] >= [4] X1 + [3] = [f(proper(X1), proper(X2))] [proper(g(X))] = [1] X + [1] >= [1] X + [1] = [g(proper(X))] [active^#(f(X1, X2))] = [4] X1 + [3] > [4] X1 + [1] = [c_1(f^#(active(X1), X2), active^#(X1))] [active^#(g(X))] = [1] X + [1] > [1] X + [0] = [c_3(g^#(active(X)), active^#(X))] [proper^#(f(X1, X2))] = [0] >= [0] = [c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2))] [proper^#(g(X))] = [0] >= [0] = [c_9(g^#(proper(X)), proper^#(X))] [top^#(mark(X))] = [2] X + [0] >= [0] = [proper^#(X)] [top^#(mark(X))] = [2] X + [0] >= [2] X + [0] = [top^#(proper(X))] [top^#(ok(X))] = [2] X + [0] >= [1] X + [0] = [active^#(X)] [top^#(ok(X))] = [2] X + [0] >= [2] X + [0] = [top^#(active(X))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> active^#(X) } Weak DPs: { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { active^#(f(X1, X2)) -> c_1(f^#(active(X1), X2), active^#(X1)) , active^#(g(X)) -> c_3(g^#(active(X)), active^#(X)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> active^#(X) } Weak DPs: { top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) Due to missing edges in the dependency-graph, the right-hand sides of following rules could be simplified: { proper^#(f(X1, X2)) -> c_8(f^#(proper(X1), proper(X2)), proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_9(g^#(proper(X)), proper^#(X)) , top^#(ok(X)) -> active^#(X) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { proper^#(f(X1, X2)) -> c_1(proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_2(proper^#(X)) , top^#(ok(X)) -> c_3() } Weak DPs: { top^#(mark(X)) -> c_4(proper^#(X)) , top^#(mark(X)) -> c_5(top^#(proper(X))) , top^#(ok(X)) -> c_6(top^#(active(X))) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 3: top^#(ok(X)) -> c_3() , 4: top^#(mark(X)) -> c_4(proper^#(X)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [active](x1) = [0] [f](x1, x2) = [0] [g](x1) = [0] [mark](x1) = [0] [proper](x1) = [0] [ok](x1) = [0] [active^#](x1) = [0] [c_1](x1, x2) = [0] [f^#](x1, x2) = [0] [g^#](x1) = [0] [c_3](x1, x2) = [0] [proper^#](x1) = [0] [c_8](x1, x2, x3) = [0] [c_9](x1, x2) = [0] [top^#](x1) = [4] [c] = [0] [c_1](x1, x2) = [4] x1 + [4] x2 + [0] [c_2](x1) = [4] x1 + [0] [c_3] = [0] [c_4](x1) = [4] x1 + [0] [c_5](x1) = [1] x1 + [0] [c_6](x1) = [1] x1 + [0] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [0] >= [0] = [f(active(X1), X2)] [active(f(g(X), Y))] = [0] >= [0] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [0] >= [0] = [g(active(X))] [f(mark(X1), X2)] = [0] >= [0] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [0] >= [0] = [ok(f(X1, X2))] [g(mark(X))] = [0] >= [0] = [mark(g(X))] [g(ok(X))] = [0] >= [0] = [ok(g(X))] [proper(f(X1, X2))] = [0] >= [0] = [f(proper(X1), proper(X2))] [proper(g(X))] = [0] >= [0] = [g(proper(X))] [proper^#(f(X1, X2))] = [0] >= [0] = [c_1(proper^#(X1), proper^#(X2))] [proper^#(g(X))] = [0] >= [0] = [c_2(proper^#(X))] [top^#(mark(X))] = [4] > [0] = [c_4(proper^#(X))] [top^#(mark(X))] = [4] >= [4] = [c_5(top^#(proper(X)))] [top^#(ok(X))] = [4] > [0] = [c_3()] [top^#(ok(X))] = [4] >= [4] = [c_6(top^#(active(X)))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { proper^#(f(X1, X2)) -> c_1(proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_2(proper^#(X)) } Weak DPs: { top^#(mark(X)) -> c_4(proper^#(X)) , top^#(mark(X)) -> c_5(top^#(proper(X))) , top^#(ok(X)) -> c_3() , top^#(ok(X)) -> c_6(top^#(active(X))) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { top^#(ok(X)) -> c_3() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { proper^#(f(X1, X2)) -> c_1(proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_2(proper^#(X)) } Weak DPs: { top^#(mark(X)) -> c_4(proper^#(X)) , top^#(mark(X)) -> c_5(top^#(proper(X))) , top^#(ok(X)) -> c_6(top^#(active(X))) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 2' to orient following rules strictly. DPs: { 2: proper^#(g(X)) -> c_2(proper^#(X)) , 5: top^#(ok(X)) -> c_6(top^#(active(X))) } Trs: { active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , g(ok(X)) -> ok(g(X)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [active](x1) = [4 0] x1 + [0] [0 1] [0] [f](x1, x2) = [1 0] x1 + [3 0] x2 + [0] [0 2] [0 3] [0] [g](x1) = [1 0] x1 + [1] [0 5] [0] [mark](x1) = [1 0] x1 + [0] [0 0] [0] [proper](x1) = [1 0] x1 + [0] [0 0] [0] [ok](x1) = [0 0] x1 + [0] [1 1] [1] [active^#](x1) = [0] [0] [c_1](x1, x2) = [0] [0] [f^#](x1, x2) = [0] [0] [g^#](x1) = [0] [0] [c_3](x1, x2) = [0] [0] [proper^#](x1) = [1 0] x1 + [0] [0 0] [0] [c_8](x1, x2, x3) = [0] [0] [c_9](x1, x2) = [0] [0] [top^#](x1) = [1 4] x1 + [0] [0 0] [0] [c] = [0] [0] [c_1](x1, x2) = [1 1] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_2](x1) = [1 0] x1 + [0] [0 0] [0] [c_3] = [0] [0] [c_4](x1) = [1 0] x1 + [0] [0 0] [0] [c_5](x1) = [1 0] x1 + [0] [0 0] [0] [c_6](x1) = [1 0] x1 + [0] [0 0] [0] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [4 0] X1 + [12 0] X2 + [0] [0 2] [ 0 3] [0] >= [4 0] X1 + [3 0] X2 + [0] [0 2] [0 3] [0] = [f(active(X1), X2)] [active(f(g(X), Y))] = [4 0] X + [12 0] Y + [4] [0 10] [ 0 3] [0] > [4 0] X + [9 0] Y + [3] [0 0] [0 0] [0] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [4 0] X + [4] [0 5] [0] > [4 0] X + [1] [0 5] [0] = [g(active(X))] [f(mark(X1), X2)] = [1 0] X1 + [3 0] X2 + [0] [0 0] [0 3] [0] >= [1 0] X1 + [3 0] X2 + [0] [0 0] [0 0] [0] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [0 0] X1 + [0 0] X2 + [0] [2 2] [3 3] [5] >= [0 0] X1 + [0 0] X2 + [0] [1 2] [3 3] [1] = [ok(f(X1, X2))] [g(mark(X))] = [1 0] X + [1] [0 0] [0] >= [1 0] X + [1] [0 0] [0] = [mark(g(X))] [g(ok(X))] = [0 0] X + [1] [5 5] [5] > [0 0] X + [0] [1 5] [2] = [ok(g(X))] [proper(f(X1, X2))] = [1 0] X1 + [3 0] X2 + [0] [0 0] [0 0] [0] >= [1 0] X1 + [3 0] X2 + [0] [0 0] [0 0] [0] = [f(proper(X1), proper(X2))] [proper(g(X))] = [1 0] X + [1] [0 0] [0] >= [1 0] X + [1] [0 0] [0] = [g(proper(X))] [proper^#(f(X1, X2))] = [1 0] X1 + [3 0] X2 + [0] [0 0] [0 0] [0] >= [1 0] X1 + [1 0] X2 + [0] [0 0] [0 0] [0] = [c_1(proper^#(X1), proper^#(X2))] [proper^#(g(X))] = [1 0] X + [1] [0 0] [0] > [1 0] X + [0] [0 0] [0] = [c_2(proper^#(X))] [top^#(mark(X))] = [1 0] X + [0] [0 0] [0] >= [1 0] X + [0] [0 0] [0] = [c_4(proper^#(X))] [top^#(mark(X))] = [1 0] X + [0] [0 0] [0] >= [1 0] X + [0] [0 0] [0] = [c_5(top^#(proper(X)))] [top^#(ok(X))] = [4 4] X + [4] [0 0] [0] > [4 4] X + [0] [0 0] [0] = [c_6(top^#(active(X)))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { proper^#(f(X1, X2)) -> c_1(proper^#(X1), proper^#(X2)) } Weak DPs: { proper^#(g(X)) -> c_2(proper^#(X)) , top^#(mark(X)) -> c_4(proper^#(X)) , top^#(mark(X)) -> c_5(top^#(proper(X))) , top^#(ok(X)) -> c_6(top^#(active(X))) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 2' to orient following rules strictly. DPs: { 1: proper^#(f(X1, X2)) -> c_1(proper^#(X1), proper^#(X2)) , 5: top^#(ok(X)) -> c_6(top^#(active(X))) } Trs: { active(f(X1, X2)) -> f(active(X1), X2) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [active](x1) = [2 0] x1 + [0] [0 1] [0] [f](x1, x2) = [7 0] x1 + [1 0] x2 + [1] [0 7] [0 3] [0] [g](x1) = [1 0] x1 + [0] [0 1] [0] [mark](x1) = [1 0] x1 + [0] [0 0] [0] [proper](x1) = [1 0] x1 + [0] [0 0] [0] [ok](x1) = [0 0] x1 + [1] [1 1] [1] [active^#](x1) = [0] [0] [c_1](x1, x2) = [0] [0] [f^#](x1, x2) = [0] [0] [g^#](x1) = [0] [0] [c_3](x1, x2) = [0] [0] [proper^#](x1) = [1 0] x1 + [0] [0 0] [1] [c_8](x1, x2, x3) = [0] [0] [c_9](x1, x2) = [0] [0] [top^#](x1) = [1 7] x1 + [0] [0 0] [0] [c] = [0] [0] [c_1](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_2](x1) = [1 0] x1 + [0] [0 0] [0] [c_3] = [0] [0] [c_4](x1) = [1 0] x1 + [0] [0 0] [0] [c_5](x1) = [1 0] x1 + [0] [0 0] [0] [c_6](x1) = [1 0] x1 + [0] [0 0] [0] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [14 0] X1 + [2 0] X2 + [2] [ 0 7] [0 3] [0] > [14 0] X1 + [1 0] X2 + [1] [ 0 7] [0 3] [0] = [f(active(X1), X2)] [active(f(g(X), Y))] = [14 0] X + [2 0] Y + [2] [ 0 7] [0 3] [0] >= [14 0] X + [1 0] Y + [2] [ 0 0] [0 0] [0] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [2 0] X + [0] [0 1] [0] >= [2 0] X + [0] [0 1] [0] = [g(active(X))] [f(mark(X1), X2)] = [7 0] X1 + [1 0] X2 + [1] [0 0] [0 3] [0] >= [7 0] X1 + [1 0] X2 + [1] [0 0] [0 0] [0] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [0 0] X1 + [0 0] X2 + [9] [7 7] [3 3] [10] > [0 0] X1 + [0 0] X2 + [1] [7 7] [1 3] [2] = [ok(f(X1, X2))] [g(mark(X))] = [1 0] X + [0] [0 0] [0] >= [1 0] X + [0] [0 0] [0] = [mark(g(X))] [g(ok(X))] = [0 0] X + [1] [1 1] [1] >= [0 0] X + [1] [1 1] [1] = [ok(g(X))] [proper(f(X1, X2))] = [7 0] X1 + [1 0] X2 + [1] [0 0] [0 0] [0] >= [7 0] X1 + [1 0] X2 + [1] [0 0] [0 0] [0] = [f(proper(X1), proper(X2))] [proper(g(X))] = [1 0] X + [0] [0 0] [0] >= [1 0] X + [0] [0 0] [0] = [g(proper(X))] [proper^#(f(X1, X2))] = [7 0] X1 + [1 0] X2 + [1] [0 0] [0 0] [1] > [1 0] X1 + [1 0] X2 + [0] [0 0] [0 0] [0] = [c_1(proper^#(X1), proper^#(X2))] [proper^#(g(X))] = [1 0] X + [0] [0 0] [1] >= [1 0] X + [0] [0 0] [0] = [c_2(proper^#(X))] [top^#(mark(X))] = [1 0] X + [0] [0 0] [0] >= [1 0] X + [0] [0 0] [0] = [c_4(proper^#(X))] [top^#(mark(X))] = [1 0] X + [0] [0 0] [0] >= [1 0] X + [0] [0 0] [0] = [c_5(top^#(proper(X)))] [top^#(ok(X))] = [7 7] X + [8] [0 0] [0] > [2 7] X + [0] [0 0] [0] = [c_6(top^#(active(X)))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak DPs: { proper^#(f(X1, X2)) -> c_1(proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_2(proper^#(X)) , top^#(mark(X)) -> c_4(proper^#(X)) , top^#(mark(X)) -> c_5(top^#(proper(X))) , top^#(ok(X)) -> c_6(top^#(active(X))) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { proper^#(f(X1, X2)) -> c_1(proper^#(X1), proper^#(X2)) , proper^#(g(X)) -> c_2(proper^#(X)) , top^#(mark(X)) -> c_4(proper^#(X)) , top^#(mark(X)) -> c_5(top^#(proper(X))) , top^#(ok(X)) -> c_6(top^#(active(X))) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded We return to the main proof. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) } Weak DPs: { active^#(f(X1, X2)) -> active^#(X1) , active^#(f(X1, X2)) -> f^#(active(X1), X2) , active^#(g(X)) -> active^#(X) , active^#(g(X)) -> g^#(active(X)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(f(X1, X2)) -> f^#(proper(X1), proper(X2)) , proper^#(f(X1, X2)) -> proper^#(X1) , proper^#(f(X1, X2)) -> proper^#(X2) , proper^#(g(X)) -> g^#(proper(X)) , proper^#(g(X)) -> proper^#(X) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 1: active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , 3: g^#(mark(X)) -> c_6(g^#(X)) , 5: active^#(f(X1, X2)) -> f^#(active(X1), X2) , 7: active^#(g(X)) -> g^#(active(X)) , 9: g^#(ok(X)) -> c_7(g^#(X)) , 10: proper^#(f(X1, X2)) -> f^#(proper(X1), proper(X2)) , 13: proper^#(g(X)) -> g^#(proper(X)) , 15: top^#(mark(X)) -> proper^#(X) , 16: top^#(mark(X)) -> top^#(proper(X)) , 17: top^#(ok(X)) -> active^#(X) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_2) = {1, 3}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [active](x1) = [1] x1 + [1] [f](x1, x2) = [1] x1 + [0] [g](x1) = [1] x1 + [0] [mark](x1) = [1] x1 + [1] [proper](x1) = [0] [ok](x1) = [1] x1 + [1] [active^#](x1) = [4] x1 + [4] [f^#](x1, x2) = [0] [c_2](x1, x2, x3) = [4] x1 + [1] x3 + [0] [g^#](x1) = [1] x1 + [0] [c_4](x1) = [4] x1 + [0] [c_5](x1) = [4] x1 + [0] [c_6](x1) = [1] x1 + [0] [c_7](x1) = [1] x1 + [0] [proper^#](x1) = [4] [top^#](x1) = [5] x1 + [2] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [1] X1 + [1] >= [1] X1 + [1] = [f(active(X1), X2)] [active(f(g(X), Y))] = [1] X + [1] >= [1] X + [1] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [1] X + [1] >= [1] X + [1] = [g(active(X))] [f(mark(X1), X2)] = [1] X1 + [1] >= [1] X1 + [1] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [1] X1 + [1] >= [1] X1 + [1] = [ok(f(X1, X2))] [g(mark(X))] = [1] X + [1] >= [1] X + [1] = [mark(g(X))] [g(ok(X))] = [1] X + [1] >= [1] X + [1] = [ok(g(X))] [proper(f(X1, X2))] = [0] >= [0] = [f(proper(X1), proper(X2))] [proper(g(X))] = [0] >= [0] = [g(proper(X))] [active^#(f(X1, X2))] = [4] X1 + [4] >= [4] X1 + [4] = [active^#(X1)] [active^#(f(X1, X2))] = [4] X1 + [4] > [0] = [f^#(active(X1), X2)] [active^#(f(g(X), Y))] = [4] X + [4] > [1] X + [0] = [c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X))] [active^#(g(X))] = [4] X + [4] >= [4] X + [4] = [active^#(X)] [active^#(g(X))] = [4] X + [4] > [1] X + [1] = [g^#(active(X))] [f^#(mark(X1), X2)] = [0] >= [0] = [c_4(f^#(X1, X2))] [f^#(ok(X1), ok(X2))] = [0] >= [0] = [c_5(f^#(X1, X2))] [g^#(mark(X))] = [1] X + [1] > [1] X + [0] = [c_6(g^#(X))] [g^#(ok(X))] = [1] X + [1] > [1] X + [0] = [c_7(g^#(X))] [proper^#(f(X1, X2))] = [4] > [0] = [f^#(proper(X1), proper(X2))] [proper^#(f(X1, X2))] = [4] >= [4] = [proper^#(X1)] [proper^#(f(X1, X2))] = [4] >= [4] = [proper^#(X2)] [proper^#(g(X))] = [4] > [0] = [g^#(proper(X))] [proper^#(g(X))] = [4] >= [4] = [proper^#(X)] [top^#(mark(X))] = [5] X + [7] > [4] = [proper^#(X)] [top^#(mark(X))] = [5] X + [7] > [2] = [top^#(proper(X))] [top^#(ok(X))] = [5] X + [7] > [4] X + [4] = [active^#(X)] [top^#(ok(X))] = [5] X + [7] >= [5] X + [7] = [top^#(active(X))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) } Weak DPs: { active^#(f(X1, X2)) -> active^#(X1) , active^#(f(X1, X2)) -> f^#(active(X1), X2) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> active^#(X) , active^#(g(X)) -> g^#(active(X)) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(f(X1, X2)) -> f^#(proper(X1), proper(X2)) , proper^#(f(X1, X2)) -> proper^#(X1) , proper^#(f(X1, X2)) -> proper^#(X2) , proper^#(g(X)) -> g^#(proper(X)) , proper^#(g(X)) -> proper^#(X) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { active^#(g(X)) -> g^#(active(X)) , g^#(mark(X)) -> c_6(g^#(X)) , g^#(ok(X)) -> c_7(g^#(X)) , proper^#(g(X)) -> g^#(proper(X)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { f^#(mark(X1), X2) -> c_4(f^#(X1, X2)) } Weak DPs: { active^#(f(X1, X2)) -> active^#(X1) , active^#(f(X1, X2)) -> f^#(active(X1), X2) , active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) , active^#(g(X)) -> active^#(X) , f^#(ok(X1), ok(X2)) -> c_5(f^#(X1, X2)) , proper^#(f(X1, X2)) -> f^#(proper(X1), proper(X2)) , proper^#(f(X1, X2)) -> proper^#(X1) , proper^#(f(X1, X2)) -> proper^#(X2) , proper^#(g(X)) -> proper^#(X) , top^#(mark(X)) -> proper^#(X) , top^#(mark(X)) -> top^#(proper(X)) , top^#(ok(X)) -> active^#(X) , top^#(ok(X)) -> top^#(active(X)) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) Due to missing edges in the dependency-graph, the right-hand sides of following rules could be simplified: { active^#(f(g(X), Y)) -> c_2(f^#(X, f(g(X), Y)), f^#(g(X), Y), g^#(X)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { f^#(mark(X1), X2) -> c_1(f^#(X1, X2)) } Weak DPs: { active^#(f(X1, X2)) -> c_2(active^#(X1)) , active^#(f(X1, X2)) -> c_3(f^#(active(X1), X2)) , active^#(f(g(X), Y)) -> c_4(f^#(g(X), Y)) , active^#(g(X)) -> c_5(active^#(X)) , f^#(ok(X1), ok(X2)) -> c_6(f^#(X1, X2)) , proper^#(f(X1, X2)) -> c_7(f^#(proper(X1), proper(X2))) , proper^#(f(X1, X2)) -> c_8(proper^#(X1)) , proper^#(f(X1, X2)) -> c_9(proper^#(X2)) , proper^#(g(X)) -> c_10(proper^#(X)) , top^#(mark(X)) -> c_11(proper^#(X)) , top^#(mark(X)) -> c_12(top^#(proper(X))) , top^#(ok(X)) -> c_13(active^#(X)) , top^#(ok(X)) -> c_14(top^#(active(X))) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 1: f^#(mark(X1), X2) -> c_1(f^#(X1, X2)) , 4: active^#(f(g(X), Y)) -> c_4(f^#(g(X), Y)) , 6: f^#(ok(X1), ok(X2)) -> c_6(f^#(X1, X2)) , 7: proper^#(f(X1, X2)) -> c_7(f^#(proper(X1), proper(X2))) , 13: top^#(ok(X)) -> c_13(active^#(X)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1}, Uargs(c_14) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [active](x1) = [1] x1 + [1] [f](x1, x2) = [1] x1 + [0] [g](x1) = [1] x1 + [0] [mark](x1) = [1] x1 + [1] [proper](x1) = [0] [ok](x1) = [1] x1 + [1] [active^#](x1) = [1] x1 + [1] [f^#](x1, x2) = [1] x1 + [0] [c_2](x1, x2, x3) = [0] [g^#](x1) = [0] [c_4](x1) = [0] [c_5](x1) = [0] [c_6](x1) = [0] [c_7](x1) = [0] [proper^#](x1) = [4] [top^#](x1) = [1] x1 + [3] [c] = [0] [c_1](x1) = [1] x1 + [0] [c_2](x1) = [1] x1 + [0] [c_3](x1) = [1] x1 + [0] [c_4](x1) = [0] [c_5](x1) = [1] x1 + [0] [c_6](x1) = [1] x1 + [0] [c_7](x1) = [1] x1 + [0] [c_8](x1) = [1] x1 + [0] [c_9](x1) = [1] x1 + [0] [c_10](x1) = [1] x1 + [0] [c_11](x1) = [1] x1 + [0] [c_12](x1) = [1] x1 + [1] [c_13](x1) = [1] x1 + [1] [c_14](x1) = [1] x1 + [0] The order satisfies the following ordering constraints: [active(f(X1, X2))] = [1] X1 + [1] >= [1] X1 + [1] = [f(active(X1), X2)] [active(f(g(X), Y))] = [1] X + [1] >= [1] X + [1] = [mark(f(X, f(g(X), Y)))] [active(g(X))] = [1] X + [1] >= [1] X + [1] = [g(active(X))] [f(mark(X1), X2)] = [1] X1 + [1] >= [1] X1 + [1] = [mark(f(X1, X2))] [f(ok(X1), ok(X2))] = [1] X1 + [1] >= [1] X1 + [1] = [ok(f(X1, X2))] [g(mark(X))] = [1] X + [1] >= [1] X + [1] = [mark(g(X))] [g(ok(X))] = [1] X + [1] >= [1] X + [1] = [ok(g(X))] [proper(f(X1, X2))] = [0] >= [0] = [f(proper(X1), proper(X2))] [proper(g(X))] = [0] >= [0] = [g(proper(X))] [active^#(f(X1, X2))] = [1] X1 + [1] >= [1] X1 + [1] = [c_2(active^#(X1))] [active^#(f(X1, X2))] = [1] X1 + [1] >= [1] X1 + [1] = [c_3(f^#(active(X1), X2))] [active^#(f(g(X), Y))] = [1] X + [1] > [0] = [c_4(f^#(g(X), Y))] [active^#(g(X))] = [1] X + [1] >= [1] X + [1] = [c_5(active^#(X))] [f^#(mark(X1), X2)] = [1] X1 + [1] > [1] X1 + [0] = [c_1(f^#(X1, X2))] [f^#(ok(X1), ok(X2))] = [1] X1 + [1] > [1] X1 + [0] = [c_6(f^#(X1, X2))] [proper^#(f(X1, X2))] = [4] > [0] = [c_7(f^#(proper(X1), proper(X2)))] [proper^#(f(X1, X2))] = [4] >= [4] = [c_8(proper^#(X1))] [proper^#(f(X1, X2))] = [4] >= [4] = [c_9(proper^#(X2))] [proper^#(g(X))] = [4] >= [4] = [c_10(proper^#(X))] [top^#(mark(X))] = [1] X + [4] >= [4] = [c_11(proper^#(X))] [top^#(mark(X))] = [1] X + [4] >= [4] = [c_12(top^#(proper(X)))] [top^#(ok(X))] = [1] X + [4] > [1] X + [2] = [c_13(active^#(X))] [top^#(ok(X))] = [1] X + [4] >= [1] X + [4] = [c_14(top^#(active(X)))] The strictly oriented rules are moved into the weak component. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak DPs: { active^#(f(X1, X2)) -> c_2(active^#(X1)) , active^#(f(X1, X2)) -> c_3(f^#(active(X1), X2)) , active^#(f(g(X), Y)) -> c_4(f^#(g(X), Y)) , active^#(g(X)) -> c_5(active^#(X)) , f^#(mark(X1), X2) -> c_1(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_6(f^#(X1, X2)) , proper^#(f(X1, X2)) -> c_7(f^#(proper(X1), proper(X2))) , proper^#(f(X1, X2)) -> c_8(proper^#(X1)) , proper^#(f(X1, X2)) -> c_9(proper^#(X2)) , proper^#(g(X)) -> c_10(proper^#(X)) , top^#(mark(X)) -> c_11(proper^#(X)) , top^#(mark(X)) -> c_12(top^#(proper(X))) , top^#(ok(X)) -> c_13(active^#(X)) , top^#(ok(X)) -> c_14(top^#(active(X))) } Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { active^#(f(X1, X2)) -> c_2(active^#(X1)) , active^#(f(X1, X2)) -> c_3(f^#(active(X1), X2)) , active^#(f(g(X), Y)) -> c_4(f^#(g(X), Y)) , active^#(g(X)) -> c_5(active^#(X)) , f^#(mark(X1), X2) -> c_1(f^#(X1, X2)) , f^#(ok(X1), ok(X2)) -> c_6(f^#(X1, X2)) , proper^#(f(X1, X2)) -> c_7(f^#(proper(X1), proper(X2))) , proper^#(f(X1, X2)) -> c_8(proper^#(X1)) , proper^#(f(X1, X2)) -> c_9(proper^#(X2)) , proper^#(g(X)) -> c_10(proper^#(X)) , top^#(mark(X)) -> c_11(proper^#(X)) , top^#(mark(X)) -> c_12(top^#(proper(X))) , top^#(ok(X)) -> c_13(active^#(X)) , top^#(ok(X)) -> c_14(top^#(active(X))) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { active(f(X1, X2)) -> f(active(X1), X2) , active(f(g(X), Y)) -> mark(f(X, f(g(X), Y))) , active(g(X)) -> g(active(X)) , f(mark(X1), X2) -> mark(f(X1, X2)) , f(ok(X1), ok(X2)) -> ok(f(X1, X2)) , g(mark(X)) -> mark(g(X)) , g(ok(X)) -> ok(g(X)) , proper(f(X1, X2)) -> f(proper(X1), proper(X2)) , proper(g(X)) -> g(proper(X)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded Hurray, we answered YES(O(1),O(n^3))