We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , fst(s(X), cons(Y, Z)) -> cons(Y, n__fst(activate(X), activate(Z))) , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , add(s(X), Y) -> s(n__add(activate(X), Y)) , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) Arguments of following rules are not normal-forms: { fst(s(X), cons(Y, Z)) -> cons(Y, n__fst(activate(X), activate(Z))) , add(s(X), Y) -> s(n__add(activate(X), Y)) } All above mentioned rules can be savely removed. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We add the following dependency tuples: Strict DPs: { fst^#(X1, X2) -> c_1() , fst^#(0(), Z) -> c_2() , s^#(X) -> c_3() , activate^#(X) -> c_4() , activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , activate^#(n__s(X)) -> c_7(s^#(X)) , activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_9(len^#(activate(X)), activate^#(X)) , from^#(X) -> c_10() , from^#(X) -> c_11() , add^#(X1, X2) -> c_12() , add^#(0(), X) -> c_13() , len^#(X) -> c_14() , len^#(nil()) -> c_15() , len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) } and mark the set of starting terms. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { fst^#(X1, X2) -> c_1() , fst^#(0(), Z) -> c_2() , s^#(X) -> c_3() , activate^#(X) -> c_4() , activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , activate^#(n__s(X)) -> c_7(s^#(X)) , activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_9(len^#(activate(X)), activate^#(X)) , from^#(X) -> c_10() , from^#(X) -> c_11() , add^#(X1, X2) -> c_12() , add^#(0(), X) -> c_13() , len^#(X) -> c_14() , len^#(nil()) -> c_15() , len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We estimate the number of application of {1,2,3,4,10,11,12,13,14,15} by applications of Pre({1,2,3,4,10,11,12,13,14,15}) = {5,6,7,8,9,16}. Here rules are labeled as follows: DPs: { 1: fst^#(X1, X2) -> c_1() , 2: fst^#(0(), Z) -> c_2() , 3: s^#(X) -> c_3() , 4: activate^#(X) -> c_4() , 5: activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , 6: activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , 7: activate^#(n__s(X)) -> c_7(s^#(X)) , 8: activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , 9: activate^#(n__len(X)) -> c_9(len^#(activate(X)), activate^#(X)) , 10: from^#(X) -> c_10() , 11: from^#(X) -> c_11() , 12: add^#(X1, X2) -> c_12() , 13: add^#(0(), X) -> c_13() , 14: len^#(X) -> c_14() , 15: len^#(nil()) -> c_15() , 16: len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , activate^#(n__s(X)) -> c_7(s^#(X)) , activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_9(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) } Weak DPs: { fst^#(X1, X2) -> c_1() , fst^#(0(), Z) -> c_2() , s^#(X) -> c_3() , activate^#(X) -> c_4() , from^#(X) -> c_10() , from^#(X) -> c_11() , add^#(X1, X2) -> c_12() , add^#(0(), X) -> c_13() , len^#(X) -> c_14() , len^#(nil()) -> c_15() } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We estimate the number of application of {3} by applications of Pre({3}) = {1,2,4,5,6}. Here rules are labeled as follows: DPs: { 1: activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , 2: activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , 3: activate^#(n__s(X)) -> c_7(s^#(X)) , 4: activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , 5: activate^#(n__len(X)) -> c_9(len^#(activate(X)), activate^#(X)) , 6: len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) , 7: fst^#(X1, X2) -> c_1() , 8: fst^#(0(), Z) -> c_2() , 9: s^#(X) -> c_3() , 10: activate^#(X) -> c_4() , 11: from^#(X) -> c_10() , 12: from^#(X) -> c_11() , 13: add^#(X1, X2) -> c_12() , 14: add^#(0(), X) -> c_13() , 15: len^#(X) -> c_14() , 16: len^#(nil()) -> c_15() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_9(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) } Weak DPs: { fst^#(X1, X2) -> c_1() , fst^#(0(), Z) -> c_2() , s^#(X) -> c_3() , activate^#(X) -> c_4() , activate^#(n__s(X)) -> c_7(s^#(X)) , from^#(X) -> c_10() , from^#(X) -> c_11() , add^#(X1, X2) -> c_12() , add^#(0(), X) -> c_13() , len^#(X) -> c_14() , len^#(nil()) -> c_15() } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } 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. { fst^#(X1, X2) -> c_1() , fst^#(0(), Z) -> c_2() , s^#(X) -> c_3() , activate^#(X) -> c_4() , activate^#(n__s(X)) -> c_7(s^#(X)) , from^#(X) -> c_10() , from^#(X) -> c_11() , add^#(X1, X2) -> c_12() , add^#(0(), X) -> c_13() , len^#(X) -> c_14() , len^#(nil()) -> c_15() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_9(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } 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: { activate^#(n__fst(X1, X2)) -> c_5(fst^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_6(from^#(activate(X)), activate^#(X)) , activate^#(n__add(X1, X2)) -> c_8(add^#(activate(X1), activate(X2)), activate^#(X1), activate^#(X2)) , len^#(cons(X, Z)) -> c_16(s^#(n__len(activate(Z))), activate^#(Z)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { activate^#(n__fst(X1, X2)) -> c_1(activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_2(activate^#(X)) , activate^#(n__add(X1, X2)) -> c_3(activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_4(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_5(activate^#(Z)) } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } 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: { 3: activate^#(n__add(X1, X2)) -> c_3(activate^#(X1), activate^#(X2)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1}, Uargs(c_3) = {1, 2}, Uargs(c_4) = {1, 2}, Uargs(c_5) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [fst](x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 1] [0 1] [0] [0] = [0] [0] [nil] = [0] [0] [s](x1) = [0] [0] [cons](x1, x2) = [1 0] x1 + [0 1] x2 + [0] [0 1] [0 0] [0] [n__fst](x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 1] [0 1] [0] [activate](x1) = [1 0] x1 + [0] [0 4] [0] [from](x1) = [1 0] x1 + [0] [0 1] [0] [n__from](x1) = [1 0] x1 + [0] [0 1] [0] [n__s](x1) = [0] [0] [add](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 1] [0 1] [4] [n__add](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 1] [0 1] [1] [len](x1) = [0 0] x1 + [0] [2 1] [0] [n__len](x1) = [0 0] x1 + [0] [1 1] [0] [activate^#](x1) = [0 1] x1 + [0] [0 1] [0] [len^#](x1) = [1 0] x1 + [0] [0 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](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_4](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_5](x1) = [1 0] x1 + [0] [0 0] [0] The order satisfies the following ordering constraints: [fst(X1, X2)] = [0 0] X1 + [0 0] X2 + [0] [0 1] [0 1] [0] >= [0 0] X1 + [0 0] X2 + [0] [0 1] [0 1] [0] = [n__fst(X1, X2)] [fst(0(), Z)] = [0 0] Z + [0] [0 1] [0] >= [0] [0] = [nil()] [s(X)] = [0] [0] >= [0] [0] = [n__s(X)] [activate(X)] = [1 0] X + [0] [0 4] [0] >= [1 0] X + [0] [0 1] [0] = [X] [activate(n__fst(X1, X2))] = [0 0] X1 + [0 0] X2 + [0] [0 4] [0 4] [0] >= [0 0] X1 + [0 0] X2 + [0] [0 4] [0 4] [0] = [fst(activate(X1), activate(X2))] [activate(n__from(X))] = [1 0] X + [0] [0 4] [0] >= [1 0] X + [0] [0 4] [0] = [from(activate(X))] [activate(n__s(X))] = [0] [0] >= [0] [0] = [s(X)] [activate(n__add(X1, X2))] = [1 0] X1 + [1 0] X2 + [0] [0 4] [0 4] [4] >= [1 0] X1 + [1 0] X2 + [0] [0 4] [0 4] [4] = [add(activate(X1), activate(X2))] [activate(n__len(X))] = [0 0] X + [0] [4 4] [0] >= [0 0] X + [0] [2 4] [0] = [len(activate(X))] [from(X)] = [1 0] X + [0] [0 1] [0] >= [1 0] X + [0] [0 1] [0] = [cons(X, n__from(n__s(X)))] [from(X)] = [1 0] X + [0] [0 1] [0] >= [1 0] X + [0] [0 1] [0] = [n__from(X)] [add(X1, X2)] = [1 0] X1 + [1 0] X2 + [0] [0 1] [0 1] [4] >= [1 0] X1 + [1 0] X2 + [0] [0 1] [0 1] [1] = [n__add(X1, X2)] [add(0(), X)] = [1 0] X + [0] [0 1] [4] >= [1 0] X + [0] [0 1] [0] = [X] [len(X)] = [0 0] X + [0] [2 1] [0] >= [0 0] X + [0] [1 1] [0] = [n__len(X)] [len(nil())] = [0] [0] >= [0] [0] = [0()] [len(cons(X, Z))] = [0 0] Z + [0 0] X + [0] [0 2] [2 1] [0] >= [0] [0] = [s(n__len(activate(Z)))] [activate^#(n__fst(X1, X2))] = [0 1] X1 + [0 1] X2 + [0] [0 1] [0 1] [0] >= [0 1] X1 + [0 1] X2 + [0] [0 0] [0 0] [0] = [c_1(activate^#(X1), activate^#(X2))] [activate^#(n__from(X))] = [0 1] X + [0] [0 1] [0] >= [0 1] X + [0] [0 0] [0] = [c_2(activate^#(X))] [activate^#(n__add(X1, X2))] = [0 1] X1 + [0 1] X2 + [1] [0 1] [0 1] [1] > [0 1] X1 + [0 1] X2 + [0] [0 0] [0 0] [0] = [c_3(activate^#(X1), activate^#(X2))] [activate^#(n__len(X))] = [1 1] X + [0] [1 1] [0] >= [1 1] X + [0] [0 0] [0] = [c_4(len^#(activate(X)), activate^#(X))] [len^#(cons(X, Z))] = [0 1] Z + [1 0] X + [0] [0 0] [0 0] [0] >= [0 1] Z + [0] [0 0] [0] = [c_5(activate^#(Z))] 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: { activate^#(n__fst(X1, X2)) -> c_1(activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_2(activate^#(X)) , activate^#(n__len(X)) -> c_4(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_5(activate^#(Z)) } Weak DPs: { activate^#(n__add(X1, X2)) -> c_3(activate^#(X1), activate^#(X2)) } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } 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: activate^#(n__fst(X1, X2)) -> c_1(activate^#(X1), activate^#(X2)) , 3: activate^#(n__len(X)) -> c_4(len^#(activate(X)), activate^#(X)) , 4: len^#(cons(X, Z)) -> c_5(activate^#(Z)) } Trs: { fst(X1, X2) -> n__fst(X1, X2) , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1}, Uargs(c_3) = {1, 2}, Uargs(c_4) = {1, 2}, Uargs(c_5) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [fst](x1, x2) = [1 4] x1 + [1 0] x2 + [4] [0 0] [0 1] [0] [0] = [0] [0] [nil] = [4] [0] [s](x1) = [0 0] x1 + [0] [0 1] [0] [cons](x1, x2) = [1 0] x1 + [0 0] x2 + [0] [0 0] [1 1] [0] [n__fst](x1, x2) = [1 1] x1 + [1 0] x2 + [2] [0 0] [0 1] [0] [activate](x1) = [4 0] x1 + [0] [0 1] [0] [from](x1) = [1 0] x1 + [0] [0 1] [0] [n__from](x1) = [1 0] x1 + [0] [0 1] [0] [n__s](x1) = [0 0] x1 + [0] [0 1] [0] [add](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 1] [0 1] [0] [n__add](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 1] [0 1] [0] [len](x1) = [1 2] x1 + [5] [0 0] [0] [n__len](x1) = [1 1] x1 + [2] [0 0] [0] [activate^#](x1) = [6 0] x1 + [0] [0 2] [1] [len^#](x1) = [0 6] x1 + [2] [0 0] [2] [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](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_4](x1, x2) = [1 1] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_5](x1) = [1 1] x1 + [0] [0 0] [0] The order satisfies the following ordering constraints: [fst(X1, X2)] = [1 4] X1 + [1 0] X2 + [4] [0 0] [0 1] [0] > [1 1] X1 + [1 0] X2 + [2] [0 0] [0 1] [0] = [n__fst(X1, X2)] [fst(0(), Z)] = [1 0] Z + [4] [0 1] [0] >= [4] [0] = [nil()] [s(X)] = [0 0] X + [0] [0 1] [0] >= [0 0] X + [0] [0 1] [0] = [n__s(X)] [activate(X)] = [4 0] X + [0] [0 1] [0] >= [1 0] X + [0] [0 1] [0] = [X] [activate(n__fst(X1, X2))] = [4 4] X1 + [4 0] X2 + [8] [0 0] [0 1] [0] > [4 4] X1 + [4 0] X2 + [4] [0 0] [0 1] [0] = [fst(activate(X1), activate(X2))] [activate(n__from(X))] = [4 0] X + [0] [0 1] [0] >= [4 0] X + [0] [0 1] [0] = [from(activate(X))] [activate(n__s(X))] = [0 0] X + [0] [0 1] [0] >= [0 0] X + [0] [0 1] [0] = [s(X)] [activate(n__add(X1, X2))] = [4 0] X1 + [4 0] X2 + [0] [0 1] [0 1] [0] >= [4 0] X1 + [4 0] X2 + [0] [0 1] [0 1] [0] = [add(activate(X1), activate(X2))] [activate(n__len(X))] = [4 4] X + [8] [0 0] [0] > [4 2] X + [5] [0 0] [0] = [len(activate(X))] [from(X)] = [1 0] X + [0] [0 1] [0] >= [1 0] X + [0] [0 1] [0] = [cons(X, n__from(n__s(X)))] [from(X)] = [1 0] X + [0] [0 1] [0] >= [1 0] X + [0] [0 1] [0] = [n__from(X)] [add(X1, X2)] = [1 0] X1 + [1 0] X2 + [0] [0 1] [0 1] [0] >= [1 0] X1 + [1 0] X2 + [0] [0 1] [0 1] [0] = [n__add(X1, X2)] [add(0(), X)] = [1 0] X + [0] [0 1] [0] >= [1 0] X + [0] [0 1] [0] = [X] [len(X)] = [1 2] X + [5] [0 0] [0] > [1 1] X + [2] [0 0] [0] = [n__len(X)] [len(nil())] = [9] [0] > [0] [0] = [0()] [len(cons(X, Z))] = [2 2] Z + [1 0] X + [5] [0 0] [0 0] [0] > [0] [0] = [s(n__len(activate(Z)))] [activate^#(n__fst(X1, X2))] = [6 6] X1 + [6 0] X2 + [12] [0 0] [0 2] [1] > [6 0] X1 + [6 0] X2 + [0] [0 0] [0 0] [0] = [c_1(activate^#(X1), activate^#(X2))] [activate^#(n__from(X))] = [6 0] X + [0] [0 2] [1] >= [6 0] X + [0] [0 0] [0] = [c_2(activate^#(X))] [activate^#(n__add(X1, X2))] = [6 0] X1 + [6 0] X2 + [0] [0 2] [0 2] [1] >= [6 0] X1 + [6 0] X2 + [0] [0 0] [0 0] [0] = [c_3(activate^#(X1), activate^#(X2))] [activate^#(n__len(X))] = [6 6] X + [12] [0 0] [1] > [6 6] X + [4] [0 0] [0] = [c_4(len^#(activate(X)), activate^#(X))] [len^#(cons(X, Z))] = [6 6] Z + [2] [0 0] [2] > [6 2] Z + [1] [0 0] [0] = [c_5(activate^#(Z))] 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: { activate^#(n__from(X)) -> c_2(activate^#(X)) } Weak DPs: { activate^#(n__fst(X1, X2)) -> c_1(activate^#(X1), activate^#(X2)) , activate^#(n__add(X1, X2)) -> c_3(activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_4(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_5(activate^#(Z)) } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } 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: activate^#(n__from(X)) -> c_2(activate^#(X)) , 2: activate^#(n__fst(X1, X2)) -> c_1(activate^#(X1), activate^#(X2)) , 5: len^#(cons(X, Z)) -> c_5(activate^#(Z)) } Trs: { activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__len(X)) -> len(activate(X)) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1, 2}, Uargs(c_2) = {1}, Uargs(c_3) = {1, 2}, Uargs(c_4) = {1, 2}, Uargs(c_5) = {1} TcT has computed the following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [fst](x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 1] [0 1] [4] [0] = [0] [0] [nil] = [0] [0] [s](x1) = [0] [0] [cons](x1, x2) = [0 1] x2 + [4] [0 0] [3] [n__fst](x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 1] [0 1] [4] [activate](x1) = [1 0] x1 + [1] [0 3] [3] [from](x1) = [0 0] x1 + [6] [0 1] [3] [n__from](x1) = [0 0] x1 + [6] [0 1] [2] [n__s](x1) = [0] [0] [add](x1, x2) = [0 0] x1 + [1 0] x2 + [0] [2 1] [0 1] [3] [n__add](x1, x2) = [0 0] x1 + [1 0] x2 + [0] [1 1] [0 1] [3] [len](x1) = [0 0] x1 + [3] [1 1] [1] [n__len](x1) = [0 0] x1 + [3] [1 1] [1] [activate^#](x1) = [0 2] x1 + [6] [1 1] [1] [len^#](x1) = [2 0] x1 + [0] [0 1] [0] [c_1](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_2](x1) = [1 0] x1 + [1] [0 0] [0] [c_3](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_4](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_5](x1) = [1 0] x1 + [0] [0 0] [0] The order satisfies the following ordering constraints: [fst(X1, X2)] = [0 0] X1 + [0 0] X2 + [0] [0 1] [0 1] [4] >= [0 0] X1 + [0 0] X2 + [0] [0 1] [0 1] [4] = [n__fst(X1, X2)] [fst(0(), Z)] = [0 0] Z + [0] [0 1] [4] >= [0] [0] = [nil()] [s(X)] = [0] [0] >= [0] [0] = [n__s(X)] [activate(X)] = [1 0] X + [1] [0 3] [3] > [1 0] X + [0] [0 1] [0] = [X] [activate(n__fst(X1, X2))] = [0 0] X1 + [0 0] X2 + [1] [0 3] [0 3] [15] > [0 0] X1 + [0 0] X2 + [0] [0 3] [0 3] [10] = [fst(activate(X1), activate(X2))] [activate(n__from(X))] = [0 0] X + [7] [0 3] [9] > [0 0] X + [6] [0 3] [6] = [from(activate(X))] [activate(n__s(X))] = [1] [3] > [0] [0] = [s(X)] [activate(n__add(X1, X2))] = [0 0] X1 + [1 0] X2 + [1] [3 3] [0 3] [12] >= [0 0] X1 + [1 0] X2 + [1] [2 3] [0 3] [11] = [add(activate(X1), activate(X2))] [activate(n__len(X))] = [0 0] X + [4] [3 3] [6] > [0 0] X + [3] [1 3] [5] = [len(activate(X))] [from(X)] = [0 0] X + [6] [0 1] [3] >= [6] [3] = [cons(X, n__from(n__s(X)))] [from(X)] = [0 0] X + [6] [0 1] [3] >= [0 0] X + [6] [0 1] [2] = [n__from(X)] [add(X1, X2)] = [0 0] X1 + [1 0] X2 + [0] [2 1] [0 1] [3] >= [0 0] X1 + [1 0] X2 + [0] [1 1] [0 1] [3] = [n__add(X1, X2)] [add(0(), X)] = [1 0] X + [0] [0 1] [3] >= [1 0] X + [0] [0 1] [0] = [X] [len(X)] = [0 0] X + [3] [1 1] [1] >= [0 0] X + [3] [1 1] [1] = [n__len(X)] [len(nil())] = [3] [1] > [0] [0] = [0()] [len(cons(X, Z))] = [0 0] Z + [3] [0 1] [8] > [0] [0] = [s(n__len(activate(Z)))] [activate^#(n__fst(X1, X2))] = [0 2] X1 + [0 2] X2 + [14] [0 1] [0 1] [5] > [0 2] X1 + [0 2] X2 + [12] [0 0] [0 0] [0] = [c_1(activate^#(X1), activate^#(X2))] [activate^#(n__from(X))] = [0 2] X + [10] [0 1] [9] > [0 2] X + [7] [0 0] [0] = [c_2(activate^#(X))] [activate^#(n__add(X1, X2))] = [2 2] X1 + [0 2] X2 + [12] [1 1] [1 1] [4] >= [0 2] X1 + [0 2] X2 + [12] [0 0] [0 0] [0] = [c_3(activate^#(X1), activate^#(X2))] [activate^#(n__len(X))] = [2 2] X + [8] [1 1] [5] >= [2 2] X + [8] [0 0] [0] = [c_4(len^#(activate(X)), activate^#(X))] [len^#(cons(X, Z))] = [0 2] Z + [8] [0 0] [3] > [0 2] Z + [6] [0 0] [0] = [c_5(activate^#(Z))] 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: { activate^#(n__fst(X1, X2)) -> c_1(activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_2(activate^#(X)) , activate^#(n__add(X1, X2)) -> c_3(activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_4(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_5(activate^#(Z)) } Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } 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. { activate^#(n__fst(X1, X2)) -> c_1(activate^#(X1), activate^#(X2)) , activate^#(n__from(X)) -> c_2(activate^#(X)) , activate^#(n__add(X1, X2)) -> c_3(activate^#(X1), activate^#(X2)) , activate^#(n__len(X)) -> c_4(len^#(activate(X)), activate^#(X)) , len^#(cons(X, Z)) -> c_5(activate^#(Z)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Weak Trs: { fst(X1, X2) -> n__fst(X1, X2) , fst(0(), Z) -> nil() , s(X) -> n__s(X) , activate(X) -> X , activate(n__fst(X1, X2)) -> fst(activate(X1), activate(X2)) , activate(n__from(X)) -> from(activate(X)) , activate(n__s(X)) -> s(X) , activate(n__add(X1, X2)) -> add(activate(X1), activate(X2)) , activate(n__len(X)) -> len(activate(X)) , from(X) -> cons(X, n__from(n__s(X))) , from(X) -> n__from(X) , add(X1, X2) -> n__add(X1, X2) , add(0(), X) -> X , len(X) -> n__len(X) , len(nil()) -> 0() , len(cons(X, Z)) -> s(n__len(activate(Z))) } 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^1))