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