We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y , second(C(x, y)) -> y , isZero(C(x, y)) -> False() , isZero(Z()) -> True() , goal(xs, ys) -> mul0(xs, ys) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We add the following dependency tuples: Strict DPs: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) , mul0^#(Z(), y) -> c_2() , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) , add0^#(Z(), y) -> c_4() , second^#(C(x, y)) -> c_5() , isZero^#(C(x, y)) -> c_6() , isZero^#(Z()) -> c_7() , goal^#(xs, ys) -> c_8(mul0^#(xs, ys)) } 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: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) , mul0^#(Z(), y) -> c_2() , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) , add0^#(Z(), y) -> c_4() , second^#(C(x, y)) -> c_5() , isZero^#(C(x, y)) -> c_6() , isZero^#(Z()) -> c_7() , goal^#(xs, ys) -> c_8(mul0^#(xs, ys)) } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y , second(C(x, y)) -> y , isZero(C(x, y)) -> False() , isZero(Z()) -> True() , goal(xs, ys) -> mul0(xs, ys) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We estimate the number of application of {2,4,5,6,7} by applications of Pre({2,4,5,6,7}) = {1,3,8}. Here rules are labeled as follows: DPs: { 1: mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) , 2: mul0^#(Z(), y) -> c_2() , 3: add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) , 4: add0^#(Z(), y) -> c_4() , 5: second^#(C(x, y)) -> c_5() , 6: isZero^#(C(x, y)) -> c_6() , 7: isZero^#(Z()) -> c_7() , 8: goal^#(xs, ys) -> c_8(mul0^#(xs, ys)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) , goal^#(xs, ys) -> c_8(mul0^#(xs, ys)) } Weak DPs: { mul0^#(Z(), y) -> c_2() , add0^#(Z(), y) -> c_4() , second^#(C(x, y)) -> c_5() , isZero^#(C(x, y)) -> c_6() , isZero^#(Z()) -> c_7() } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y , second(C(x, y)) -> y , isZero(C(x, y)) -> False() , isZero(Z()) -> True() , goal(xs, ys) -> mul0(xs, ys) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { mul0^#(Z(), y) -> c_2() , add0^#(Z(), y) -> c_4() , second^#(C(x, y)) -> c_5() , isZero^#(C(x, y)) -> c_6() , isZero^#(Z()) -> c_7() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) , goal^#(xs, ys) -> c_8(mul0^#(xs, ys)) } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y , second(C(x, y)) -> y , isZero(C(x, y)) -> False() , isZero(Z()) -> True() , goal(xs, ys) -> mul0(xs, ys) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) Consider the dependency graph 1: mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) -->_1 add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) :2 -->_2 mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) :1 2: add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) -->_1 add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) :2 3: goal^#(xs, ys) -> c_8(mul0^#(xs, ys)) -->_1 mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) :1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). { goal^#(xs, ys) -> c_8(mul0^#(xs, ys)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y , second(C(x, y)) -> y , isZero(C(x, y)) -> False() , isZero(Z()) -> True() , goal(xs, ys) -> mul0(xs, ys) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We replace rewrite rules by usable rules: Weak Usable Rules: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } 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 { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) } and lower component { add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) } Further, following extension rules are added to the lower component. { mul0^#(C(x, y), y') -> mul0^#(y, y') , mul0^#(C(x, y), y') -> add0^#(mul0(y, y'), y') } 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: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } 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: mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) } Sub-proof: ---------- The input was oriented with the instance of 'Small Polynomial Path Order (PS,1-bounded)' as induced by the safe mapping safe(mul0) = {2}, safe(C) = {1, 2}, safe(add0) = {}, safe(Z) = {}, safe(S) = {}, safe(mul0^#) = {2}, safe(c_1) = {}, safe(add0^#) = {} and precedence mul0 > add0 . Following symbols are considered recursive: {mul0^#} The recursion depth is 1. Further, following argument filtering is employed: pi(mul0) = [1, 2], pi(C) = [2], pi(add0) = [1, 2], pi(Z) = [], pi(S) = [], pi(mul0^#) = [1], pi(c_1) = [1, 2], pi(add0^#) = [] Usable defined function symbols are a subset of: {mul0^#, add0^#} For your convenience, here are the satisfied ordering constraints: pi(mul0^#(C(x, y), y')) = mul0^#(C(; y);) > c_1(add0^#(), mul0^#(y;);) = pi(c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y'))) 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: { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } 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. { mul0^#(C(x, y), y') -> c_1(add0^#(mul0(y, y'), y'), mul0^#(y, y')) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } 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: { add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) } Weak DPs: { mul0^#(C(x, y), y') -> mul0^#(y, y') , mul0^#(C(x, y), y') -> add0^#(mul0(y, y'), y') } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We use the processor 'custom shape polynomial interpretation' to orient following rules strictly. DPs: { 1: add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) , 2: mul0^#(C(x, y), y') -> mul0^#(y, y') , 3: mul0^#(C(x, y), y') -> add0^#(mul0(y, y'), y') } Trs: { add0(Z(), y) -> y } Sub-proof: ---------- The following argument positions are considered usable: Uargs(c_3) = {1} TcT has computed the following constructor-restricted polynomial interpretation. [mul0](x1, x2) = x1 + x1*x2 + x1^2 + x2 + x2^2 [C](x1, x2) = 1 + x2 [add0](x1, x2) = 2 + x1 + x2 [Z]() = 0 [S]() = 1 [mul0^#](x1, x2) = 1 + 3*x1*x2 + 2*x1^2 + 3*x2^2 [add0^#](x1, x2) = 1 + 2*x1 + x2 [c_3](x1) = x1 This order satisfies the following ordering constraints. [mul0(C(x, y), y')] = 2 + 3*y + 2*y' + y*y' + y^2 + y'^2 >= 2 + y + y*y' + y^2 + 2*y' + y'^2 = [add0(mul0(y, y'), y')] [mul0(Z(), y)] = y + y^2 >= = [Z()] [add0(C(x, y), y')] = 3 + y + y' >= 3 + y + y' = [add0(y, C(S(), y'))] [add0(Z(), y)] = 2 + y > y = [y] [mul0^#(C(x, y), y')] = 3 + 3*y' + 3*y*y' + 4*y + 2*y^2 + 3*y'^2 > 1 + 3*y*y' + 2*y^2 + 3*y'^2 = [mul0^#(y, y')] [mul0^#(C(x, y), y')] = 3 + 3*y' + 3*y*y' + 4*y + 2*y^2 + 3*y'^2 > 1 + 2*y + 2*y*y' + 2*y^2 + 3*y' + 2*y'^2 = [add0^#(mul0(y, y'), y')] [add0^#(C(x, y), y')] = 3 + 2*y + y' > 2 + 2*y + y' = [c_3(add0^#(y, C(S(), y')))] 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: { mul0^#(C(x, y), y') -> mul0^#(y, y') , mul0^#(C(x, y), y') -> add0^#(mul0(y, y'), y') , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) } Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } 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. { mul0^#(C(x, y), y') -> mul0^#(y, y') , mul0^#(C(x, y), y') -> add0^#(mul0(y, y'), y') , add0^#(C(x, y), y') -> c_3(add0^#(y, C(S(), y'))) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { mul0(C(x, y), y') -> add0(mul0(y, y'), y') , mul0(Z(), y) -> Z() , add0(C(x, y), y') -> add0(y, C(S(), y')) , add0(Z(), y) -> y } 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))