YES(O(1),O(n^3)) We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), y) -> y , 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^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) , mul0^#(Nil(), y) -> c_2() , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) , add0^#(Nil(), y) -> c_4() , goal^#(xs, ys) -> c_5(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^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) , mul0^#(Nil(), y) -> c_2() , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) , add0^#(Nil(), y) -> c_4() , goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), y) -> y , 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} by applications of Pre({2,4}) = {1,3,5}. Here rules are labeled as follows: DPs: { 1: mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) , 2: mul0^#(Nil(), y) -> c_2() , 3: add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) , 4: add0^#(Nil(), y) -> c_4() , 5: goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) , goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) } Weak DPs: { mul0^#(Nil(), y) -> c_2() , add0^#(Nil(), y) -> c_4() } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), y) -> y , 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^#(Nil(), y) -> c_2() , add0^#(Nil(), y) -> c_4() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) , goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), y) -> y , goal(xs, ys) -> mul0(xs, ys) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) Consider the dependency graph 1: mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) -->_1 add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) :2 -->_2 mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) :1 2: add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) -->_1 add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) :2 3: goal^#(xs, ys) -> c_5(mul0^#(xs, ys)) -->_1 mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, 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_5(mul0^#(xs, ys)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), y) -> y , 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(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), y) -> y } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { mul0^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), 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^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) } and lower component { add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) } Further, following extension rules are added to the lower component. { mul0^#(Cons(x, xs), y) -> mul0^#(xs, y) , mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, 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^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), 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^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, 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) = {}, safe(Cons) = {1, 2}, safe(add0) = {}, safe(S) = {}, safe(Nil) = {}, safe(goal) = {}, safe(mul0^#) = {2}, safe(c_1) = {}, safe(add0^#) = {}, safe(c_2) = {}, safe(c_3) = {}, safe(c_4) = {}, safe(goal^#) = {}, safe(c_5) = {} and precedence mul0^# > add0, mul0 ~ add0 . Following symbols are considered recursive: {mul0^#} The recursion depth is 1. Further, following argument filtering is employed: pi(mul0) = 2, pi(Cons) = [2], pi(add0) = 2, pi(S) = [], pi(Nil) = [], pi(goal) = [], pi(mul0^#) = [1], pi(c_1) = [1, 2], pi(add0^#) = [], pi(c_2) = [], pi(c_3) = [], pi(c_4) = [], pi(goal^#) = [], pi(c_5) = [] Usable defined function symbols are a subset of: {mul0^#, add0^#, goal^#} For your convenience, here are the satisfied ordering constraints: pi(mul0^#(Cons(x, xs), y)) = mul0^#(Cons(; xs);) > c_1(add0^#(), mul0^#(xs;);) = pi(c_1(add0^#(mul0(xs, y), y), mul0^#(xs, 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^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), 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^#(Cons(x, xs), y) -> c_1(add0^#(mul0(xs, y), y), mul0^#(xs, y)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), 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^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) } Weak DPs: { mul0^#(Cons(x, xs), y) -> mul0^#(xs, y) , mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), y) -> y } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We use the processor 'polynomial interpretation' to orient following rules strictly. DPs: { 1: add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) , 3: mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, 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) = 2*x1*x2 [Cons](x1, x2) = 1 + x2 [add0](x1, x2) = x1 + x2 [S]() = 0 [Nil]() = 0 [goal](x1, x2) = 3*x1 + 3*x1*x2 + 3*x1^2 + 3*x2 + 3*x2^2 [mul0^#](x1, x2) = 3 + 3*x1*x2 + 2*x2 + 3*x2^2 [c_1](x1, x2) = 3*x1 + 3*x1*x2 + 3*x1^2 + 3*x2 + 3*x2^2 [add0^#](x1, x2) = x1 [c_2]() = 0 [c_3](x1) = x1 [c_4]() = 0 [goal^#](x1, x2) = 3*x1 + 3*x1*x2 + 3*x1^2 + 3*x2 + 3*x2^2 [c_5](x1) = 3*x1 + 3*x1^2 The following symbols are considered usable {mul0, add0, mul0^#, add0^#, goal^#} This order satisfies the following ordering constraints. [mul0(Cons(x, xs), y)] = 2*y + 2*xs*y >= 2*xs*y + y = [add0(mul0(xs, y), y)] [mul0(Nil(), y)] = >= = [Nil()] [add0(Cons(x, xs), y)] = 1 + xs + y >= xs + 1 + y = [add0(xs, Cons(S(), y))] [add0(Nil(), y)] = y >= y = [y] [mul0^#(Cons(x, xs), y)] = 3 + 5*y + 3*xs*y + 3*y^2 >= 3 + 3*xs*y + 2*y + 3*y^2 = [mul0^#(xs, y)] [mul0^#(Cons(x, xs), y)] = 3 + 5*y + 3*xs*y + 3*y^2 > 2*xs*y = [add0^#(mul0(xs, y), y)] [add0^#(Cons(x, xs), y)] = 1 + xs > xs = [c_3(add0^#(xs, Cons(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^#(Cons(x, xs), y) -> mul0^#(xs, y) , mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y) , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) } Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), 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^#(Cons(x, xs), y) -> mul0^#(xs, y) , mul0^#(Cons(x, xs), y) -> add0^#(mul0(xs, y), y) , add0^#(Cons(x, xs), y) -> c_3(add0^#(xs, Cons(S(), y))) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { mul0(Cons(x, xs), y) -> add0(mul0(xs, y), y) , mul0(Nil(), y) -> Nil() , add0(Cons(x, xs), y) -> add0(xs, Cons(S(), y)) , add0(Nil(), 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))