We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict Trs: { shuffle(Cons(x, xs)) -> Cons(x, shuffle(reverse(xs))) , shuffle(Nil()) -> Nil() , reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys , goal(xs) -> shuffle(xs) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We add the following dependency tuples: Strict DPs: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) , shuffle^#(Nil()) -> c_2() , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , reverse^#(Nil()) -> c_4() , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) , append^#(Nil(), ys) -> c_6() , goal^#(xs) -> c_7(shuffle^#(xs)) } 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: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) , shuffle^#(Nil()) -> c_2() , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , reverse^#(Nil()) -> c_4() , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) , append^#(Nil(), ys) -> c_6() , goal^#(xs) -> c_7(shuffle^#(xs)) } Weak Trs: { shuffle(Cons(x, xs)) -> Cons(x, shuffle(reverse(xs))) , shuffle(Nil()) -> Nil() , reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys , goal(xs) -> shuffle(xs) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We estimate the number of application of {2,4,6} by applications of Pre({2,4,6}) = {1,3,5,7}. Here rules are labeled as follows: DPs: { 1: shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) , 2: shuffle^#(Nil()) -> c_2() , 3: reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , 4: reverse^#(Nil()) -> c_4() , 5: append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) , 6: append^#(Nil(), ys) -> c_6() , 7: goal^#(xs) -> c_7(shuffle^#(xs)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) , goal^#(xs) -> c_7(shuffle^#(xs)) } Weak DPs: { shuffle^#(Nil()) -> c_2() , reverse^#(Nil()) -> c_4() , append^#(Nil(), ys) -> c_6() } Weak Trs: { shuffle(Cons(x, xs)) -> Cons(x, shuffle(reverse(xs))) , shuffle(Nil()) -> Nil() , reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys , goal(xs) -> shuffle(xs) } 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. { shuffle^#(Nil()) -> c_2() , reverse^#(Nil()) -> c_4() , append^#(Nil(), ys) -> c_6() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) , goal^#(xs) -> c_7(shuffle^#(xs)) } Weak Trs: { shuffle(Cons(x, xs)) -> Cons(x, shuffle(reverse(xs))) , shuffle(Nil()) -> Nil() , reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys , goal(xs) -> shuffle(xs) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) Consider the dependency graph 1: shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) -->_2 reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) :2 -->_1 shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) :1 2: reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) -->_1 append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) :3 -->_2 reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) :2 3: append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) -->_1 append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) :3 4: goal^#(xs) -> c_7(shuffle^#(xs)) -->_1 shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) :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) -> c_7(shuffle^#(xs)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } Weak Trs: { shuffle(Cons(x, xs)) -> Cons(x, shuffle(reverse(xs))) , shuffle(Nil()) -> Nil() , reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys , goal(xs) -> shuffle(xs) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We replace rewrite rules by usable rules: Weak Usable Rules: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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 { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) } and lower component { reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } Further, following extension rules are added to the lower component. { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) } 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: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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: shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) } Trs: { reverse(Nil()) -> Nil() } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [Cons](x1, x2) = [1] x2 + [7] [reverse](x1) = [1] x1 + [2] [append](x1, x2) = [1] x1 + [1] x2 + [0] [Nil] = [0] [shuffle^#](x1) = [1] x1 + [7] [c_1](x1, x2) = [1] x1 + [4] x2 + [0] [reverse^#](x1) = [1] The order satisfies the following ordering constraints: [reverse(Cons(x, xs))] = [1] xs + [9] >= [1] xs + [9] = [append(reverse(xs), Cons(x, Nil()))] [reverse(Nil())] = [2] > [0] = [Nil()] [append(Cons(x, xs), ys)] = [1] xs + [1] ys + [7] >= [1] xs + [1] ys + [7] = [Cons(x, append(xs, ys))] [append(Nil(), ys)] = [1] ys + [0] >= [1] ys + [0] = [ys] [shuffle^#(Cons(x, xs))] = [1] xs + [14] > [1] xs + [13] = [c_1(shuffle^#(reverse(xs)), reverse^#(xs))] 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: { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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. { shuffle^#(Cons(x, xs)) -> c_1(shuffle^#(reverse(xs)), reverse^#(xs)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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: { reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } Weak DPs: { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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 { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) } and lower component { append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } Further, following extension rules are added to the lower component. { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> append^#(reverse(xs), Cons(x, Nil())) } 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: { reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) } Weak DPs: { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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: reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) , 2: shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , 3: shuffle^#(Cons(x, xs)) -> reverse^#(xs) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_3) = {1, 2} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [Cons](x1, x2) = [1] x2 + [3] [reverse](x1) = [1] x1 + [0] [append](x1, x2) = [1] x1 + [1] x2 + [0] [Nil] = [0] [shuffle^#](x1) = [3] x1 + [3] [reverse^#](x1) = [2] x1 + [1] [c_3](x1, x2) = [1] x1 + [1] x2 + [0] [append^#](x1, x2) = [1] x2 + [2] The order satisfies the following ordering constraints: [reverse(Cons(x, xs))] = [1] xs + [3] >= [1] xs + [3] = [append(reverse(xs), Cons(x, Nil()))] [reverse(Nil())] = [0] >= [0] = [Nil()] [append(Cons(x, xs), ys)] = [1] xs + [1] ys + [3] >= [1] xs + [1] ys + [3] = [Cons(x, append(xs, ys))] [append(Nil(), ys)] = [1] ys + [0] >= [1] ys + [0] = [ys] [shuffle^#(Cons(x, xs))] = [3] xs + [12] > [3] xs + [3] = [shuffle^#(reverse(xs))] [shuffle^#(Cons(x, xs))] = [3] xs + [12] > [2] xs + [1] = [reverse^#(xs)] [reverse^#(Cons(x, xs))] = [2] xs + [7] > [2] xs + [6] = [c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs))] 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: { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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. { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> c_3(append^#(reverse(xs), Cons(x, Nil())), reverse^#(xs)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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: { append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } Weak DPs: { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> append^#(reverse(xs), Cons(x, Nil())) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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: append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) , 2: shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , 3: shuffle^#(Cons(x, xs)) -> reverse^#(xs) , 4: reverse^#(Cons(x, xs)) -> reverse^#(xs) , 5: reverse^#(Cons(x, xs)) -> append^#(reverse(xs), Cons(x, Nil())) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_5) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA). [Cons](x1, x2) = [1] x2 + [3] [reverse](x1) = [1] x1 + [0] [append](x1, x2) = [1] x1 + [1] x2 + [0] [Nil] = [0] [shuffle^#](x1) = [2] x1 + [0] [reverse^#](x1) = [2] x1 + [0] [append^#](x1, x2) = [2] x1 + [1] [c_5](x1) = [1] x1 + [0] The order satisfies the following ordering constraints: [reverse(Cons(x, xs))] = [1] xs + [3] >= [1] xs + [3] = [append(reverse(xs), Cons(x, Nil()))] [reverse(Nil())] = [0] >= [0] = [Nil()] [append(Cons(x, xs), ys)] = [1] xs + [1] ys + [3] >= [1] xs + [1] ys + [3] = [Cons(x, append(xs, ys))] [append(Nil(), ys)] = [1] ys + [0] >= [1] ys + [0] = [ys] [shuffle^#(Cons(x, xs))] = [2] xs + [6] > [2] xs + [0] = [shuffle^#(reverse(xs))] [shuffle^#(Cons(x, xs))] = [2] xs + [6] > [2] xs + [0] = [reverse^#(xs)] [reverse^#(Cons(x, xs))] = [2] xs + [6] > [2] xs + [0] = [reverse^#(xs)] [reverse^#(Cons(x, xs))] = [2] xs + [6] > [2] xs + [1] = [append^#(reverse(xs), Cons(x, Nil()))] [append^#(Cons(x, xs), ys)] = [2] xs + [7] > [2] xs + [1] = [c_5(append^#(xs, ys))] 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: { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> append^#(reverse(xs), Cons(x, Nil())) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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. { shuffle^#(Cons(x, xs)) -> shuffle^#(reverse(xs)) , shuffle^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> reverse^#(xs) , reverse^#(Cons(x, xs)) -> append^#(reverse(xs), Cons(x, Nil())) , append^#(Cons(x, xs), ys) -> c_5(append^#(xs, ys)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { reverse(Cons(x, xs)) -> append(reverse(xs), Cons(x, Nil())) , reverse(Nil()) -> Nil() , append(Cons(x, xs), ys) -> Cons(x, append(xs, ys)) , append(Nil(), ys) -> ys } 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))