YES(O(1),O(n^2)) 104.16/75.69 YES(O(1),O(n^2)) 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(n^2)). 104.16/75.69 104.16/75.69 Strict Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(n^2)) 104.16/75.69 104.16/75.69 We add the following dependency tuples: 104.16/75.69 104.16/75.69 Strict DPs: 104.16/75.69 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.69 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , append#1^#(nil(), @l2) -> c_3() 104.16/75.69 , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(leaf()) -> c_5() 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) 104.16/75.69 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.69 104.16/75.69 and mark the set of starting terms. 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(n^2)). 104.16/75.69 104.16/75.69 Strict DPs: 104.16/75.69 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.69 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , append#1^#(nil(), @l2) -> c_3() 104.16/75.69 , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(leaf()) -> c_5() 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) 104.16/75.69 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.69 Weak Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(n^2)) 104.16/75.69 104.16/75.69 We estimate the number of application of {3,5} by applications of 104.16/75.69 Pre({3,5}) = {1,4}. Here rules are labeled as follows: 104.16/75.69 104.16/75.69 DPs: 104.16/75.69 { 1: append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.69 , 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , 3: append#1^#(nil(), @l2) -> c_3() 104.16/75.69 , 4: subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , 5: subtrees#1^#(leaf()) -> c_5() 104.16/75.69 , 6: subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , 7: subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) 104.16/75.69 , 8: subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 c_8(append^#(@l1, @l2)) } 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(n^2)). 104.16/75.69 104.16/75.69 Strict DPs: 104.16/75.69 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.69 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) 104.16/75.69 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.69 Weak DPs: 104.16/75.69 { append#1^#(nil(), @l2) -> c_3() 104.16/75.69 , subtrees#1^#(leaf()) -> c_5() } 104.16/75.69 Weak Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(n^2)) 104.16/75.69 104.16/75.69 The following weak DPs constitute a sub-graph of the DG that is 104.16/75.69 closed under successors. The DPs are removed. 104.16/75.69 104.16/75.69 { append#1^#(nil(), @l2) -> c_3() 104.16/75.69 , subtrees#1^#(leaf()) -> c_5() } 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(n^2)). 104.16/75.69 104.16/75.69 Strict DPs: 104.16/75.69 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.69 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) 104.16/75.69 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.69 Weak Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(n^2)) 104.16/75.69 104.16/75.69 We decompose the input problem according to the dependency graph 104.16/75.69 into the upper component 104.16/75.69 104.16/75.69 { subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) } 104.16/75.69 104.16/75.69 and lower component 104.16/75.69 104.16/75.69 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.69 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.69 104.16/75.69 Further, following extension rules are added to the lower 104.16/75.69 component. 104.16/75.69 104.16/75.69 { subtrees^#(@t) -> subtrees#1^#(@t) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2^#(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) } 104.16/75.69 104.16/75.69 TcT solves the upper component with certificate YES(O(1),O(n^1)). 104.16/75.69 104.16/75.69 Sub-proof: 104.16/75.69 ---------- 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(n^1)). 104.16/75.69 104.16/75.69 Strict DPs: 104.16/75.69 { subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) } 104.16/75.69 Weak Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(n^1)) 104.16/75.69 104.16/75.69 We use the processor 'matrix interpretation of dimension 1' to 104.16/75.69 orient following rules strictly. 104.16/75.69 104.16/75.69 DPs: 104.16/75.69 { 2: subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , 3: subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) } 104.16/75.69 Trs: { append(@l1, @l2) -> append#1(@l1, @l2) } 104.16/75.69 104.16/75.69 Sub-proof: 104.16/75.69 ---------- 104.16/75.69 The following argument positions are usable: 104.16/75.69 Uargs(c_4) = {1}, Uargs(c_6) = {1, 2}, Uargs(c_7) = {1, 2} 104.16/75.69 104.16/75.69 TcT has computed the following constructor-based matrix 104.16/75.69 interpretation satisfying not(EDA). 104.16/75.69 104.16/75.69 [append](x1, x2) = [7] x1 + [7] x2 + [7] 104.16/75.69 104.16/75.69 [append#1](x1, x2) = [7] x2 + [0] 104.16/75.69 104.16/75.69 [::](x1, x2) = [0] 104.16/75.69 104.16/75.69 [nil] = [4] 104.16/75.69 104.16/75.69 [subtrees](x1) = [0] 104.16/75.69 104.16/75.69 [subtrees#1](x1) = [0] 104.16/75.69 104.16/75.69 [leaf] = [7] 104.16/75.69 104.16/75.69 [node](x1, x2, x3) = [1] x1 + [1] x2 + [1] x3 + [2] 104.16/75.69 104.16/75.69 [subtrees#2](x1, x2, x3, x4) = [7] x3 + [0] 104.16/75.69 104.16/75.69 [subtrees#3](x1, x2, x3, x4, x5) = [4] x2 + [0] 104.16/75.69 104.16/75.69 [subtrees^#](x1) = [4] x1 + [0] 104.16/75.69 104.16/75.69 [c_4](x1) = [1] x1 + [0] 104.16/75.69 104.16/75.69 [subtrees#1^#](x1) = [4] x1 + [0] 104.16/75.69 104.16/75.69 [c_6](x1, x2) = [1] x1 + [1] x2 + [5] 104.16/75.69 104.16/75.69 [subtrees#2^#](x1, x2, x3, x4) = [4] x3 + [4] x4 + [1] 104.16/75.69 104.16/75.69 [c_7](x1, x2) = [2] x1 + [1] x2 + [0] 104.16/75.69 104.16/75.69 [subtrees#3^#](x1, x2, x3, x4, x5) = [2] x5 + [0] 104.16/75.69 104.16/75.69 The order satisfies the following ordering constraints: 104.16/75.69 104.16/75.69 [append(@l1, @l2)] = [7] @l1 + [7] @l2 + [7] 104.16/75.69 > [7] @l2 + [0] 104.16/75.69 = [append#1(@l1, @l2)] 104.16/75.69 104.16/75.69 [append#1(::(@x, @xs), @l2)] = [7] @l2 + [0] 104.16/75.69 >= [0] 104.16/75.69 = [::(@x, append(@xs, @l2))] 104.16/75.69 104.16/75.69 [append#1(nil(), @l2)] = [7] @l2 + [0] 104.16/75.69 >= [1] @l2 + [0] 104.16/75.69 = [@l2] 104.16/75.69 104.16/75.69 [subtrees(@t)] = [0] 104.16/75.69 >= [0] 104.16/75.69 = [subtrees#1(@t)] 104.16/75.69 104.16/75.69 [subtrees#1(leaf())] = [0] 104.16/75.69 ? [4] 104.16/75.69 = [nil()] 104.16/75.69 104.16/75.69 [subtrees#1(node(@x, @t1, @t2))] = [0] 104.16/75.69 ? [7] @t2 + [0] 104.16/75.69 = [subtrees#2(subtrees(@t1), @t1, @t2, @x)] 104.16/75.69 104.16/75.69 [subtrees#2(@l1, @t1, @t2, @x)] = [7] @t2 + [0] 104.16/75.69 ? [4] @l1 + [0] 104.16/75.69 = [subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x)] 104.16/75.69 104.16/75.69 [subtrees#3(@l2, @l1, @t1, @t2, @x)] = [4] @l1 + [0] 104.16/75.69 >= [0] 104.16/75.69 = [::(node(@x, @t1, @t2), append(@l1, @l2))] 104.16/75.69 104.16/75.69 [subtrees^#(@t)] = [4] @t + [0] 104.16/75.69 >= [4] @t + [0] 104.16/75.69 = [c_4(subtrees#1^#(@t))] 104.16/75.69 104.16/75.69 [subtrees#1^#(node(@x, @t1, @t2))] = [4] @x + [4] @t1 + [4] @t2 + [8] 104.16/75.69 > [4] @x + [4] @t1 + [4] @t2 + [6] 104.16/75.69 = [c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1))] 104.16/75.69 104.16/75.69 [subtrees#2^#(@l1, @t1, @t2, @x)] = [4] @x + [4] @t2 + [1] 104.16/75.69 > [4] @x + [4] @t2 + [0] 104.16/75.69 = [c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2))] 104.16/75.69 104.16/75.69 104.16/75.69 We return to the main proof. Consider the set of all dependency 104.16/75.69 pairs 104.16/75.69 104.16/75.69 : 104.16/75.69 { 1: subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , 2: subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , 3: subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) } 104.16/75.69 104.16/75.69 Processor 'matrix interpretation of dimension 1' induces the 104.16/75.69 complexity certificate YES(?,O(n^1)) on application of dependency 104.16/75.69 pairs {2,3}. These cover all (indirect) predecessors of dependency 104.16/75.69 pairs {1,2,3}, their number of application is equally bounded. The 104.16/75.69 dependency pairs are shifted into the weak component. 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(1)). 104.16/75.69 104.16/75.69 Weak DPs: 104.16/75.69 { subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) } 104.16/75.69 Weak Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(1)) 104.16/75.69 104.16/75.69 The following weak DPs constitute a sub-graph of the DG that is 104.16/75.69 closed under successors. The DPs are removed. 104.16/75.69 104.16/75.69 { subtrees^#(@t) -> c_4(subtrees#1^#(@t)) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), 104.16/75.69 subtrees^#(@t2)) } 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(1)). 104.16/75.69 104.16/75.69 Weak Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(1)) 104.16/75.69 104.16/75.69 No rule is usable, rules are removed from the input problem. 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(1)). 104.16/75.69 104.16/75.69 Rules: Empty 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(1)) 104.16/75.69 104.16/75.69 Empty rules are trivially bounded 104.16/75.69 104.16/75.69 We return to the main proof. 104.16/75.69 104.16/75.69 We are left with following problem, upon which TcT provides the 104.16/75.69 certificate YES(O(1),O(n^1)). 104.16/75.69 104.16/75.69 Strict DPs: 104.16/75.69 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.69 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.69 Weak DPs: 104.16/75.69 { subtrees^#(@t) -> subtrees#1^#(@t) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) 104.16/75.69 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2^#(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) 104.16/75.69 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) } 104.16/75.69 Weak Trs: 104.16/75.69 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.69 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.69 , append#1(nil(), @l2) -> @l2 104.16/75.69 , subtrees(@t) -> subtrees#1(@t) 104.16/75.69 , subtrees#1(leaf()) -> nil() 104.16/75.69 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.69 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.69 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.69 Obligation: 104.16/75.69 innermost runtime complexity 104.16/75.69 Answer: 104.16/75.69 YES(O(1),O(n^1)) 104.16/75.69 104.16/75.69 We use the processor 'matrix interpretation of dimension 1' to 104.16/75.69 orient following rules strictly. 104.16/75.69 104.16/75.69 DPs: 104.16/75.69 { 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.69 , 5: subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) 104.16/75.69 , 6: subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2^#(subtrees(@t1), @t1, @t2, @x) 104.16/75.69 , 7: subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) 104.16/75.69 , 8: subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.69 subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) } 104.16/75.69 Trs: 104.16/75.69 { subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.69 subtrees#2(subtrees(@t1), @t1, @t2, @x) } 104.16/75.69 104.16/75.69 Sub-proof: 104.16/75.69 ---------- 104.16/75.69 The following argument positions are usable: 104.16/75.69 Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_8) = {1} 104.16/75.69 104.16/75.69 TcT has computed the following constructor-based matrix 104.16/75.69 interpretation satisfying not(EDA). 104.16/75.69 104.16/75.69 [append](x1, x2) = [1] x1 + [1] x2 + [0] 104.16/75.69 104.16/75.69 [append#1](x1, x2) = [1] x1 + [1] x2 + [0] 104.16/75.69 104.16/75.69 [::](x1, x2) = [1] x2 + [3] 104.16/75.69 104.16/75.69 [nil] = [0] 104.16/75.69 104.16/75.69 [subtrees](x1) = [1] x1 + [0] 104.16/75.69 104.16/75.69 [subtrees#1](x1) = [1] x1 + [0] 104.16/75.69 104.16/75.69 [leaf] = [0] 104.16/75.69 104.16/75.69 [node](x1, x2, x3) = [1] x1 + [1] x2 + [1] x3 + [4] 104.16/75.69 104.16/75.69 [subtrees#2](x1, x2, x3, x4) = [1] x1 + [1] x3 + [1] x4 + [3] 104.16/75.69 104.16/75.69 [subtrees#3](x1, x2, x3, x4, x5) = [1] x1 + [1] x2 + [1] x5 + [3] 104.16/75.69 104.16/75.69 [append^#](x1, x2) = [3] x1 + [0] 104.16/75.69 104.16/75.69 [c_1](x1) = [1] x1 + [0] 104.16/75.69 104.16/75.69 [append#1^#](x1, x2) = [3] x1 + [0] 104.16/75.69 104.16/75.69 [c_2](x1) = [1] x1 + [5] 104.16/75.69 104.16/75.69 [subtrees^#](x1) = [3] x1 + [0] 104.16/75.69 104.16/75.69 [subtrees#1^#](x1) = [3] x1 + [0] 104.16/75.69 104.16/75.69 [subtrees#2^#](x1, x2, x3, x4) = [3] x1 + [3] x3 + [3] x4 + [4] 104.16/75.69 104.16/75.69 [subtrees#3^#](x1, x2, x3, x4, x5) = [3] x2 + [3] x4 + [3] x5 + [0] 104.16/75.69 104.16/75.69 [c_8](x1) = [1] x1 + [0] 104.16/75.69 104.16/75.69 The order satisfies the following ordering constraints: 104.16/75.69 104.16/75.69 [append(@l1, @l2)] = [1] @l1 + [1] @l2 + [0] 104.16/75.69 >= [1] @l1 + [1] @l2 + [0] 104.16/75.69 = [append#1(@l1, @l2)] 104.16/75.69 104.16/75.69 [append#1(::(@x, @xs), @l2)] = [1] @l2 + [1] @xs + [3] 104.16/75.69 >= [1] @l2 + [1] @xs + [3] 104.16/75.69 = [::(@x, append(@xs, @l2))] 104.16/75.69 104.16/75.69 [append#1(nil(), @l2)] = [1] @l2 + [0] 104.16/75.69 >= [1] @l2 + [0] 104.16/75.69 = [@l2] 104.16/75.69 104.16/75.69 [subtrees(@t)] = [1] @t + [0] 104.16/75.69 >= [1] @t + [0] 104.16/75.69 = [subtrees#1(@t)] 104.16/75.69 104.16/75.69 [subtrees#1(leaf())] = [0] 104.16/75.69 >= [0] 104.16/75.69 = [nil()] 104.16/75.69 104.16/75.69 [subtrees#1(node(@x, @t1, @t2))] = [1] @x + [1] @t1 + [1] @t2 + [4] 104.16/75.69 > [1] @x + [1] @t1 + [1] @t2 + [3] 104.16/75.69 = [subtrees#2(subtrees(@t1), @t1, @t2, @x)] 104.16/75.69 104.16/75.69 [subtrees#2(@l1, @t1, @t2, @x)] = [1] @l1 + [1] @x + [1] @t2 + [3] 104.16/75.69 >= [1] @l1 + [1] @x + [1] @t2 + [3] 104.16/75.69 = [subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x)] 104.16/75.69 104.16/75.69 [subtrees#3(@l2, @l1, @t1, @t2, @x)] = [1] @l1 + [1] @l2 + [1] @x + [3] 104.16/75.70 >= [1] @l1 + [1] @l2 + [3] 104.16/75.70 = [::(node(@x, @t1, @t2), append(@l1, @l2))] 104.16/75.70 104.16/75.70 [append^#(@l1, @l2)] = [3] @l1 + [0] 104.16/75.70 >= [3] @l1 + [0] 104.16/75.70 = [c_1(append#1^#(@l1, @l2))] 104.16/75.70 104.16/75.70 [append#1^#(::(@x, @xs), @l2)] = [3] @xs + [9] 104.16/75.70 > [3] @xs + [5] 104.16/75.70 = [c_2(append^#(@xs, @l2))] 104.16/75.70 104.16/75.70 [subtrees^#(@t)] = [3] @t + [0] 104.16/75.70 >= [3] @t + [0] 104.16/75.70 = [subtrees#1^#(@t)] 104.16/75.70 104.16/75.70 [subtrees#1^#(node(@x, @t1, @t2))] = [3] @x + [3] @t1 + [3] @t2 + [12] 104.16/75.70 > [3] @t1 + [0] 104.16/75.70 = [subtrees^#(@t1)] 104.16/75.70 104.16/75.70 [subtrees#1^#(node(@x, @t1, @t2))] = [3] @x + [3] @t1 + [3] @t2 + [12] 104.16/75.70 > [3] @x + [3] @t1 + [3] @t2 + [4] 104.16/75.70 = [subtrees#2^#(subtrees(@t1), @t1, @t2, @x)] 104.16/75.70 104.16/75.70 [subtrees#2^#(@l1, @t1, @t2, @x)] = [3] @l1 + [3] @x + [3] @t2 + [4] 104.16/75.70 > [3] @t2 + [0] 104.16/75.70 = [subtrees^#(@t2)] 104.16/75.70 104.16/75.70 [subtrees#2^#(@l1, @t1, @t2, @x)] = [3] @l1 + [3] @x + [3] @t2 + [4] 104.16/75.70 > [3] @l1 + [3] @x + [3] @t2 + [0] 104.16/75.70 = [subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x)] 104.16/75.70 104.16/75.70 [subtrees#3^#(@l2, @l1, @t1, @t2, @x)] = [3] @l1 + [3] @x + [3] @t2 + [0] 104.16/75.70 >= [3] @l1 + [0] 104.16/75.70 = [c_8(append^#(@l1, @l2))] 104.16/75.70 104.16/75.70 104.16/75.70 We return to the main proof. Consider the set of all dependency 104.16/75.70 pairs 104.16/75.70 104.16/75.70 : 104.16/75.70 { 1: append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.70 , 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.70 , 3: subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> 104.16/75.70 c_8(append^#(@l1, @l2)) 104.16/75.70 , 4: subtrees^#(@t) -> subtrees#1^#(@t) 104.16/75.70 , 5: subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) 104.16/75.70 , 6: subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.70 subtrees#2^#(subtrees(@t1), @t1, @t2, @x) 104.16/75.70 , 7: subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) 104.16/75.70 , 8: subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.70 subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) } 104.16/75.70 104.16/75.70 Processor 'matrix interpretation of dimension 1' induces the 104.16/75.70 complexity certificate YES(?,O(n^1)) on application of dependency 104.16/75.70 pairs {2,5,6,7,8}. These cover all (indirect) predecessors of 104.16/75.70 dependency pairs {1,2,3,4,5,6,7,8}, their number of application is 104.16/75.70 equally bounded. The dependency pairs are shifted into the weak 104.16/75.70 component. 104.16/75.70 104.16/75.70 We are left with following problem, upon which TcT provides the 104.16/75.70 certificate YES(O(1),O(1)). 104.16/75.70 104.16/75.70 Weak DPs: 104.16/75.70 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.70 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.70 , subtrees^#(@t) -> subtrees#1^#(@t) 104.16/75.70 , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) 104.16/75.70 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.70 subtrees#2^#(subtrees(@t1), @t1, @t2, @x) 104.16/75.70 , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) 104.16/75.70 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.70 subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.70 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.70 Weak Trs: 104.16/75.70 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.70 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.70 , append#1(nil(), @l2) -> @l2 104.16/75.70 , subtrees(@t) -> subtrees#1(@t) 104.16/75.70 , subtrees#1(leaf()) -> nil() 104.16/75.70 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.70 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.70 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.70 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.70 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.70 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.70 Obligation: 104.16/75.70 innermost runtime complexity 104.16/75.70 Answer: 104.16/75.70 YES(O(1),O(1)) 104.16/75.70 104.16/75.70 The following weak DPs constitute a sub-graph of the DG that is 104.16/75.70 closed under successors. The DPs are removed. 104.16/75.70 104.16/75.70 { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) 104.16/75.70 , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) 104.16/75.70 , subtrees^#(@t) -> subtrees#1^#(@t) 104.16/75.70 , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) 104.16/75.70 , subtrees#1^#(node(@x, @t1, @t2)) -> 104.16/75.70 subtrees#2^#(subtrees(@t1), @t1, @t2, @x) 104.16/75.70 , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) 104.16/75.70 , subtrees#2^#(@l1, @t1, @t2, @x) -> 104.16/75.70 subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.70 , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } 104.16/75.70 104.16/75.70 We are left with following problem, upon which TcT provides the 104.16/75.70 certificate YES(O(1),O(1)). 104.16/75.70 104.16/75.70 Weak Trs: 104.16/75.70 { append(@l1, @l2) -> append#1(@l1, @l2) 104.16/75.70 , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 104.16/75.70 , append#1(nil(), @l2) -> @l2 104.16/75.70 , subtrees(@t) -> subtrees#1(@t) 104.16/75.70 , subtrees#1(leaf()) -> nil() 104.16/75.70 , subtrees#1(node(@x, @t1, @t2)) -> 104.16/75.70 subtrees#2(subtrees(@t1), @t1, @t2, @x) 104.16/75.70 , subtrees#2(@l1, @t1, @t2, @x) -> 104.16/75.70 subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) 104.16/75.70 , subtrees#3(@l2, @l1, @t1, @t2, @x) -> 104.16/75.70 ::(node(@x, @t1, @t2), append(@l1, @l2)) } 104.16/75.70 Obligation: 104.16/75.70 innermost runtime complexity 104.16/75.70 Answer: 104.16/75.70 YES(O(1),O(1)) 104.16/75.70 104.16/75.70 No rule is usable, rules are removed from the input problem. 104.16/75.70 104.16/75.70 We are left with following problem, upon which TcT provides the 104.16/75.70 certificate YES(O(1),O(1)). 104.16/75.70 104.16/75.70 Rules: Empty 104.16/75.70 Obligation: 104.16/75.70 innermost runtime complexity 104.16/75.70 Answer: 104.16/75.70 YES(O(1),O(1)) 104.16/75.70 104.16/75.70 Empty rules are trivially bounded 104.16/75.70 104.16/75.70 Hurray, we answered YES(O(1),O(n^2)) 104.48/75.72 EOF