YES(O(1),O(n^1)) 588.34/148.12 YES(O(1),O(n^1)) 588.34/148.12 588.34/148.12 We are left with following problem, upon which TcT provides the 588.34/148.12 certificate YES(O(1),O(n^1)). 588.34/148.12 588.34/148.12 Strict Trs: 588.34/148.12 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.12 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.12 node(@y, @t1, @t2) 588.34/148.12 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.12 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.12 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.12 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.12 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.12 appendreverse(@as, ::(@a, @sofar)) 588.34/148.12 , appendreverse(@toreverse, @sofar) -> 588.34/148.12 appendreverse#1(@toreverse, @sofar) 588.34/148.12 , dfs#1(nil(), @x) -> leaf() 588.34/148.12 , dfs#1(::(@t, @ts), @x) -> dfs#2(@t, @t, @ts, @x) 588.34/148.12 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.12 , dodfs(@t, @x) -> dfs(::(@t, nil()), @x) 588.34/148.12 , bfs2#1(@t', @x) -> dobfs(@t', @x) 588.34/148.12 , bfs2(@t, @x) -> bfs2#1(dobfs(@t, @x), @x) 588.34/148.12 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.12 , bfs#2(nil(), @x) -> leaf() 588.34/148.12 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.12 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.12 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.12 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.12 , dfs#2(leaf(), @t, @ts, @x) -> dfs(@ts, @x) 588.34/148.12 , dfs#2(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.12 dfs#3(#equal(@a, @x), @t, @t1, @t2, @ts, @x) 588.34/148.12 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.12 bfs(@ts, @futurequeue, @x) 588.34/148.12 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.12 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) 588.34/148.12 , dfs(@queue, @x) -> dfs#1(@queue, @x) 588.34/148.12 , dfs#3(#true(), @t, @t1, @t2, @ts, @x) -> @t 588.34/148.12 , dfs#3(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.12 dfs(::(@t1, ::(@t2, @ts)), @x) } 588.34/148.12 Weak Trs: 588.34/148.12 { #eq(leaf(), leaf()) -> #true() 588.34/148.12 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.12 , #eq(leaf(), nil()) -> #false() 588.34/148.12 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.12 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.12 , #eq(#pos(@x), #0()) -> #false() 588.34/148.12 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.12 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.12 , #eq(nil(), leaf()) -> #false() 588.34/148.12 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.12 , #eq(nil(), nil()) -> #true() 588.34/148.12 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.12 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.12 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.12 , #eq(#0(), #0()) -> #true() 588.34/148.12 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.12 , #eq(#0(), #s(@y)) -> #false() 588.34/148.12 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.12 , #eq(#neg(@x), #0()) -> #false() 588.34/148.12 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.12 , #eq(#s(@x), #0()) -> #false() 588.34/148.12 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.12 , #and(#true(), #true()) -> #true() 588.34/148.12 , #and(#true(), #false()) -> #false() 588.34/148.12 , #and(#false(), #true()) -> #false() 588.34/148.12 , #and(#false(), #false()) -> #false() } 588.34/148.12 Obligation: 588.34/148.12 innermost runtime complexity 588.34/148.12 Answer: 588.34/148.12 YES(O(1),O(n^1)) 588.34/148.12 588.34/148.12 We add the following dependency tuples: 588.34/148.12 588.34/148.12 Strict DPs: 588.34/148.12 { #equal^#(@x, @y) -> c_1(#eq^#(@x, @y)) 588.34/148.12 , bfs#4^#(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> c_2() 588.34/148.12 , bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.12 c_3(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.12 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.12 c_14(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.12 , reverse^#(@xs) -> c_4(appendreverse^#(@xs, nil())) 588.34/148.12 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.12 c_7(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.12 , appendreverse#1^#(nil(), @sofar) -> c_5() 588.34/148.12 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.12 c_6(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.12 , dfs#1^#(nil(), @x) -> c_8() 588.34/148.12 , dfs#1^#(::(@t, @ts), @x) -> c_9(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.12 , dfs#2^#(leaf(), @t, @ts, @x) -> c_19(dfs^#(@ts, @x)) 588.34/148.12 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.12 c_20(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x), 588.34/148.12 #equal^#(@a, @x)) 588.34/148.12 , dobfs^#(@t, @x) -> c_10(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.12 , dodfs^#(@t, @x) -> c_11(dfs^#(::(@t, nil()), @x)) 588.34/148.12 , dfs^#(@queue, @x) -> c_23(dfs#1^#(@queue, @x)) 588.34/148.12 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.12 , bfs2^#(@t, @x) -> 588.34/148.12 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.12 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.12 c_17(bfs#2^#(@futurequeue, @x)) 588.34/148.12 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.12 c_18(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.12 , bfs#2^#(nil(), @x) -> c_15() 588.34/148.12 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.12 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.12 reverse^#(::(@t, @ts))) 588.34/148.12 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.12 c_21(bfs^#(@ts, @futurequeue, @x)) 588.34/148.12 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.12 c_22(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y), 588.34/148.12 #equal^#(@x, @y)) 588.34/148.12 , dfs#3^#(#true(), @t, @t1, @t2, @ts, @x) -> c_24() 588.34/148.12 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.12 c_25(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.12 Weak DPs: 588.34/148.12 { #eq^#(leaf(), leaf()) -> c_26() 588.34/148.12 , #eq^#(leaf(), node(@y_1, @y_2, @y_3)) -> c_27() 588.34/148.12 , #eq^#(leaf(), nil()) -> c_28() 588.34/148.12 , #eq^#(leaf(), ::(@y_1, @y_2)) -> c_29() 588.34/148.12 , #eq^#(#pos(@x), #pos(@y)) -> c_30(#eq^#(@x, @y)) 588.34/148.12 , #eq^#(#pos(@x), #0()) -> c_31() 588.34/148.12 , #eq^#(#pos(@x), #neg(@y)) -> c_32() 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), leaf()) -> c_33() 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.12 c_34(#and^#(#eq(@x_1, @y_1), 588.34/148.12 #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))), 588.34/148.12 #eq^#(@x_1, @y_1), 588.34/148.12 #and^#(#eq(@x_2, @y_2), #eq(@x_3, @y_3)), 588.34/148.12 #eq^#(@x_2, @y_2), 588.34/148.12 #eq^#(@x_3, @y_3)) 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), nil()) -> c_35() 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> c_36() 588.34/148.12 , #eq^#(nil(), leaf()) -> c_37() 588.34/148.12 , #eq^#(nil(), node(@y_1, @y_2, @y_3)) -> c_38() 588.34/148.12 , #eq^#(nil(), nil()) -> c_39() 588.34/148.12 , #eq^#(nil(), ::(@y_1, @y_2)) -> c_40() 588.34/148.12 , #eq^#(::(@x_1, @x_2), leaf()) -> c_41() 588.34/148.12 , #eq^#(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> c_42() 588.34/148.12 , #eq^#(::(@x_1, @x_2), nil()) -> c_43() 588.34/148.12 , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.12 c_44(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)), 588.34/148.12 #eq^#(@x_1, @y_1), 588.34/148.12 #eq^#(@x_2, @y_2)) 588.34/148.12 , #eq^#(#0(), #pos(@y)) -> c_45() 588.34/148.12 , #eq^#(#0(), #0()) -> c_46() 588.34/148.12 , #eq^#(#0(), #neg(@y)) -> c_47() 588.34/148.12 , #eq^#(#0(), #s(@y)) -> c_48() 588.34/148.12 , #eq^#(#neg(@x), #pos(@y)) -> c_49() 588.34/148.12 , #eq^#(#neg(@x), #0()) -> c_50() 588.34/148.12 , #eq^#(#neg(@x), #neg(@y)) -> c_51(#eq^#(@x, @y)) 588.34/148.12 , #eq^#(#s(@x), #0()) -> c_52() 588.34/148.12 , #eq^#(#s(@x), #s(@y)) -> c_53(#eq^#(@x, @y)) 588.34/148.12 , #and^#(#true(), #true()) -> c_54() 588.34/148.12 , #and^#(#true(), #false()) -> c_55() 588.34/148.12 , #and^#(#false(), #true()) -> c_56() 588.34/148.12 , #and^#(#false(), #false()) -> c_57() } 588.34/148.12 588.34/148.12 and mark the set of starting terms. 588.34/148.12 588.34/148.12 We are left with following problem, upon which TcT provides the 588.34/148.12 certificate YES(O(1),O(n^1)). 588.34/148.12 588.34/148.12 Strict DPs: 588.34/148.12 { #equal^#(@x, @y) -> c_1(#eq^#(@x, @y)) 588.34/148.12 , bfs#4^#(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> c_2() 588.34/148.12 , bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.12 c_3(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.12 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.12 c_14(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.12 , reverse^#(@xs) -> c_4(appendreverse^#(@xs, nil())) 588.34/148.12 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.12 c_7(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.12 , appendreverse#1^#(nil(), @sofar) -> c_5() 588.34/148.12 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.12 c_6(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.12 , dfs#1^#(nil(), @x) -> c_8() 588.34/148.12 , dfs#1^#(::(@t, @ts), @x) -> c_9(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.12 , dfs#2^#(leaf(), @t, @ts, @x) -> c_19(dfs^#(@ts, @x)) 588.34/148.12 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.12 c_20(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x), 588.34/148.12 #equal^#(@a, @x)) 588.34/148.12 , dobfs^#(@t, @x) -> c_10(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.12 , dodfs^#(@t, @x) -> c_11(dfs^#(::(@t, nil()), @x)) 588.34/148.12 , dfs^#(@queue, @x) -> c_23(dfs#1^#(@queue, @x)) 588.34/148.12 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.12 , bfs2^#(@t, @x) -> 588.34/148.12 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.12 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.12 c_17(bfs#2^#(@futurequeue, @x)) 588.34/148.12 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.12 c_18(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.12 , bfs#2^#(nil(), @x) -> c_15() 588.34/148.12 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.12 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.12 reverse^#(::(@t, @ts))) 588.34/148.12 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.12 c_21(bfs^#(@ts, @futurequeue, @x)) 588.34/148.12 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.12 c_22(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y), 588.34/148.12 #equal^#(@x, @y)) 588.34/148.12 , dfs#3^#(#true(), @t, @t1, @t2, @ts, @x) -> c_24() 588.34/148.12 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.12 c_25(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.12 Weak DPs: 588.34/148.12 { #eq^#(leaf(), leaf()) -> c_26() 588.34/148.12 , #eq^#(leaf(), node(@y_1, @y_2, @y_3)) -> c_27() 588.34/148.12 , #eq^#(leaf(), nil()) -> c_28() 588.34/148.12 , #eq^#(leaf(), ::(@y_1, @y_2)) -> c_29() 588.34/148.12 , #eq^#(#pos(@x), #pos(@y)) -> c_30(#eq^#(@x, @y)) 588.34/148.12 , #eq^#(#pos(@x), #0()) -> c_31() 588.34/148.12 , #eq^#(#pos(@x), #neg(@y)) -> c_32() 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), leaf()) -> c_33() 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.12 c_34(#and^#(#eq(@x_1, @y_1), 588.34/148.12 #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))), 588.34/148.12 #eq^#(@x_1, @y_1), 588.34/148.12 #and^#(#eq(@x_2, @y_2), #eq(@x_3, @y_3)), 588.34/148.12 #eq^#(@x_2, @y_2), 588.34/148.12 #eq^#(@x_3, @y_3)) 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), nil()) -> c_35() 588.34/148.12 , #eq^#(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> c_36() 588.34/148.12 , #eq^#(nil(), leaf()) -> c_37() 588.34/148.12 , #eq^#(nil(), node(@y_1, @y_2, @y_3)) -> c_38() 588.34/148.12 , #eq^#(nil(), nil()) -> c_39() 588.34/148.12 , #eq^#(nil(), ::(@y_1, @y_2)) -> c_40() 588.34/148.12 , #eq^#(::(@x_1, @x_2), leaf()) -> c_41() 588.34/148.12 , #eq^#(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> c_42() 588.34/148.12 , #eq^#(::(@x_1, @x_2), nil()) -> c_43() 588.34/148.12 , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.12 c_44(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)), 588.34/148.12 #eq^#(@x_1, @y_1), 588.34/148.12 #eq^#(@x_2, @y_2)) 588.34/148.12 , #eq^#(#0(), #pos(@y)) -> c_45() 588.34/148.12 , #eq^#(#0(), #0()) -> c_46() 588.34/148.12 , #eq^#(#0(), #neg(@y)) -> c_47() 588.34/148.12 , #eq^#(#0(), #s(@y)) -> c_48() 588.34/148.12 , #eq^#(#neg(@x), #pos(@y)) -> c_49() 588.34/148.12 , #eq^#(#neg(@x), #0()) -> c_50() 588.34/148.12 , #eq^#(#neg(@x), #neg(@y)) -> c_51(#eq^#(@x, @y)) 588.34/148.12 , #eq^#(#s(@x), #0()) -> c_52() 588.34/148.12 , #eq^#(#s(@x), #s(@y)) -> c_53(#eq^#(@x, @y)) 588.34/148.12 , #and^#(#true(), #true()) -> c_54() 588.34/148.12 , #and^#(#true(), #false()) -> c_55() 588.34/148.12 , #and^#(#false(), #true()) -> c_56() 588.34/148.12 , #and^#(#false(), #false()) -> c_57() } 588.34/148.12 Weak Trs: 588.34/148.12 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.12 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.12 node(@y, @t1, @t2) 588.34/148.12 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.12 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.12 , #eq(leaf(), leaf()) -> #true() 588.34/148.12 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.12 , #eq(leaf(), nil()) -> #false() 588.34/148.12 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.12 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.12 , #eq(#pos(@x), #0()) -> #false() 588.34/148.12 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.12 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.12 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.12 , #eq(nil(), leaf()) -> #false() 588.34/148.12 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.12 , #eq(nil(), nil()) -> #true() 588.34/148.12 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.12 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.12 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.12 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.12 , #eq(#0(), #0()) -> #true() 588.34/148.12 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.12 , #eq(#0(), #s(@y)) -> #false() 588.34/148.12 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.12 , #eq(#neg(@x), #0()) -> #false() 588.34/148.12 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.12 , #eq(#s(@x), #0()) -> #false() 588.34/148.12 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.12 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.12 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.12 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.12 appendreverse(@as, ::(@a, @sofar)) 588.34/148.12 , appendreverse(@toreverse, @sofar) -> 588.34/148.12 appendreverse#1(@toreverse, @sofar) 588.34/148.12 , dfs#1(nil(), @x) -> leaf() 588.34/148.12 , dfs#1(::(@t, @ts), @x) -> dfs#2(@t, @t, @ts, @x) 588.34/148.12 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.12 , dodfs(@t, @x) -> dfs(::(@t, nil()), @x) 588.34/148.12 , bfs2#1(@t', @x) -> dobfs(@t', @x) 588.34/148.12 , bfs2(@t, @x) -> bfs2#1(dobfs(@t, @x), @x) 588.34/148.12 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.12 , #and(#true(), #true()) -> #true() 588.34/148.12 , #and(#true(), #false()) -> #false() 588.34/148.12 , #and(#false(), #true()) -> #false() 588.34/148.12 , #and(#false(), #false()) -> #false() 588.34/148.12 , bfs#2(nil(), @x) -> leaf() 588.34/148.12 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.12 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.12 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.12 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.12 , dfs#2(leaf(), @t, @ts, @x) -> dfs(@ts, @x) 588.34/148.12 , dfs#2(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.12 dfs#3(#equal(@a, @x), @t, @t1, @t2, @ts, @x) 588.34/148.12 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.12 bfs(@ts, @futurequeue, @x) 588.34/148.12 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.12 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) 588.34/148.12 , dfs(@queue, @x) -> dfs#1(@queue, @x) 588.34/148.12 , dfs#3(#true(), @t, @t1, @t2, @ts, @x) -> @t 588.34/148.12 , dfs#3(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.12 dfs(::(@t1, ::(@t2, @ts)), @x) } 588.34/148.12 Obligation: 588.34/148.12 innermost runtime complexity 588.34/148.12 Answer: 588.34/148.12 YES(O(1),O(n^1)) 588.34/148.12 588.34/148.12 We estimate the number of application of {1,2,7,9,20,24} by 588.34/148.12 applications of Pre({1,2,7,9,20,24}) = {6,12,15,18,23}. Here rules 588.34/148.12 are labeled as follows: 588.34/148.12 588.34/148.12 DPs: 588.34/148.12 { 1: #equal^#(@x, @y) -> c_1(#eq^#(@x, @y)) 588.34/148.12 , 2: bfs#4^#(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> c_2() 588.34/148.12 , 3: bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.12 c_3(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.12 , 4: bfs^#(@queue, @futurequeue, @x) -> 588.34/148.12 c_14(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.12 , 5: reverse^#(@xs) -> c_4(appendreverse^#(@xs, nil())) 588.34/148.12 , 6: appendreverse^#(@toreverse, @sofar) -> 588.34/148.12 c_7(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.12 , 7: appendreverse#1^#(nil(), @sofar) -> c_5() 588.34/148.12 , 8: appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.12 c_6(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.12 , 9: dfs#1^#(nil(), @x) -> c_8() 588.34/148.12 , 10: dfs#1^#(::(@t, @ts), @x) -> c_9(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.12 , 11: dfs#2^#(leaf(), @t, @ts, @x) -> c_19(dfs^#(@ts, @x)) 588.34/148.12 , 12: dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.12 c_20(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x), 588.34/148.12 #equal^#(@a, @x)) 588.34/148.12 , 13: dobfs^#(@t, @x) -> c_10(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.12 , 14: dodfs^#(@t, @x) -> c_11(dfs^#(::(@t, nil()), @x)) 588.34/148.12 , 15: dfs^#(@queue, @x) -> c_23(dfs#1^#(@queue, @x)) 588.34/148.12 , 16: bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.12 , 17: bfs2^#(@t, @x) -> 588.34/148.12 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.12 , 18: bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.12 c_17(bfs#2^#(@futurequeue, @x)) 588.34/148.12 , 19: bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.12 c_18(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.12 , 20: bfs#2^#(nil(), @x) -> c_15() 588.34/148.12 , 21: bfs#2^#(::(@t, @ts), @x) -> 588.34/148.12 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.12 reverse^#(::(@t, @ts))) 588.34/148.12 , 22: bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.12 c_21(bfs^#(@ts, @futurequeue, @x)) 588.34/148.12 , 23: bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.12 c_22(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y), 588.34/148.12 #equal^#(@x, @y)) 588.34/148.12 , 24: dfs#3^#(#true(), @t, @t1, @t2, @ts, @x) -> c_24() 588.34/148.12 , 25: dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.12 c_25(dfs^#(::(@t1, ::(@t2, @ts)), @x)) 588.34/148.12 , 26: #eq^#(leaf(), leaf()) -> c_26() 588.34/148.12 , 27: #eq^#(leaf(), node(@y_1, @y_2, @y_3)) -> c_27() 588.34/148.12 , 28: #eq^#(leaf(), nil()) -> c_28() 588.34/148.12 , 29: #eq^#(leaf(), ::(@y_1, @y_2)) -> c_29() 588.34/148.12 , 30: #eq^#(#pos(@x), #pos(@y)) -> c_30(#eq^#(@x, @y)) 588.34/148.13 , 31: #eq^#(#pos(@x), #0()) -> c_31() 588.34/148.13 , 32: #eq^#(#pos(@x), #neg(@y)) -> c_32() 588.34/148.13 , 33: #eq^#(node(@x_1, @x_2, @x_3), leaf()) -> c_33() 588.34/148.13 , 34: #eq^#(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.13 c_34(#and^#(#eq(@x_1, @y_1), 588.34/148.13 #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))), 588.34/148.13 #eq^#(@x_1, @y_1), 588.34/148.13 #and^#(#eq(@x_2, @y_2), #eq(@x_3, @y_3)), 588.34/148.13 #eq^#(@x_2, @y_2), 588.34/148.13 #eq^#(@x_3, @y_3)) 588.34/148.13 , 35: #eq^#(node(@x_1, @x_2, @x_3), nil()) -> c_35() 588.34/148.13 , 36: #eq^#(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> c_36() 588.34/148.13 , 37: #eq^#(nil(), leaf()) -> c_37() 588.34/148.13 , 38: #eq^#(nil(), node(@y_1, @y_2, @y_3)) -> c_38() 588.34/148.13 , 39: #eq^#(nil(), nil()) -> c_39() 588.34/148.13 , 40: #eq^#(nil(), ::(@y_1, @y_2)) -> c_40() 588.34/148.13 , 41: #eq^#(::(@x_1, @x_2), leaf()) -> c_41() 588.34/148.13 , 42: #eq^#(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> c_42() 588.34/148.13 , 43: #eq^#(::(@x_1, @x_2), nil()) -> c_43() 588.34/148.13 , 44: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.13 c_44(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)), 588.34/148.13 #eq^#(@x_1, @y_1), 588.34/148.13 #eq^#(@x_2, @y_2)) 588.34/148.13 , 45: #eq^#(#0(), #pos(@y)) -> c_45() 588.34/148.13 , 46: #eq^#(#0(), #0()) -> c_46() 588.34/148.13 , 47: #eq^#(#0(), #neg(@y)) -> c_47() 588.34/148.13 , 48: #eq^#(#0(), #s(@y)) -> c_48() 588.34/148.13 , 49: #eq^#(#neg(@x), #pos(@y)) -> c_49() 588.34/148.13 , 50: #eq^#(#neg(@x), #0()) -> c_50() 588.34/148.13 , 51: #eq^#(#neg(@x), #neg(@y)) -> c_51(#eq^#(@x, @y)) 588.34/148.13 , 52: #eq^#(#s(@x), #0()) -> c_52() 588.34/148.13 , 53: #eq^#(#s(@x), #s(@y)) -> c_53(#eq^#(@x, @y)) 588.34/148.13 , 54: #and^#(#true(), #true()) -> c_54() 588.34/148.13 , 55: #and^#(#true(), #false()) -> c_55() 588.34/148.13 , 56: #and^#(#false(), #true()) -> c_56() 588.34/148.13 , 57: #and^#(#false(), #false()) -> c_57() } 588.34/148.13 588.34/148.13 We are left with following problem, upon which TcT provides the 588.34/148.13 certificate YES(O(1),O(n^1)). 588.34/148.13 588.34/148.13 Strict DPs: 588.34/148.13 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.13 c_3(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.13 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.13 c_14(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.13 , reverse^#(@xs) -> c_4(appendreverse^#(@xs, nil())) 588.34/148.13 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.13 c_7(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.13 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.13 c_6(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.13 , dfs#1^#(::(@t, @ts), @x) -> c_9(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.13 , dfs#2^#(leaf(), @t, @ts, @x) -> c_19(dfs^#(@ts, @x)) 588.34/148.13 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.13 c_20(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x), 588.34/148.13 #equal^#(@a, @x)) 588.34/148.13 , dobfs^#(@t, @x) -> c_10(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.13 , dodfs^#(@t, @x) -> c_11(dfs^#(::(@t, nil()), @x)) 588.34/148.13 , dfs^#(@queue, @x) -> c_23(dfs#1^#(@queue, @x)) 588.34/148.13 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.13 , bfs2^#(@t, @x) -> 588.34/148.13 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.13 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.13 c_17(bfs#2^#(@futurequeue, @x)) 588.34/148.13 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.13 c_18(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.13 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.13 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.13 reverse^#(::(@t, @ts))) 588.34/148.13 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.13 c_21(bfs^#(@ts, @futurequeue, @x)) 588.34/148.13 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.13 c_22(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y), 588.34/148.13 #equal^#(@x, @y)) 588.34/148.13 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.13 c_25(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.13 Weak DPs: 588.34/148.13 { #equal^#(@x, @y) -> c_1(#eq^#(@x, @y)) 588.34/148.13 , #eq^#(leaf(), leaf()) -> c_26() 588.34/148.13 , #eq^#(leaf(), node(@y_1, @y_2, @y_3)) -> c_27() 588.34/148.13 , #eq^#(leaf(), nil()) -> c_28() 588.34/148.13 , #eq^#(leaf(), ::(@y_1, @y_2)) -> c_29() 588.34/148.13 , #eq^#(#pos(@x), #pos(@y)) -> c_30(#eq^#(@x, @y)) 588.34/148.13 , #eq^#(#pos(@x), #0()) -> c_31() 588.34/148.13 , #eq^#(#pos(@x), #neg(@y)) -> c_32() 588.34/148.13 , #eq^#(node(@x_1, @x_2, @x_3), leaf()) -> c_33() 588.34/148.13 , #eq^#(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.13 c_34(#and^#(#eq(@x_1, @y_1), 588.34/148.13 #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))), 588.34/148.13 #eq^#(@x_1, @y_1), 588.34/148.13 #and^#(#eq(@x_2, @y_2), #eq(@x_3, @y_3)), 588.34/148.13 #eq^#(@x_2, @y_2), 588.34/148.13 #eq^#(@x_3, @y_3)) 588.34/148.13 , #eq^#(node(@x_1, @x_2, @x_3), nil()) -> c_35() 588.34/148.13 , #eq^#(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> c_36() 588.34/148.13 , #eq^#(nil(), leaf()) -> c_37() 588.34/148.13 , #eq^#(nil(), node(@y_1, @y_2, @y_3)) -> c_38() 588.34/148.13 , #eq^#(nil(), nil()) -> c_39() 588.34/148.13 , #eq^#(nil(), ::(@y_1, @y_2)) -> c_40() 588.34/148.13 , #eq^#(::(@x_1, @x_2), leaf()) -> c_41() 588.34/148.13 , #eq^#(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> c_42() 588.34/148.13 , #eq^#(::(@x_1, @x_2), nil()) -> c_43() 588.34/148.13 , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.13 c_44(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)), 588.34/148.13 #eq^#(@x_1, @y_1), 588.34/148.13 #eq^#(@x_2, @y_2)) 588.34/148.13 , #eq^#(#0(), #pos(@y)) -> c_45() 588.34/148.13 , #eq^#(#0(), #0()) -> c_46() 588.34/148.13 , #eq^#(#0(), #neg(@y)) -> c_47() 588.34/148.13 , #eq^#(#0(), #s(@y)) -> c_48() 588.34/148.13 , #eq^#(#neg(@x), #pos(@y)) -> c_49() 588.34/148.13 , #eq^#(#neg(@x), #0()) -> c_50() 588.34/148.13 , #eq^#(#neg(@x), #neg(@y)) -> c_51(#eq^#(@x, @y)) 588.34/148.13 , #eq^#(#s(@x), #0()) -> c_52() 588.34/148.13 , #eq^#(#s(@x), #s(@y)) -> c_53(#eq^#(@x, @y)) 588.34/148.13 , bfs#4^#(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> c_2() 588.34/148.13 , appendreverse#1^#(nil(), @sofar) -> c_5() 588.34/148.13 , dfs#1^#(nil(), @x) -> c_8() 588.34/148.13 , bfs#2^#(nil(), @x) -> c_15() 588.34/148.13 , dfs#3^#(#true(), @t, @t1, @t2, @ts, @x) -> c_24() 588.34/148.13 , #and^#(#true(), #true()) -> c_54() 588.34/148.13 , #and^#(#true(), #false()) -> c_55() 588.34/148.13 , #and^#(#false(), #true()) -> c_56() 588.34/148.13 , #and^#(#false(), #false()) -> c_57() } 588.34/148.13 Weak Trs: 588.34/148.13 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.13 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.13 node(@y, @t1, @t2) 588.34/148.13 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.13 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.13 , #eq(leaf(), leaf()) -> #true() 588.34/148.13 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.13 , #eq(leaf(), nil()) -> #false() 588.34/148.13 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.13 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.13 , #eq(#pos(@x), #0()) -> #false() 588.34/148.13 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.13 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.13 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.13 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.13 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.13 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.13 , #eq(nil(), leaf()) -> #false() 588.34/148.13 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.13 , #eq(nil(), nil()) -> #true() 588.34/148.13 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.13 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.13 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.13 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.13 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.13 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.13 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.13 , #eq(#0(), #0()) -> #true() 588.34/148.13 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.13 , #eq(#0(), #s(@y)) -> #false() 588.34/148.13 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.13 , #eq(#neg(@x), #0()) -> #false() 588.34/148.13 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.13 , #eq(#s(@x), #0()) -> #false() 588.34/148.13 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.13 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.13 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.13 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.13 appendreverse(@as, ::(@a, @sofar)) 588.34/148.13 , appendreverse(@toreverse, @sofar) -> 588.34/148.13 appendreverse#1(@toreverse, @sofar) 588.34/148.13 , dfs#1(nil(), @x) -> leaf() 588.34/148.13 , dfs#1(::(@t, @ts), @x) -> dfs#2(@t, @t, @ts, @x) 588.34/148.13 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.13 , dodfs(@t, @x) -> dfs(::(@t, nil()), @x) 588.34/148.13 , bfs2#1(@t', @x) -> dobfs(@t', @x) 588.34/148.13 , bfs2(@t, @x) -> bfs2#1(dobfs(@t, @x), @x) 588.34/148.13 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.13 , #and(#true(), #true()) -> #true() 588.34/148.13 , #and(#true(), #false()) -> #false() 588.34/148.13 , #and(#false(), #true()) -> #false() 588.34/148.13 , #and(#false(), #false()) -> #false() 588.34/148.13 , bfs#2(nil(), @x) -> leaf() 588.34/148.13 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.13 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.13 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.13 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.13 , dfs#2(leaf(), @t, @ts, @x) -> dfs(@ts, @x) 588.34/148.13 , dfs#2(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.13 dfs#3(#equal(@a, @x), @t, @t1, @t2, @ts, @x) 588.34/148.14 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.14 bfs(@ts, @futurequeue, @x) 588.34/148.14 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.14 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) 588.34/148.14 , dfs(@queue, @x) -> dfs#1(@queue, @x) 588.34/148.14 , dfs#3(#true(), @t, @t1, @t2, @ts, @x) -> @t 588.34/148.14 , dfs#3(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.14 dfs(::(@t1, ::(@t2, @ts)), @x) } 588.34/148.14 Obligation: 588.34/148.14 innermost runtime complexity 588.34/148.14 Answer: 588.34/148.14 YES(O(1),O(n^1)) 588.34/148.14 588.34/148.14 The following weak DPs constitute a sub-graph of the DG that is 588.34/148.14 closed under successors. The DPs are removed. 588.34/148.14 588.34/148.14 { #equal^#(@x, @y) -> c_1(#eq^#(@x, @y)) 588.34/148.14 , #eq^#(leaf(), leaf()) -> c_26() 588.34/148.14 , #eq^#(leaf(), node(@y_1, @y_2, @y_3)) -> c_27() 588.34/148.14 , #eq^#(leaf(), nil()) -> c_28() 588.34/148.14 , #eq^#(leaf(), ::(@y_1, @y_2)) -> c_29() 588.34/148.14 , #eq^#(#pos(@x), #pos(@y)) -> c_30(#eq^#(@x, @y)) 588.34/148.14 , #eq^#(#pos(@x), #0()) -> c_31() 588.34/148.14 , #eq^#(#pos(@x), #neg(@y)) -> c_32() 588.34/148.14 , #eq^#(node(@x_1, @x_2, @x_3), leaf()) -> c_33() 588.34/148.14 , #eq^#(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.14 c_34(#and^#(#eq(@x_1, @y_1), 588.34/148.14 #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))), 588.34/148.14 #eq^#(@x_1, @y_1), 588.34/148.14 #and^#(#eq(@x_2, @y_2), #eq(@x_3, @y_3)), 588.34/148.14 #eq^#(@x_2, @y_2), 588.34/148.14 #eq^#(@x_3, @y_3)) 588.34/148.14 , #eq^#(node(@x_1, @x_2, @x_3), nil()) -> c_35() 588.34/148.14 , #eq^#(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> c_36() 588.34/148.14 , #eq^#(nil(), leaf()) -> c_37() 588.34/148.14 , #eq^#(nil(), node(@y_1, @y_2, @y_3)) -> c_38() 588.34/148.14 , #eq^#(nil(), nil()) -> c_39() 588.34/148.14 , #eq^#(nil(), ::(@y_1, @y_2)) -> c_40() 588.34/148.14 , #eq^#(::(@x_1, @x_2), leaf()) -> c_41() 588.34/148.14 , #eq^#(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> c_42() 588.34/148.14 , #eq^#(::(@x_1, @x_2), nil()) -> c_43() 588.34/148.14 , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.14 c_44(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)), 588.34/148.14 #eq^#(@x_1, @y_1), 588.34/148.14 #eq^#(@x_2, @y_2)) 588.34/148.14 , #eq^#(#0(), #pos(@y)) -> c_45() 588.34/148.14 , #eq^#(#0(), #0()) -> c_46() 588.34/148.14 , #eq^#(#0(), #neg(@y)) -> c_47() 588.34/148.14 , #eq^#(#0(), #s(@y)) -> c_48() 588.34/148.14 , #eq^#(#neg(@x), #pos(@y)) -> c_49() 588.34/148.14 , #eq^#(#neg(@x), #0()) -> c_50() 588.34/148.14 , #eq^#(#neg(@x), #neg(@y)) -> c_51(#eq^#(@x, @y)) 588.34/148.14 , #eq^#(#s(@x), #0()) -> c_52() 588.34/148.14 , #eq^#(#s(@x), #s(@y)) -> c_53(#eq^#(@x, @y)) 588.34/148.14 , bfs#4^#(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> c_2() 588.34/148.14 , appendreverse#1^#(nil(), @sofar) -> c_5() 588.34/148.14 , dfs#1^#(nil(), @x) -> c_8() 588.34/148.14 , bfs#2^#(nil(), @x) -> c_15() 588.34/148.14 , dfs#3^#(#true(), @t, @t1, @t2, @ts, @x) -> c_24() 588.34/148.14 , #and^#(#true(), #true()) -> c_54() 588.34/148.14 , #and^#(#true(), #false()) -> c_55() 588.34/148.14 , #and^#(#false(), #true()) -> c_56() 588.34/148.14 , #and^#(#false(), #false()) -> c_57() } 588.34/148.14 588.34/148.14 We are left with following problem, upon which TcT provides the 588.34/148.14 certificate YES(O(1),O(n^1)). 588.34/148.14 588.34/148.14 Strict DPs: 588.34/148.14 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 c_3(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.14 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.14 c_14(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.14 , reverse^#(@xs) -> c_4(appendreverse^#(@xs, nil())) 588.34/148.14 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.14 c_7(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.14 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.14 c_6(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.14 , dfs#1^#(::(@t, @ts), @x) -> c_9(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.14 , dfs#2^#(leaf(), @t, @ts, @x) -> c_19(dfs^#(@ts, @x)) 588.34/148.14 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.14 c_20(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x), 588.34/148.14 #equal^#(@a, @x)) 588.34/148.14 , dobfs^#(@t, @x) -> c_10(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.14 , dodfs^#(@t, @x) -> c_11(dfs^#(::(@t, nil()), @x)) 588.34/148.14 , dfs^#(@queue, @x) -> c_23(dfs#1^#(@queue, @x)) 588.34/148.14 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.14 , bfs2^#(@t, @x) -> 588.34/148.14 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.14 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.14 c_17(bfs#2^#(@futurequeue, @x)) 588.34/148.14 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.14 c_18(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.14 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.14 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.14 reverse^#(::(@t, @ts))) 588.34/148.14 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.14 c_21(bfs^#(@ts, @futurequeue, @x)) 588.34/148.14 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.14 c_22(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y), 588.34/148.14 #equal^#(@x, @y)) 588.34/148.14 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.14 c_25(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.14 Weak Trs: 588.34/148.14 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.14 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 node(@y, @t1, @t2) 588.34/148.14 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.14 , #eq(leaf(), leaf()) -> #true() 588.34/148.14 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(leaf(), nil()) -> #false() 588.34/148.14 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.14 , #eq(#pos(@x), #0()) -> #false() 588.34/148.14 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.14 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(nil(), leaf()) -> #false() 588.34/148.14 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(nil(), nil()) -> #true() 588.34/148.14 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.14 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.14 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.14 , #eq(#0(), #0()) -> #true() 588.34/148.14 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.14 , #eq(#0(), #s(@y)) -> #false() 588.34/148.14 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.14 , #eq(#neg(@x), #0()) -> #false() 588.34/148.14 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.14 , #eq(#s(@x), #0()) -> #false() 588.34/148.14 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.14 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.14 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.14 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.14 appendreverse(@as, ::(@a, @sofar)) 588.34/148.14 , appendreverse(@toreverse, @sofar) -> 588.34/148.14 appendreverse#1(@toreverse, @sofar) 588.34/148.14 , dfs#1(nil(), @x) -> leaf() 588.34/148.14 , dfs#1(::(@t, @ts), @x) -> dfs#2(@t, @t, @ts, @x) 588.34/148.14 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.14 , dodfs(@t, @x) -> dfs(::(@t, nil()), @x) 588.34/148.14 , bfs2#1(@t', @x) -> dobfs(@t', @x) 588.34/148.14 , bfs2(@t, @x) -> bfs2#1(dobfs(@t, @x), @x) 588.34/148.14 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.14 , #and(#true(), #true()) -> #true() 588.34/148.14 , #and(#true(), #false()) -> #false() 588.34/148.14 , #and(#false(), #true()) -> #false() 588.34/148.14 , #and(#false(), #false()) -> #false() 588.34/148.14 , bfs#2(nil(), @x) -> leaf() 588.34/148.14 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.14 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.14 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.14 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.14 , dfs#2(leaf(), @t, @ts, @x) -> dfs(@ts, @x) 588.34/148.14 , dfs#2(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.14 dfs#3(#equal(@a, @x), @t, @t1, @t2, @ts, @x) 588.34/148.14 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.14 bfs(@ts, @futurequeue, @x) 588.34/148.14 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.14 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) 588.34/148.14 , dfs(@queue, @x) -> dfs#1(@queue, @x) 588.34/148.14 , dfs#3(#true(), @t, @t1, @t2, @ts, @x) -> @t 588.34/148.14 , dfs#3(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.14 dfs(::(@t1, ::(@t2, @ts)), @x) } 588.34/148.14 Obligation: 588.34/148.14 innermost runtime complexity 588.34/148.14 Answer: 588.34/148.14 YES(O(1),O(n^1)) 588.34/148.14 588.34/148.14 Due to missing edges in the dependency-graph, the right-hand sides 588.34/148.14 of following rules could be simplified: 588.34/148.14 588.34/148.14 { dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.14 c_20(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x), 588.34/148.14 #equal^#(@a, @x)) 588.34/148.14 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.14 c_22(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y), 588.34/148.14 #equal^#(@x, @y)) } 588.34/148.14 588.34/148.14 We are left with following problem, upon which TcT provides the 588.34/148.14 certificate YES(O(1),O(n^1)). 588.34/148.14 588.34/148.14 Strict DPs: 588.34/148.14 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.14 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.14 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.14 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.14 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.14 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.14 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.14 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.14 , dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.14 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.14 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.14 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.14 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.14 , dodfs^#(@t, @x) -> c_10(dfs^#(::(@t, nil()), @x)) 588.34/148.14 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.14 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.14 , bfs2^#(@t, @x) -> 588.34/148.14 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.14 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.14 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.14 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.14 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.14 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.14 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.14 reverse^#(::(@t, @ts))) 588.34/148.14 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.14 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.14 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.14 c_18(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y)) 588.34/148.14 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.14 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.14 Weak Trs: 588.34/148.14 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.14 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 node(@y, @t1, @t2) 588.34/148.14 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.14 , #eq(leaf(), leaf()) -> #true() 588.34/148.14 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(leaf(), nil()) -> #false() 588.34/148.14 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.14 , #eq(#pos(@x), #0()) -> #false() 588.34/148.14 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.14 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(nil(), leaf()) -> #false() 588.34/148.14 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(nil(), nil()) -> #true() 588.34/148.14 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.14 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.14 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.14 , #eq(#0(), #0()) -> #true() 588.34/148.14 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.14 , #eq(#0(), #s(@y)) -> #false() 588.34/148.14 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.14 , #eq(#neg(@x), #0()) -> #false() 588.34/148.14 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.14 , #eq(#s(@x), #0()) -> #false() 588.34/148.14 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.14 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.14 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.14 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.14 appendreverse(@as, ::(@a, @sofar)) 588.34/148.14 , appendreverse(@toreverse, @sofar) -> 588.34/148.14 appendreverse#1(@toreverse, @sofar) 588.34/148.14 , dfs#1(nil(), @x) -> leaf() 588.34/148.14 , dfs#1(::(@t, @ts), @x) -> dfs#2(@t, @t, @ts, @x) 588.34/148.14 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.14 , dodfs(@t, @x) -> dfs(::(@t, nil()), @x) 588.34/148.14 , bfs2#1(@t', @x) -> dobfs(@t', @x) 588.34/148.14 , bfs2(@t, @x) -> bfs2#1(dobfs(@t, @x), @x) 588.34/148.14 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.14 , #and(#true(), #true()) -> #true() 588.34/148.14 , #and(#true(), #false()) -> #false() 588.34/148.14 , #and(#false(), #true()) -> #false() 588.34/148.14 , #and(#false(), #false()) -> #false() 588.34/148.14 , bfs#2(nil(), @x) -> leaf() 588.34/148.14 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.14 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.14 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.14 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.14 , dfs#2(leaf(), @t, @ts, @x) -> dfs(@ts, @x) 588.34/148.14 , dfs#2(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.14 dfs#3(#equal(@a, @x), @t, @t1, @t2, @ts, @x) 588.34/148.14 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.14 bfs(@ts, @futurequeue, @x) 588.34/148.14 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.14 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) 588.34/148.14 , dfs(@queue, @x) -> dfs#1(@queue, @x) 588.34/148.14 , dfs#3(#true(), @t, @t1, @t2, @ts, @x) -> @t 588.34/148.14 , dfs#3(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.14 dfs(::(@t1, ::(@t2, @ts)), @x) } 588.34/148.14 Obligation: 588.34/148.14 innermost runtime complexity 588.34/148.14 Answer: 588.34/148.14 YES(O(1),O(n^1)) 588.34/148.14 588.34/148.14 We replace rewrite rules by usable rules: 588.34/148.14 588.34/148.14 Weak Usable Rules: 588.34/148.14 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.14 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 node(@y, @t1, @t2) 588.34/148.14 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.14 , #eq(leaf(), leaf()) -> #true() 588.34/148.14 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(leaf(), nil()) -> #false() 588.34/148.14 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.14 , #eq(#pos(@x), #0()) -> #false() 588.34/148.14 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.14 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.14 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(nil(), leaf()) -> #false() 588.34/148.14 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(nil(), nil()) -> #true() 588.34/148.14 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.14 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.14 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.14 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.14 , #eq(#0(), #0()) -> #true() 588.34/148.14 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.14 , #eq(#0(), #s(@y)) -> #false() 588.34/148.14 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.14 , #eq(#neg(@x), #0()) -> #false() 588.34/148.14 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.14 , #eq(#s(@x), #0()) -> #false() 588.34/148.14 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.14 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.14 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.14 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.14 appendreverse(@as, ::(@a, @sofar)) 588.34/148.14 , appendreverse(@toreverse, @sofar) -> 588.34/148.14 appendreverse#1(@toreverse, @sofar) 588.34/148.14 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.14 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.14 , #and(#true(), #true()) -> #true() 588.34/148.14 , #and(#true(), #false()) -> #false() 588.34/148.14 , #and(#false(), #true()) -> #false() 588.34/148.14 , #and(#false(), #false()) -> #false() 588.34/148.14 , bfs#2(nil(), @x) -> leaf() 588.34/148.14 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.14 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.14 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.14 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.14 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.14 bfs(@ts, @futurequeue, @x) 588.34/148.14 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.14 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.14 588.34/148.14 We are left with following problem, upon which TcT provides the 588.34/148.14 certificate YES(O(1),O(n^1)). 588.34/148.14 588.34/148.14 Strict DPs: 588.34/148.14 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.14 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.14 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.14 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.14 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.14 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.14 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.14 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.14 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.14 , dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.14 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.14 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.14 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.14 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.14 , dodfs^#(@t, @x) -> c_10(dfs^#(::(@t, nil()), @x)) 588.34/148.14 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.14 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.14 , bfs2^#(@t, @x) -> 588.34/148.14 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.14 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.14 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.15 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.15 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.15 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.15 reverse^#(::(@t, @ts))) 588.34/148.15 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.15 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 c_18(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y)) 588.34/148.15 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.15 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.15 Weak Trs: 588.34/148.15 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.15 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 node(@y, @t1, @t2) 588.34/148.15 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.15 , #eq(leaf(), leaf()) -> #true() 588.34/148.15 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(leaf(), nil()) -> #false() 588.34/148.15 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.15 , #eq(#pos(@x), #0()) -> #false() 588.34/148.15 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.15 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(nil(), leaf()) -> #false() 588.34/148.15 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(nil(), nil()) -> #true() 588.34/148.15 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.15 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.15 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.15 , #eq(#0(), #0()) -> #true() 588.34/148.15 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.15 , #eq(#0(), #s(@y)) -> #false() 588.34/148.15 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.15 , #eq(#neg(@x), #0()) -> #false() 588.34/148.15 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.15 , #eq(#s(@x), #0()) -> #false() 588.34/148.15 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.15 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.15 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.15 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.15 appendreverse(@as, ::(@a, @sofar)) 588.34/148.15 , appendreverse(@toreverse, @sofar) -> 588.34/148.15 appendreverse#1(@toreverse, @sofar) 588.34/148.15 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.15 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.15 , #and(#true(), #true()) -> #true() 588.34/148.15 , #and(#true(), #false()) -> #false() 588.34/148.15 , #and(#false(), #true()) -> #false() 588.34/148.15 , #and(#false(), #false()) -> #false() 588.34/148.15 , bfs#2(nil(), @x) -> leaf() 588.34/148.15 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.15 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.15 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.15 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 bfs(@ts, @futurequeue, @x) 588.34/148.15 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.15 Obligation: 588.34/148.15 innermost runtime complexity 588.34/148.15 Answer: 588.34/148.15 YES(O(1),O(n^1)) 588.34/148.15 588.34/148.15 Consider the dependency graph 588.34/148.15 588.34/148.15 1: bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.15 -->_1 bfs^#(@queue, @futurequeue, @x) -> 588.34/148.15 c_2(bfs#1^#(@queue, @futurequeue, @x)) :2 588.34/148.15 588.34/148.15 2: bfs^#(@queue, @futurequeue, @x) -> 588.34/148.15 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.15 -->_1 bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) :15 588.34/148.15 -->_1 bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.15 c_14(bfs#2^#(@futurequeue, @x)) :14 588.34/148.15 588.34/148.15 3: reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.15 -->_1 appendreverse^#(@toreverse, @sofar) -> 588.34/148.15 c_4(appendreverse#1^#(@toreverse, @sofar)) :4 588.34/148.15 588.34/148.15 4: appendreverse^#(@toreverse, @sofar) -> 588.34/148.15 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.15 -->_1 appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.15 c_5(appendreverse^#(@as, ::(@a, @sofar))) :5 588.34/148.15 588.34/148.15 5: appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.15 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.15 -->_1 appendreverse^#(@toreverse, @sofar) -> 588.34/148.15 c_4(appendreverse#1^#(@toreverse, @sofar)) :4 588.34/148.15 588.34/148.15 6: dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.15 -->_1 dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.15 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) :8 588.34/148.15 -->_1 dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) :7 588.34/148.15 588.34/148.15 7: dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.15 -->_1 dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) :11 588.34/148.15 588.34/148.15 8: dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.15 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.15 -->_1 dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.15 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) :19 588.34/148.15 588.34/148.15 9: dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.15 -->_1 bfs^#(@queue, @futurequeue, @x) -> 588.34/148.15 c_2(bfs#1^#(@queue, @futurequeue, @x)) :2 588.34/148.15 588.34/148.15 10: dodfs^#(@t, @x) -> c_10(dfs^#(::(@t, nil()), @x)) 588.34/148.15 -->_1 dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) :11 588.34/148.15 588.34/148.15 11: dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.15 -->_1 dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) :6 588.34/148.15 588.34/148.15 12: bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.15 -->_1 dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) :9 588.34/148.15 588.34/148.15 13: bfs2^#(@t, @x) -> 588.34/148.15 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.15 -->_1 bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) :12 588.34/148.15 -->_2 dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) :9 588.34/148.15 588.34/148.15 14: bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.15 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.15 -->_1 bfs#2^#(::(@t, @ts), @x) -> 588.34/148.15 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.15 reverse^#(::(@t, @ts))) :16 588.34/148.15 588.34/148.15 15: bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.15 -->_1 bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.15 @futurequeue, 588.34/148.15 @t1, 588.34/148.15 @t2, 588.34/148.15 @ts, 588.34/148.15 @x, 588.34/148.15 @y)) :18 588.34/148.15 -->_1 bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 c_17(bfs^#(@ts, @futurequeue, @x)) :17 588.34/148.15 588.34/148.15 16: bfs#2^#(::(@t, @ts), @x) -> 588.34/148.15 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.15 reverse^#(::(@t, @ts))) 588.34/148.15 -->_2 reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) :3 588.34/148.15 -->_1 bfs^#(@queue, @futurequeue, @x) -> 588.34/148.15 c_2(bfs#1^#(@queue, @futurequeue, @x)) :2 588.34/148.15 588.34/148.15 17: bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.15 -->_1 bfs^#(@queue, @futurequeue, @x) -> 588.34/148.15 c_2(bfs#1^#(@queue, @futurequeue, @x)) :2 588.34/148.15 588.34/148.15 18: bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 c_18(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y)) 588.34/148.15 -->_1 bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) :1 588.34/148.15 588.34/148.15 19: dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.15 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) 588.34/148.15 -->_1 dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) :11 588.34/148.15 588.34/148.15 588.34/148.15 Following roots of the dependency graph are removed, as the 588.34/148.15 considered set of starting terms is closed under reduction with 588.34/148.15 respect to these rules (modulo compound contexts). 588.34/148.15 588.34/148.15 { dodfs^#(@t, @x) -> c_10(dfs^#(::(@t, nil()), @x)) } 588.34/148.15 588.34/148.15 588.34/148.15 We are left with following problem, upon which TcT provides the 588.34/148.15 certificate YES(O(1),O(n^1)). 588.34/148.15 588.34/148.15 Strict DPs: 588.34/148.15 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.15 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.15 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.15 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.15 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.15 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.15 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.15 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.15 , dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.15 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.15 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.15 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.15 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.15 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.15 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.15 , bfs2^#(@t, @x) -> 588.34/148.15 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.15 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.15 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.15 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.15 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.15 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.15 reverse^#(::(@t, @ts))) 588.34/148.15 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.15 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 c_18(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y)) 588.34/148.15 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.15 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.15 Weak Trs: 588.34/148.15 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.15 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 node(@y, @t1, @t2) 588.34/148.15 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.15 , #eq(leaf(), leaf()) -> #true() 588.34/148.15 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(leaf(), nil()) -> #false() 588.34/148.15 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.15 , #eq(#pos(@x), #0()) -> #false() 588.34/148.15 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.15 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(nil(), leaf()) -> #false() 588.34/148.15 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(nil(), nil()) -> #true() 588.34/148.15 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.15 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.15 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.15 , #eq(#0(), #0()) -> #true() 588.34/148.15 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.15 , #eq(#0(), #s(@y)) -> #false() 588.34/148.15 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.15 , #eq(#neg(@x), #0()) -> #false() 588.34/148.15 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.15 , #eq(#s(@x), #0()) -> #false() 588.34/148.15 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.15 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.15 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.15 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.15 appendreverse(@as, ::(@a, @sofar)) 588.34/148.15 , appendreverse(@toreverse, @sofar) -> 588.34/148.15 appendreverse#1(@toreverse, @sofar) 588.34/148.15 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.15 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.15 , #and(#true(), #true()) -> #true() 588.34/148.15 , #and(#true(), #false()) -> #false() 588.34/148.15 , #and(#false(), #true()) -> #false() 588.34/148.15 , #and(#false(), #false()) -> #false() 588.34/148.15 , bfs#2(nil(), @x) -> leaf() 588.34/148.15 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.15 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.15 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.15 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 bfs(@ts, @futurequeue, @x) 588.34/148.15 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.15 Obligation: 588.34/148.15 innermost runtime complexity 588.34/148.15 Answer: 588.34/148.15 YES(O(1),O(n^1)) 588.34/148.15 588.34/148.15 We analyse the complexity of following sub-problems (R) and (S). 588.34/148.15 Problem (S) is obtained from the input problem by shifting strict 588.34/148.15 rules from (R) into the weak component: 588.34/148.15 588.34/148.15 Problem (R): 588.34/148.15 ------------ 588.34/148.15 Strict DPs: 588.34/148.15 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.15 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.15 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.15 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.15 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.15 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.15 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.15 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.15 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.15 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.15 , bfs2^#(@t, @x) -> 588.34/148.15 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.15 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.15 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.15 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.15 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.15 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.15 reverse^#(::(@t, @ts))) 588.34/148.15 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.15 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.15 @futurequeue, 588.34/148.15 @t1, 588.34/148.15 @t2, 588.34/148.15 @ts, 588.34/148.15 @x, 588.34/148.15 @y)) } 588.34/148.15 Weak DPs: 588.34/148.15 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.15 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.15 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.15 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.15 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.15 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.15 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.15 Weak Trs: 588.34/148.15 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.15 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 node(@y, @t1, @t2) 588.34/148.15 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.15 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.15 , #eq(leaf(), leaf()) -> #true() 588.34/148.15 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(leaf(), nil()) -> #false() 588.34/148.15 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.15 , #eq(#pos(@x), #0()) -> #false() 588.34/148.15 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.15 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.15 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(nil(), leaf()) -> #false() 588.34/148.15 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(nil(), nil()) -> #true() 588.34/148.15 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.15 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.15 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.15 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.15 , #eq(#0(), #0()) -> #true() 588.34/148.15 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.15 , #eq(#0(), #s(@y)) -> #false() 588.34/148.15 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.15 , #eq(#neg(@x), #0()) -> #false() 588.34/148.15 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.15 , #eq(#s(@x), #0()) -> #false() 588.34/148.15 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.15 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.15 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.15 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.15 appendreverse(@as, ::(@a, @sofar)) 588.34/148.15 , appendreverse(@toreverse, @sofar) -> 588.34/148.15 appendreverse#1(@toreverse, @sofar) 588.34/148.15 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.15 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.15 , #and(#true(), #true()) -> #true() 588.34/148.15 , #and(#true(), #false()) -> #false() 588.34/148.15 , #and(#false(), #true()) -> #false() 588.34/148.15 , #and(#false(), #false()) -> #false() 588.34/148.15 , bfs#2(nil(), @x) -> leaf() 588.34/148.15 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.15 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.15 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.15 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.15 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.15 bfs(@ts, @futurequeue, @x) 588.34/148.15 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.15 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.15 StartTerms: basic terms 588.34/148.15 Strategy: innermost 588.34/148.15 588.34/148.15 Problem (S): 588.34/148.15 ------------ 588.34/148.15 Strict DPs: 588.34/148.15 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.16 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.16 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.16 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.16 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.16 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.16 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.16 Weak DPs: 588.34/148.16 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.16 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.16 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.16 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.16 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.16 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.16 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.16 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.16 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.16 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.16 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.16 , bfs2^#(@t, @x) -> 588.34/148.16 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.16 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.16 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.16 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.16 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.16 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.16 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.16 reverse^#(::(@t, @ts))) 588.34/148.16 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.16 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.16 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.16 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.16 @futurequeue, 588.34/148.16 @t1, 588.34/148.16 @t2, 588.34/148.16 @ts, 588.34/148.16 @x, 588.34/148.16 @y)) } 588.34/148.16 Weak Trs: 588.34/148.16 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.16 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.16 node(@y, @t1, @t2) 588.34/148.16 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.16 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.16 , #eq(leaf(), leaf()) -> #true() 588.34/148.16 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.16 , #eq(leaf(), nil()) -> #false() 588.34/148.16 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.16 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.16 , #eq(#pos(@x), #0()) -> #false() 588.34/148.16 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.16 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.16 , #eq(nil(), leaf()) -> #false() 588.34/148.16 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.16 , #eq(nil(), nil()) -> #true() 588.34/148.16 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.16 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.16 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.16 , #eq(#0(), #0()) -> #true() 588.34/148.16 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.16 , #eq(#0(), #s(@y)) -> #false() 588.34/148.16 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.16 , #eq(#neg(@x), #0()) -> #false() 588.34/148.16 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.16 , #eq(#s(@x), #0()) -> #false() 588.34/148.16 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.16 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.16 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.16 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.16 appendreverse(@as, ::(@a, @sofar)) 588.34/148.16 , appendreverse(@toreverse, @sofar) -> 588.34/148.16 appendreverse#1(@toreverse, @sofar) 588.34/148.16 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.16 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.16 , #and(#true(), #true()) -> #true() 588.34/148.16 , #and(#true(), #false()) -> #false() 588.34/148.16 , #and(#false(), #true()) -> #false() 588.34/148.16 , #and(#false(), #false()) -> #false() 588.34/148.16 , bfs#2(nil(), @x) -> leaf() 588.34/148.16 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.16 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.16 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.16 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.16 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.16 bfs(@ts, @futurequeue, @x) 588.34/148.16 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.16 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.16 StartTerms: basic terms 588.34/148.16 Strategy: innermost 588.34/148.16 588.34/148.16 Overall, the transformation results in the following sub-problem(s): 588.34/148.16 588.34/148.16 Generated new problems: 588.34/148.16 ----------------------- 588.34/148.16 R) Strict DPs: 588.34/148.16 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.16 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.16 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.16 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.16 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.16 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.16 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.16 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.16 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.16 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.16 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.16 , bfs2^#(@t, @x) -> 588.34/148.16 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.16 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.16 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.16 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.16 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.16 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.16 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.16 reverse^#(::(@t, @ts))) 588.34/148.16 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.16 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.16 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.16 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.16 @futurequeue, 588.34/148.16 @t1, 588.34/148.16 @t2, 588.34/148.16 @ts, 588.34/148.16 @x, 588.34/148.16 @y)) } 588.34/148.16 Weak DPs: 588.34/148.16 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.16 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.16 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.16 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.16 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.16 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.16 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.16 Weak Trs: 588.34/148.16 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.16 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.16 node(@y, @t1, @t2) 588.34/148.16 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.16 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.16 , #eq(leaf(), leaf()) -> #true() 588.34/148.16 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.16 , #eq(leaf(), nil()) -> #false() 588.34/148.16 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.16 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.16 , #eq(#pos(@x), #0()) -> #false() 588.34/148.16 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.16 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.16 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.16 , #eq(nil(), leaf()) -> #false() 588.34/148.16 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.16 , #eq(nil(), nil()) -> #true() 588.34/148.16 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.16 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.16 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.16 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.16 , #eq(#0(), #0()) -> #true() 588.34/148.16 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.16 , #eq(#0(), #s(@y)) -> #false() 588.34/148.16 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.16 , #eq(#neg(@x), #0()) -> #false() 588.34/148.16 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.16 , #eq(#s(@x), #0()) -> #false() 588.34/148.16 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.16 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.16 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.16 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.16 appendreverse(@as, ::(@a, @sofar)) 588.34/148.16 , appendreverse(@toreverse, @sofar) -> 588.34/148.16 appendreverse#1(@toreverse, @sofar) 588.34/148.16 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.17 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.17 , #and(#true(), #true()) -> #true() 588.34/148.17 , #and(#true(), #false()) -> #false() 588.34/148.17 , #and(#false(), #true()) -> #false() 588.34/148.17 , #and(#false(), #false()) -> #false() 588.34/148.17 , bfs#2(nil(), @x) -> leaf() 588.34/148.17 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.17 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.17 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.17 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.17 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.17 bfs(@ts, @futurequeue, @x) 588.34/148.17 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.17 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.17 StartTerms: basic terms 588.34/148.17 Strategy: innermost 588.34/148.17 588.34/148.17 This problem was proven YES(O(1),O(n^1)). 588.34/148.17 588.34/148.17 S) Strict DPs: 588.34/148.17 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.17 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.17 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.17 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.17 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.17 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.17 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.17 Weak DPs: 588.34/148.17 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.17 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.17 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.17 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.17 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.17 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.17 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.17 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.17 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.17 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.17 , bfs2^#(@t, @x) -> 588.34/148.17 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.17 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.17 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.17 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.17 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.17 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.17 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.17 reverse^#(::(@t, @ts))) 588.34/148.17 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.17 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.17 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.17 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.17 @futurequeue, 588.34/148.17 @t1, 588.34/148.17 @t2, 588.34/148.17 @ts, 588.34/148.17 @x, 588.34/148.17 @y)) } 588.34/148.17 Weak Trs: 588.34/148.17 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.17 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 node(@y, @t1, @t2) 588.34/148.17 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.17 , #eq(leaf(), leaf()) -> #true() 588.34/148.17 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(leaf(), nil()) -> #false() 588.34/148.17 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.17 , #eq(#pos(@x), #0()) -> #false() 588.34/148.17 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.17 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(nil(), leaf()) -> #false() 588.34/148.17 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(nil(), nil()) -> #true() 588.34/148.17 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.17 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.17 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.17 , #eq(#0(), #0()) -> #true() 588.34/148.17 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.17 , #eq(#0(), #s(@y)) -> #false() 588.34/148.17 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.17 , #eq(#neg(@x), #0()) -> #false() 588.34/148.17 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.17 , #eq(#s(@x), #0()) -> #false() 588.34/148.17 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.17 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.17 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.17 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.17 appendreverse(@as, ::(@a, @sofar)) 588.34/148.17 , appendreverse(@toreverse, @sofar) -> 588.34/148.17 appendreverse#1(@toreverse, @sofar) 588.34/148.17 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.17 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.17 , #and(#true(), #true()) -> #true() 588.34/148.17 , #and(#true(), #false()) -> #false() 588.34/148.17 , #and(#false(), #true()) -> #false() 588.34/148.17 , #and(#false(), #false()) -> #false() 588.34/148.17 , bfs#2(nil(), @x) -> leaf() 588.34/148.17 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.17 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.17 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.17 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.17 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.17 bfs(@ts, @futurequeue, @x) 588.34/148.17 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.17 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.17 StartTerms: basic terms 588.34/148.17 Strategy: innermost 588.34/148.17 588.34/148.17 This problem was proven YES(O(1),O(n^1)). 588.34/148.17 588.34/148.17 588.34/148.17 Proofs for generated problems: 588.34/148.17 ------------------------------ 588.34/148.17 R) We are left with following problem, upon which TcT provides the 588.34/148.17 certificate YES(O(1),O(n^1)). 588.34/148.17 588.34/148.17 Strict DPs: 588.34/148.17 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.17 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.17 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.17 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.17 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.17 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.17 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.17 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.17 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.17 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.17 , bfs2^#(@t, @x) -> 588.34/148.17 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.17 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.17 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.17 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.17 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.17 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.17 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.17 reverse^#(::(@t, @ts))) 588.34/148.17 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.17 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.17 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.17 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.17 @futurequeue, 588.34/148.17 @t1, 588.34/148.17 @t2, 588.34/148.17 @ts, 588.34/148.17 @x, 588.34/148.17 @y)) } 588.34/148.17 Weak DPs: 588.34/148.17 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.17 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.17 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.17 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.17 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.17 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.17 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.17 Weak Trs: 588.34/148.17 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.17 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 node(@y, @t1, @t2) 588.34/148.17 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.17 , #eq(leaf(), leaf()) -> #true() 588.34/148.17 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(leaf(), nil()) -> #false() 588.34/148.17 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.17 , #eq(#pos(@x), #0()) -> #false() 588.34/148.17 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.17 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(nil(), leaf()) -> #false() 588.34/148.17 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(nil(), nil()) -> #true() 588.34/148.17 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.17 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.17 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.17 , #eq(#0(), #0()) -> #true() 588.34/148.17 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.17 , #eq(#0(), #s(@y)) -> #false() 588.34/148.17 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.17 , #eq(#neg(@x), #0()) -> #false() 588.34/148.17 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.17 , #eq(#s(@x), #0()) -> #false() 588.34/148.17 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.17 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.17 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.17 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.17 appendreverse(@as, ::(@a, @sofar)) 588.34/148.17 , appendreverse(@toreverse, @sofar) -> 588.34/148.17 appendreverse#1(@toreverse, @sofar) 588.34/148.17 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.17 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.17 , #and(#true(), #true()) -> #true() 588.34/148.17 , #and(#true(), #false()) -> #false() 588.34/148.17 , #and(#false(), #true()) -> #false() 588.34/148.17 , #and(#false(), #false()) -> #false() 588.34/148.17 , bfs#2(nil(), @x) -> leaf() 588.34/148.17 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.17 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.17 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.17 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.17 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.17 bfs(@ts, @futurequeue, @x) 588.34/148.17 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.17 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.17 Obligation: 588.34/148.17 innermost runtime complexity 588.34/148.17 Answer: 588.34/148.17 YES(O(1),O(n^1)) 588.34/148.17 588.34/148.17 The following weak DPs constitute a sub-graph of the DG that is 588.34/148.17 closed under successors. The DPs are removed. 588.34/148.17 588.34/148.17 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.34/148.17 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.34/148.17 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.34/148.17 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.34/148.17 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.34/148.17 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.34/148.17 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.34/148.17 588.34/148.17 We are left with following problem, upon which TcT provides the 588.34/148.17 certificate YES(O(1),O(n^1)). 588.34/148.17 588.34/148.17 Strict DPs: 588.34/148.17 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.17 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.17 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.17 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.17 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.17 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.17 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.17 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.17 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.17 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.17 , bfs2^#(@t, @x) -> 588.34/148.17 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.17 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.17 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.17 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.17 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.17 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.17 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.17 reverse^#(::(@t, @ts))) 588.34/148.17 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.17 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.17 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.17 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.17 @futurequeue, 588.34/148.17 @t1, 588.34/148.17 @t2, 588.34/148.17 @ts, 588.34/148.17 @x, 588.34/148.17 @y)) } 588.34/148.17 Weak Trs: 588.34/148.17 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.17 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 node(@y, @t1, @t2) 588.34/148.17 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.17 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.17 , #eq(leaf(), leaf()) -> #true() 588.34/148.17 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(leaf(), nil()) -> #false() 588.34/148.17 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.17 , #eq(#pos(@x), #0()) -> #false() 588.34/148.17 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.17 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.17 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(nil(), leaf()) -> #false() 588.34/148.17 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(nil(), nil()) -> #true() 588.34/148.17 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.17 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.17 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.17 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.17 , #eq(#0(), #0()) -> #true() 588.34/148.17 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.17 , #eq(#0(), #s(@y)) -> #false() 588.34/148.17 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.17 , #eq(#neg(@x), #0()) -> #false() 588.34/148.17 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.17 , #eq(#s(@x), #0()) -> #false() 588.34/148.17 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.17 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.17 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.17 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.17 appendreverse(@as, ::(@a, @sofar)) 588.34/148.17 , appendreverse(@toreverse, @sofar) -> 588.34/148.17 appendreverse#1(@toreverse, @sofar) 588.34/148.17 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.17 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.17 , #and(#true(), #true()) -> #true() 588.34/148.17 , #and(#true(), #false()) -> #false() 588.34/148.17 , #and(#false(), #true()) -> #false() 588.34/148.17 , #and(#false(), #false()) -> #false() 588.34/148.17 , bfs#2(nil(), @x) -> leaf() 588.34/148.17 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.17 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.17 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.17 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.17 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.17 bfs(@ts, @futurequeue, @x) 588.34/148.17 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.17 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.17 Obligation: 588.34/148.17 innermost runtime complexity 588.34/148.17 Answer: 588.34/148.17 YES(O(1),O(n^1)) 588.34/148.17 588.34/148.17 We use the processor 'matrix interpretation of dimension 2' to 588.34/148.17 orient following rules strictly. 588.34/148.17 588.34/148.17 DPs: 588.34/148.17 { 5: appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.17 c_5(appendreverse^#(@as, ::(@a, @sofar))) } 588.34/148.17 Trs: 588.34/148.17 { appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.17 appendreverse(@as, ::(@a, @sofar)) } 588.34/148.17 588.34/148.17 Sub-proof: 588.34/148.17 ---------- 588.34/148.17 The following argument positions are usable: 588.34/148.17 Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, 588.34/148.17 Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_9) = {1}, 588.34/148.17 Uargs(c_12) = {1}, Uargs(c_13) = {1, 2}, Uargs(c_14) = {1}, 588.34/148.17 Uargs(c_15) = {1}, Uargs(c_16) = {1, 2}, Uargs(c_17) = {1}, 588.34/148.17 Uargs(c_18) = {1} 588.34/148.17 588.34/148.17 TcT has computed the following constructor-based matrix 588.34/148.17 interpretation satisfying not(EDA) and not(IDA(1)). 588.34/148.17 588.34/148.17 [#equal](x1, x2) = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [bfs#4](x1, x2, x3, x4, x5, x6, x7) = [0 0] x2 + [0 0] x3 + [0 588.34/148.17 0] x4 + [0 0] x5 + [0] 588.34/148.17 [0 1] [0 1] [0 588.34/148.17 1] [0 1] [4] 588.34/148.17 588.34/148.17 [#eq](x1, x2) = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [reverse](x1) = [4 0] x1 + [0] 588.34/148.17 [0 1] [0] 588.34/148.17 588.34/148.17 [appendreverse#1](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 588.34/148.17 [0 1] [0 1] [0] 588.34/148.17 588.34/148.17 [appendreverse](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 588.34/148.17 [0 1] [0 1] [0] 588.34/148.17 588.34/148.17 [#true] = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [leaf] = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [dobfs](x1, x2) = [4 4] x1 + [0 4] x2 + [0] 588.34/148.17 [0 1] [0 0] [0] 588.34/148.17 588.34/148.17 [#pos](x1) = [1 0] x1 + [0] 588.34/148.17 [0 1] [0] 588.34/148.17 588.34/148.17 [node](x1, x2, x3) = [0 0] x2 + [0 0] x3 + [0] 588.34/148.17 [0 1] [0 1] [4] 588.34/148.17 588.34/148.17 [bfs](x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0] 588.34/148.17 [0 1] [0 1] [0] 588.34/148.17 588.34/148.17 [#and](x1, x2) = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [nil] = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [bfs#2](x1, x2) = [0 0] x1 + [0] 588.34/148.17 [0 1] [0] 588.34/148.17 588.34/148.17 [#false] = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [::](x1, x2) = [0 0] x1 + [1 0] x2 + [2] 588.34/148.17 [0 1] [0 1] [0] 588.34/148.17 588.34/148.17 [bfs#1](x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0] 588.34/148.17 [0 1] [0 1] [0] 588.34/148.17 588.34/148.17 [bfs#3](x1, x2, x3, x4) = [0 0] x1 + [0 0] x2 + [0 588.34/148.17 0] x3 + [0] 588.34/148.17 [0 1] [0 1] [0 588.34/148.17 1] [0] 588.34/148.17 588.34/148.17 [#0] = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [#neg](x1) = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [#s](x1) = [0] 588.34/148.17 [0] 588.34/148.17 588.34/148.17 [bfs#4^#](x1, x2, x3, x4, x5, x6, x7) = [1 1] x2 + [0 1] x3 + [0 588.34/148.17 1] x4 + [0 1] x5 + [4] 588.34/148.17 [4 4] [0 0] [4 588.34/148.17 0] [4 0] [0] 588.34/148.17 588.34/148.17 [bfs^#](x1, x2, x3) = [0 1] x1 + [1 1] x2 + [0] 588.34/148.17 [0 0] [0 0] [0] 588.34/148.17 588.34/148.17 [reverse^#](x1) = [1 0] x1 + [0] 588.34/148.17 [0 0] [0] 588.34/148.17 588.34/148.17 [appendreverse^#](x1, x2) = [1 0] x1 + [0 0] x2 + [0] 588.34/148.17 [4 0] [4 0] [0] 588.34/148.17 588.34/148.17 [appendreverse#1^#](x1, x2) = [1 0] x1 + [0] 588.34/148.17 [0 0] [4] 588.34/148.17 588.34/148.17 [dobfs^#](x1, x2) = [0 1] x1 + [0 0] x2 + [0] 588.34/148.17 [0 4] [4 4] [0] 588.34/148.17 588.34/148.17 [bfs2#1^#](x1, x2) = [0 1] x1 + [0 0] x2 + [0] 588.34/148.17 [0 0] [4 0] [0] 588.34/148.17 588.34/148.17 [bfs2^#](x1, x2) = [7 7] x1 + [7 7] x2 + [7] 588.34/148.17 [7 7] [7 7] [7] 588.34/148.18 588.34/148.18 [bfs#1^#](x1, x2, x3) = [0 1] x1 + [1 1] x2 + [0 588.34/148.18 0] x3 + [0] 588.34/148.18 [0 0] [0 4] [4 588.34/148.18 0] [4] 588.34/148.18 588.34/148.18 [bfs#2^#](x1, x2) = [1 1] x1 + [0 0] x2 + [0] 588.34/148.18 [0 0] [0 4] [4] 588.34/148.18 588.34/148.18 [bfs#3^#](x1, x2, x3, x4) = [0 1] x1 + [1 1] x2 + [0 588.34/148.18 1] x3 + [0] 588.34/148.18 [0 0] [4 0] [4 588.34/148.18 4] [0] 588.34/148.18 588.34/148.18 [c_1](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 [c_2](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 [c_3](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 [c_4](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 [c_5](x1) = [1 0] x1 + [1] 588.34/148.18 [0 0] [3] 588.34/148.18 588.34/148.18 [c_9](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 [c_12](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 [c_13](x1, x2) = [4 0] x1 + [2 0] x2 + [7] 588.34/148.18 [0 0] [0 0] [7] 588.34/148.18 588.34/148.18 [c_14](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [3] 588.34/148.18 588.34/148.18 [c_15](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [3] 588.34/148.18 588.34/148.18 [c_16](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 588.34/148.18 [0 0] [0 0] [3] 588.34/148.18 588.34/148.18 [c_17](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 [c_18](x1) = [1 0] x1 + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 588.34/148.18 The order satisfies the following ordering constraints: 588.34/148.18 588.34/148.18 [#equal(@x, @y)] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#eq(@x, @y)] 588.34/148.18 588.34/148.18 [bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y)] = [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.18 [0 1] [0 1] [0 1] [0 1] [4] 588.34/148.18 >= [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.18 [0 1] [0 1] [4] 588.34/148.18 = [node(@y, @t1, @t2)] 588.34/148.18 588.34/148.18 [bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y)] = [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.18 [0 1] [0 1] [0 1] [0 1] [4] 588.34/148.18 >= [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.18 [0 1] [0 1] [0 1] [0 1] [0] 588.34/148.18 = [bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)] 588.34/148.18 588.34/148.18 [#eq(leaf(), leaf())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#true()] 588.34/148.18 588.34/148.18 [#eq(leaf(), node(@y_1, @y_2, @y_3))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(leaf(), nil())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(leaf(), ::(@y_1, @y_2))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#pos(@x), #pos(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#eq(@x, @y)] 588.34/148.18 588.34/148.18 [#eq(#pos(@x), #0())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#pos(@x), #neg(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(node(@x_1, @x_2, @x_3), leaf())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3)))] 588.34/148.18 588.34/148.18 [#eq(node(@x_1, @x_2, @x_3), nil())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(nil(), leaf())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(nil(), node(@y_1, @y_2, @y_3))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(nil(), nil())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#true()] 588.34/148.18 588.34/148.18 [#eq(nil(), ::(@y_1, @y_2))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(::(@x_1, @x_2), leaf())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(::(@x_1, @x_2), nil())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))] 588.34/148.18 588.34/148.18 [#eq(#0(), #pos(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#0(), #0())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#true()] 588.34/148.18 588.34/148.18 [#eq(#0(), #neg(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#0(), #s(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#neg(@x), #pos(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#neg(@x), #0())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#neg(@x), #neg(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#eq(@x, @y)] 588.34/148.18 588.34/148.18 [#eq(#s(@x), #0())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#eq(#s(@x), #s(@y))] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#eq(@x, @y)] 588.34/148.18 588.34/148.18 [reverse(@xs)] = [4 0] @xs + [0] 588.34/148.18 [0 1] [0] 588.34/148.18 >= [2 0] @xs + [0] 588.34/148.18 [0 1] [0] 588.34/148.18 = [appendreverse(@xs, nil())] 588.34/148.18 588.34/148.18 [appendreverse#1(nil(), @sofar)] = [1 0] @sofar + [0] 588.34/148.18 [0 1] [0] 588.34/148.18 >= [1 0] @sofar + [0] 588.34/148.18 [0 1] [0] 588.34/148.18 = [@sofar] 588.34/148.18 588.34/148.18 [appendreverse#1(::(@a, @as), @sofar)] = [1 0] @sofar + [0 0] @a + [2 0] @as + [4] 588.34/148.18 [0 1] [0 1] [0 1] [0] 588.34/148.18 > [1 0] @sofar + [0 0] @a + [2 0] @as + [2] 588.34/148.18 [0 1] [0 1] [0 1] [0] 588.34/148.18 = [appendreverse(@as, ::(@a, @sofar))] 588.34/148.18 588.34/148.18 [appendreverse(@toreverse, @sofar)] = [2 0] @toreverse + [1 0] @sofar + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 >= [2 0] @toreverse + [1 0] @sofar + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 = [appendreverse#1(@toreverse, @sofar)] 588.34/148.18 588.34/148.18 [dobfs(@t, @x)] = [0 4] @x + [4 4] @t + [0] 588.34/148.18 [0 0] [0 1] [0] 588.34/148.18 >= [0 0] @t + [0] 588.34/148.18 [0 1] [0] 588.34/148.18 = [bfs(::(@t, nil()), nil(), @x)] 588.34/148.18 588.34/148.18 [bfs(@queue, @futurequeue, @x)] = [0 0] @queue + [0 0] @futurequeue + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 >= [0 0] @queue + [0 0] @futurequeue + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 = [bfs#1(@queue, @futurequeue, @x)] 588.34/148.18 588.34/148.18 [#and(#true(), #true())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#true()] 588.34/148.18 588.34/148.18 [#and(#true(), #false())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#and(#false(), #true())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [#and(#false(), #false())] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [#false()] 588.34/148.18 588.34/148.18 [bfs#2(nil(), @x)] = [0] 588.34/148.18 [0] 588.34/148.18 >= [0] 588.34/148.18 [0] 588.34/148.18 = [leaf()] 588.34/148.18 588.34/148.18 [bfs#2(::(@t, @ts), @x)] = [0 0] @t + [0 0] @ts + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 >= [0 0] @t + [0 0] @ts + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 = [bfs(reverse(::(@t, @ts)), nil(), @x)] 588.34/148.18 588.34/148.18 [bfs#1(nil(), @futurequeue, @x)] = [0 0] @futurequeue + [0] 588.34/148.18 [0 1] [0] 588.34/148.18 >= [0 0] @futurequeue + [0] 588.34/148.18 [0 1] [0] 588.34/148.18 = [bfs#2(@futurequeue, @x)] 588.34/148.18 588.34/148.18 [bfs#1(::(@t, @ts), @futurequeue, @x)] = [0 0] @futurequeue + [0 0] @t + [0 0] @ts + [0] 588.34/148.18 [0 1] [0 1] [0 1] [0] 588.34/148.18 >= [0 0] @futurequeue + [0 0] @t + [0 0] @ts + [0] 588.34/148.18 [0 1] [0 1] [0 1] [0] 588.34/148.18 = [bfs#3(@t, @futurequeue, @ts, @x)] 588.34/148.18 588.34/148.18 [bfs#3(leaf(), @futurequeue, @ts, @x)] = [0 0] @futurequeue + [0 0] @ts + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 >= [0 0] @futurequeue + [0 0] @ts + [0] 588.34/148.18 [0 1] [0 1] [0] 588.34/148.18 = [bfs(@ts, @futurequeue, @x)] 588.34/148.18 588.34/148.18 [bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x)] = [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.18 [0 1] [0 1] [0 1] [0 1] [4] 588.34/148.18 >= [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.18 [0 1] [0 1] [0 1] [0 1] [4] 588.34/148.18 = [bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y)] 588.34/148.18 588.34/148.18 [bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y)] = [1 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 1] @t2 + [4] 588.34/148.18 [4 4] [4 0] [0 0] [4 0] [0] 588.34/148.18 >= [1 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 1] @t2 + [4] 588.34/148.18 [0 0] [0 0] [0 0] [0 0] [0] 588.34/148.18 = [c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x))] 588.34/148.18 588.34/148.18 [bfs^#(@queue, @futurequeue, @x)] = [0 1] @queue + [1 1] @futurequeue + [0] 588.34/148.18 [0 0] [0 0] [0] 588.34/148.18 >= [0 1] @queue + [1 1] @futurequeue + [0] 588.34/148.18 [0 0] [0 0] [0] 588.34/148.18 = [c_2(bfs#1^#(@queue, @futurequeue, @x))] 588.34/148.18 588.34/148.18 [reverse^#(@xs)] = [1 0] @xs + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 >= [1 0] @xs + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 = [c_3(appendreverse^#(@xs, nil()))] 588.34/148.18 588.34/148.18 [appendreverse^#(@toreverse, @sofar)] = [1 0] @toreverse + [0 0] @sofar + [0] 588.34/148.18 [4 0] [4 0] [0] 588.34/148.18 >= [1 0] @toreverse + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 = [c_4(appendreverse#1^#(@toreverse, @sofar))] 588.34/148.18 588.34/148.18 [appendreverse#1^#(::(@a, @as), @sofar)] = [1 0] @as + [2] 588.34/148.18 [0 0] [4] 588.34/148.18 > [1 0] @as + [1] 588.34/148.18 [0 0] [3] 588.34/148.18 = [c_5(appendreverse^#(@as, ::(@a, @sofar)))] 588.34/148.18 588.34/148.18 [dobfs^#(@t, @x)] = [0 0] @x + [0 1] @t + [0] 588.34/148.18 [4 4] [0 4] [0] 588.34/148.18 >= [0 1] @t + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 = [c_9(bfs^#(::(@t, nil()), nil(), @x))] 588.34/148.18 588.34/148.18 [bfs2#1^#(@t', @x)] = [0 0] @x + [0 1] @t' + [0] 588.34/148.18 [4 0] [0 0] [0] 588.34/148.18 >= [0 1] @t' + [0] 588.34/148.18 [0 0] [0] 588.34/148.18 = [c_12(dobfs^#(@t', @x))] 588.34/148.18 588.34/148.18 [bfs2^#(@t, @x)] = [7 7] @x + [7 7] @t + [7] 588.34/148.18 [7 7] [7 7] [7] 588.34/148.18 >= [0 6] @t + [7] 588.34/148.18 [0 0] [7] 588.34/148.18 = [c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x))] 588.34/148.18 588.34/148.18 [bfs#1^#(nil(), @futurequeue, @x)] = [0 0] @x + [1 1] @futurequeue + [0] 588.34/148.18 [4 0] [0 4] [4] 588.34/148.18 >= [1 1] @futurequeue + [0] 588.34/148.18 [0 0] [3] 588.34/148.19 = [c_14(bfs#2^#(@futurequeue, @x))] 588.34/148.19 588.34/148.19 [bfs#1^#(::(@t, @ts), @futurequeue, @x)] = [0 0] @x + [1 1] @futurequeue + [0 1] @t + [0 1] @ts + [0] 588.34/148.19 [4 0] [0 4] [0 0] [0 0] [4] 588.34/148.19 >= [1 1] @futurequeue + [0 1] @t + [0 1] @ts + [0] 588.34/148.19 [0 0] [0 0] [0 0] [3] 588.34/148.19 = [c_15(bfs#3^#(@t, @futurequeue, @ts, @x))] 588.34/148.19 588.34/148.19 [bfs#2^#(::(@t, @ts), @x)] = [0 0] @x + [0 1] @t + [1 1] @ts + [2] 588.34/148.19 [0 4] [0 0] [0 0] [4] 588.34/148.19 >= [0 1] @t + [1 1] @ts + [2] 588.34/148.19 [0 0] [0 0] [3] 588.34/148.19 = [c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.19 reverse^#(::(@t, @ts)))] 588.34/148.19 588.34/148.19 [bfs#3^#(leaf(), @futurequeue, @ts, @x)] = [1 1] @futurequeue + [0 1] @ts + [0] 588.34/148.19 [4 0] [4 4] [0] 588.34/148.19 >= [1 1] @futurequeue + [0 1] @ts + [0] 588.34/148.19 [0 0] [0 0] [0] 588.34/148.19 = [c_17(bfs^#(@ts, @futurequeue, @x))] 588.34/148.19 588.34/148.19 [bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x)] = [1 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 1] @t2 + [4] 588.34/148.19 [4 0] [4 4] [0 0] [0 0] [0] 588.34/148.19 >= [1 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 1] @t2 + [4] 588.34/148.19 [0 0] [0 0] [0 0] [0 0] [0] 588.34/148.19 = [c_18(bfs#4^#(#equal(@x, @y), 588.34/148.19 @futurequeue, 588.34/148.19 @t1, 588.34/148.19 @t2, 588.34/148.19 @ts, 588.34/148.19 @x, 588.34/148.19 @y))] 588.34/148.19 588.34/148.19 588.34/148.19 We return to the main proof. Consider the set of all dependency 588.34/148.19 pairs 588.34/148.19 588.34/148.19 : 588.34/148.19 { 1: bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.19 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.19 , 2: bfs^#(@queue, @futurequeue, @x) -> 588.34/148.19 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.19 , 3: reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.19 , 4: appendreverse^#(@toreverse, @sofar) -> 588.34/148.19 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.19 , 5: appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.19 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.19 , 6: dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.19 , 7: bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.19 , 8: bfs2^#(@t, @x) -> 588.34/148.19 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.34/148.19 , 9: bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.19 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.19 , 10: bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.19 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.19 , 11: bfs#2^#(::(@t, @ts), @x) -> 588.34/148.19 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.19 reverse^#(::(@t, @ts))) 588.34/148.19 , 12: bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.19 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.19 , 13: bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.19 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.19 @futurequeue, 588.34/148.19 @t1, 588.34/148.19 @t2, 588.34/148.19 @ts, 588.34/148.19 @x, 588.34/148.19 @y)) } 588.34/148.19 588.34/148.19 Processor 'matrix interpretation of dimension 2' induces the 588.34/148.19 complexity certificate YES(?,O(n^1)) on application of dependency 588.34/148.19 pairs {5}. These cover all (indirect) predecessors of dependency 588.34/148.19 pairs {5,6,7,8}, their number of application is equally bounded. 588.34/148.19 The dependency pairs are shifted into the weak component. 588.34/148.19 588.34/148.19 We are left with following problem, upon which TcT provides the 588.34/148.19 certificate YES(O(1),O(n^1)). 588.34/148.19 588.34/148.19 Strict DPs: 588.34/148.19 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.19 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.34/148.19 , bfs^#(@queue, @futurequeue, @x) -> 588.34/148.19 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.19 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.34/148.19 , appendreverse^#(@toreverse, @sofar) -> 588.34/148.19 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.34/148.19 , bfs#1^#(nil(), @futurequeue, @x) -> 588.34/148.19 c_14(bfs#2^#(@futurequeue, @x)) 588.34/148.19 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.34/148.19 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.34/148.19 , bfs#2^#(::(@t, @ts), @x) -> 588.34/148.19 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.34/148.19 reverse^#(::(@t, @ts))) 588.34/148.19 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.34/148.19 c_17(bfs^#(@ts, @futurequeue, @x)) 588.34/148.19 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.19 c_18(bfs#4^#(#equal(@x, @y), 588.34/148.19 @futurequeue, 588.34/148.19 @t1, 588.34/148.19 @t2, 588.34/148.19 @ts, 588.34/148.19 @x, 588.34/148.19 @y)) } 588.34/148.19 Weak DPs: 588.34/148.19 { appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.19 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.34/148.19 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.34/148.19 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.34/148.19 , bfs2^#(@t, @x) -> 588.34/148.19 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) } 588.34/148.19 Weak Trs: 588.34/148.19 { #equal(@x, @y) -> #eq(@x, @y) 588.34/148.19 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.19 node(@y, @t1, @t2) 588.34/148.19 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.34/148.19 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.34/148.19 , #eq(leaf(), leaf()) -> #true() 588.34/148.19 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.19 , #eq(leaf(), nil()) -> #false() 588.34/148.19 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.34/148.19 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.34/148.19 , #eq(#pos(@x), #0()) -> #false() 588.34/148.19 , #eq(#pos(@x), #neg(@y)) -> #false() 588.34/148.19 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.34/148.19 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.34/148.19 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.34/148.19 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.34/148.19 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.34/148.19 , #eq(nil(), leaf()) -> #false() 588.34/148.19 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.19 , #eq(nil(), nil()) -> #true() 588.34/148.19 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.34/148.19 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.34/148.19 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.34/148.19 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.34/148.19 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.34/148.19 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.34/148.19 , #eq(#0(), #pos(@y)) -> #false() 588.34/148.19 , #eq(#0(), #0()) -> #true() 588.34/148.19 , #eq(#0(), #neg(@y)) -> #false() 588.34/148.19 , #eq(#0(), #s(@y)) -> #false() 588.34/148.19 , #eq(#neg(@x), #pos(@y)) -> #false() 588.34/148.19 , #eq(#neg(@x), #0()) -> #false() 588.34/148.19 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.34/148.19 , #eq(#s(@x), #0()) -> #false() 588.34/148.19 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.34/148.19 , reverse(@xs) -> appendreverse(@xs, nil()) 588.34/148.19 , appendreverse#1(nil(), @sofar) -> @sofar 588.34/148.19 , appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.19 appendreverse(@as, ::(@a, @sofar)) 588.34/148.19 , appendreverse(@toreverse, @sofar) -> 588.34/148.19 appendreverse#1(@toreverse, @sofar) 588.34/148.19 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.34/148.19 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.34/148.19 , #and(#true(), #true()) -> #true() 588.34/148.19 , #and(#true(), #false()) -> #false() 588.34/148.19 , #and(#false(), #true()) -> #false() 588.34/148.19 , #and(#false(), #false()) -> #false() 588.34/148.19 , bfs#2(nil(), @x) -> leaf() 588.34/148.19 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.34/148.19 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.34/148.19 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.34/148.19 bfs#3(@t, @futurequeue, @ts, @x) 588.34/148.19 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.34/148.19 bfs(@ts, @futurequeue, @x) 588.34/148.19 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.34/148.19 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.34/148.19 Obligation: 588.34/148.19 innermost runtime complexity 588.34/148.19 Answer: 588.34/148.19 YES(O(1),O(n^1)) 588.34/148.19 588.34/148.19 We use the processor 'matrix interpretation of dimension 2' to 588.34/148.19 orient following rules strictly. 588.34/148.19 588.34/148.19 DPs: 588.34/148.19 { 2: bfs^#(@queue, @futurequeue, @x) -> 588.34/148.19 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.34/148.19 , 10: appendreverse#1^#(::(@a, @as), @sofar) -> 588.34/148.19 c_5(appendreverse^#(@as, ::(@a, @sofar))) } 588.34/148.19 Trs: 588.34/148.19 { appendreverse#1(::(@a, @as), @sofar) -> 588.34/148.19 appendreverse(@as, ::(@a, @sofar)) } 588.34/148.19 588.34/148.19 Sub-proof: 588.34/148.19 ---------- 588.34/148.19 The following argument positions are usable: 588.34/148.19 Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, 588.34/148.19 Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_9) = {1}, 588.34/148.19 Uargs(c_12) = {1}, Uargs(c_13) = {1, 2}, Uargs(c_14) = {1}, 588.34/148.19 Uargs(c_15) = {1}, Uargs(c_16) = {1, 2}, Uargs(c_17) = {1}, 588.34/148.19 Uargs(c_18) = {1} 588.34/148.19 588.34/148.19 TcT has computed the following constructor-based matrix 588.34/148.19 interpretation satisfying not(EDA) and not(IDA(1)). 588.34/148.19 588.34/148.19 [#equal](x1, x2) = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [bfs#4](x1, x2, x3, x4, x5, x6, x7) = [0 0] x2 + [0 0] x3 + [0 588.34/148.19 0] x4 + [0 0] x5 + [0] 588.34/148.19 [0 2] [0 2] [0 588.34/148.19 2] [0 2] [5] 588.34/148.19 588.34/148.19 [#eq](x1, x2) = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [reverse](x1) = [4 0] x1 + [0] 588.34/148.19 [0 1] [0] 588.34/148.19 588.34/148.19 [appendreverse#1](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 588.34/148.19 [0 1] [0 1] [0] 588.34/148.19 588.34/148.19 [appendreverse](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 588.34/148.19 [0 1] [0 1] [0] 588.34/148.19 588.34/148.19 [#true] = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [leaf] = [0] 588.34/148.19 [1] 588.34/148.19 588.34/148.19 [dobfs](x1, x2) = [4 0] x1 + [4 0] x2 + [0] 588.34/148.19 [0 2] [0 0] [2] 588.34/148.19 588.34/148.19 [#pos](x1) = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [node](x1, x2, x3) = [0 0] x2 + [0 0] x3 + [0] 588.34/148.19 [0 1] [0 1] [5] 588.34/148.19 588.34/148.19 [bfs](x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0] 588.34/148.19 [0 2] [0 2] [2] 588.34/148.19 588.34/148.19 [#and](x1, x2) = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [nil] = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [bfs#2](x1, x2) = [0 0] x1 + [0] 588.34/148.19 [0 2] [2] 588.34/148.19 588.34/148.19 [#false] = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [::](x1, x2) = [0 0] x1 + [1 0] x2 + [1] 588.34/148.19 [0 1] [0 1] [0] 588.34/148.19 588.34/148.19 [bfs#1](x1, x2, x3) = [0 0] x1 + [0 0] x2 + [0] 588.34/148.19 [0 2] [0 2] [2] 588.34/148.19 588.34/148.19 [bfs#3](x1, x2, x3, x4) = [0 0] x1 + [0 0] x2 + [0 588.34/148.19 0] x3 + [0] 588.34/148.19 [0 2] [0 2] [0 588.34/148.19 2] [0] 588.34/148.19 588.34/148.19 [#0] = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [#neg](x1) = [0] 588.34/148.19 [0] 588.34/148.19 588.34/148.19 [#s](x1) = [1 0] x1 + [0] 588.34/148.19 [0 1] [0] 588.34/148.19 588.34/148.19 [bfs#4^#](x1, x2, x3, x4, x5, x6, x7) = [2 1] x2 + [0 1] x3 + [0 588.34/148.19 1] x4 + [0 1] x5 + [0 0] x6 + [5] 588.34/148.19 [4 0] [0 4] [0 588.34/148.19 0] [0 0] [4 4] [0] 588.34/148.19 588.34/148.19 [bfs^#](x1, x2, x3) = [0 1] x1 + [2 1] x2 + [1] 588.34/148.19 [0 0] [0 0] [0] 588.34/148.19 588.34/148.19 [reverse^#](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [appendreverse^#](x1, x2) = [1 0] x1 + [0 0] x2 + [0] 588.34/148.19 [0 4] [4 4] [0] 588.34/148.19 588.34/148.19 [appendreverse#1^#](x1, x2) = [1 0] x1 + [0 0] x2 + [0] 588.34/148.19 [0 0] [4 4] [0] 588.34/148.19 588.34/148.19 [dobfs^#](x1, x2) = [0 1] x1 + [0 0] x2 + [1] 588.34/148.19 [0 4] [4 4] [0] 588.34/148.19 588.34/148.19 [bfs2#1^#](x1, x2) = [0 2] x1 + [0 0] x2 + [2] 588.34/148.19 [4 4] [4 0] [0] 588.34/148.19 588.34/148.19 [bfs2^#](x1, x2) = [7 7] x1 + [7 7] x2 + [7] 588.34/148.19 [7 7] [7 7] [7] 588.34/148.19 588.34/148.19 [bfs#1^#](x1, x2, x3) = [0 1] x1 + [2 1] x2 + [0 588.34/148.19 0] x3 + [0] 588.34/148.19 [0 0] [4 0] [4 588.34/148.19 4] [0] 588.34/148.19 588.34/148.19 [bfs#2^#](x1, x2) = [2 1] x1 + [0 0] x2 + [0] 588.34/148.19 [0 0] [4 0] [4] 588.34/148.19 588.34/148.19 [bfs#3^#](x1, x2, x3, x4) = [0 1] x1 + [2 1] x2 + [0 588.34/148.19 1] x3 + [0 0] x4 + [0] 588.34/148.19 [0 0] [4 0] [0 588.34/148.19 4] [0 4] [4] 588.34/148.19 588.34/148.19 [c_1](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_2](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_3](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_4](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_5](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_9](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_12](x1) = [2 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_13](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 588.34/148.19 [0 0] [0 0] [7] 588.34/148.19 588.34/148.19 [c_14](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_15](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [0] 588.34/148.19 588.34/148.19 [c_16](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 588.34/148.19 [0 0] [0 0] [3] 588.34/148.19 588.34/148.19 [c_17](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [3] 588.34/148.19 588.34/148.19 [c_18](x1) = [1 0] x1 + [0] 588.34/148.19 [0 0] [3] 588.34/148.19 588.34/148.19 The order satisfies the following ordering constraints: 588.34/148.19 588.34/148.19 [#equal(@x, @y)] = [0] 588.34/148.19 [0] 588.34/148.19 >= [0] 588.34/148.19 [0] 588.34/148.19 = [#eq(@x, @y)] 588.34/148.19 588.34/148.19 [bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y)] = [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.19 [0 2] [0 2] [0 2] [0 2] [5] 588.34/148.19 >= [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.19 [0 1] [0 1] [5] 588.34/148.19 = [node(@y, @t1, @t2)] 588.34/148.19 588.34/148.19 [bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y)] = [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.19 [0 2] [0 2] [0 2] [0 2] [5] 588.34/148.19 >= [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.34/148.19 [0 2] [0 2] [0 2] [0 2] [2] 588.34/148.19 = [bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)] 588.34/148.19 588.34/148.19 [#eq(leaf(), leaf())] = [0] 588.34/148.19 [0] 588.34/148.19 >= [0] 588.34/148.19 [0] 588.34/148.19 = [#true()] 588.34/148.19 588.34/148.19 [#eq(leaf(), node(@y_1, @y_2, @y_3))] = [0] 588.34/148.19 [0] 588.34/148.19 >= [0] 588.34/148.19 [0] 588.34/148.19 = [#false()] 588.34/148.19 588.34/148.19 [#eq(leaf(), nil())] = [0] 588.34/148.19 [0] 588.34/148.19 >= [0] 588.34/148.19 [0] 588.34/148.19 = [#false()] 588.34/148.19 588.34/148.19 [#eq(leaf(), ::(@y_1, @y_2))] = [0] 588.34/148.19 [0] 588.34/148.19 >= [0] 588.34/148.19 [0] 588.34/148.19 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#pos(@x), #pos(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#eq(@x, @y)] 588.58/148.20 588.58/148.20 [#eq(#pos(@x), #0())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#pos(@x), #neg(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(node(@x_1, @x_2, @x_3), leaf())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3)))] 588.58/148.20 588.58/148.20 [#eq(node(@x_1, @x_2, @x_3), nil())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(nil(), leaf())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(nil(), node(@y_1, @y_2, @y_3))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(nil(), nil())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#true()] 588.58/148.20 588.58/148.20 [#eq(nil(), ::(@y_1, @y_2))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(::(@x_1, @x_2), leaf())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(::(@x_1, @x_2), nil())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))] 588.58/148.20 588.58/148.20 [#eq(#0(), #pos(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#0(), #0())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#true()] 588.58/148.20 588.58/148.20 [#eq(#0(), #neg(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#0(), #s(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#neg(@x), #pos(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#neg(@x), #0())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#neg(@x), #neg(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#eq(@x, @y)] 588.58/148.20 588.58/148.20 [#eq(#s(@x), #0())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#eq(#s(@x), #s(@y))] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#eq(@x, @y)] 588.58/148.20 588.58/148.20 [reverse(@xs)] = [4 0] @xs + [0] 588.58/148.20 [0 1] [0] 588.58/148.20 >= [2 0] @xs + [0] 588.58/148.20 [0 1] [0] 588.58/148.20 = [appendreverse(@xs, nil())] 588.58/148.20 588.58/148.20 [appendreverse#1(nil(), @sofar)] = [1 0] @sofar + [0] 588.58/148.20 [0 1] [0] 588.58/148.20 >= [1 0] @sofar + [0] 588.58/148.20 [0 1] [0] 588.58/148.20 = [@sofar] 588.58/148.20 588.58/148.20 [appendreverse#1(::(@a, @as), @sofar)] = [1 0] @sofar + [0 0] @a + [2 0] @as + [2] 588.58/148.20 [0 1] [0 1] [0 1] [0] 588.58/148.20 > [1 0] @sofar + [0 0] @a + [2 0] @as + [1] 588.58/148.20 [0 1] [0 1] [0 1] [0] 588.58/148.20 = [appendreverse(@as, ::(@a, @sofar))] 588.58/148.20 588.58/148.20 [appendreverse(@toreverse, @sofar)] = [2 0] @toreverse + [1 0] @sofar + [0] 588.58/148.20 [0 1] [0 1] [0] 588.58/148.20 >= [2 0] @toreverse + [1 0] @sofar + [0] 588.58/148.20 [0 1] [0 1] [0] 588.58/148.20 = [appendreverse#1(@toreverse, @sofar)] 588.58/148.20 588.58/148.20 [dobfs(@t, @x)] = [4 0] @x + [4 0] @t + [0] 588.58/148.20 [0 0] [0 2] [2] 588.58/148.20 >= [0 0] @t + [0] 588.58/148.20 [0 2] [2] 588.58/148.20 = [bfs(::(@t, nil()), nil(), @x)] 588.58/148.20 588.58/148.20 [bfs(@queue, @futurequeue, @x)] = [0 0] @queue + [0 0] @futurequeue + [0] 588.58/148.20 [0 2] [0 2] [2] 588.58/148.20 >= [0 0] @queue + [0 0] @futurequeue + [0] 588.58/148.20 [0 2] [0 2] [2] 588.58/148.20 = [bfs#1(@queue, @futurequeue, @x)] 588.58/148.20 588.58/148.20 [#and(#true(), #true())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#true()] 588.58/148.20 588.58/148.20 [#and(#true(), #false())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#and(#false(), #true())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [#and(#false(), #false())] = [0] 588.58/148.20 [0] 588.58/148.20 >= [0] 588.58/148.20 [0] 588.58/148.20 = [#false()] 588.58/148.20 588.58/148.20 [bfs#2(nil(), @x)] = [0] 588.58/148.20 [2] 588.58/148.20 >= [0] 588.58/148.20 [1] 588.58/148.20 = [leaf()] 588.58/148.20 588.58/148.20 [bfs#2(::(@t, @ts), @x)] = [0 0] @t + [0 0] @ts + [0] 588.58/148.20 [0 2] [0 2] [2] 588.58/148.20 >= [0 0] @t + [0 0] @ts + [0] 588.58/148.20 [0 2] [0 2] [2] 588.58/148.20 = [bfs(reverse(::(@t, @ts)), nil(), @x)] 588.58/148.20 588.58/148.20 [bfs#1(nil(), @futurequeue, @x)] = [0 0] @futurequeue + [0] 588.58/148.20 [0 2] [2] 588.58/148.20 >= [0 0] @futurequeue + [0] 588.58/148.20 [0 2] [2] 588.58/148.20 = [bfs#2(@futurequeue, @x)] 588.58/148.20 588.58/148.20 [bfs#1(::(@t, @ts), @futurequeue, @x)] = [0 0] @futurequeue + [0 0] @t + [0 0] @ts + [0] 588.58/148.20 [0 2] [0 2] [0 2] [2] 588.58/148.20 >= [0 0] @futurequeue + [0 0] @t + [0 0] @ts + [0] 588.58/148.20 [0 2] [0 2] [0 2] [0] 588.58/148.20 = [bfs#3(@t, @futurequeue, @ts, @x)] 588.58/148.20 588.58/148.20 [bfs#3(leaf(), @futurequeue, @ts, @x)] = [0 0] @futurequeue + [0 0] @ts + [0] 588.58/148.20 [0 2] [0 2] [2] 588.58/148.20 >= [0 0] @futurequeue + [0 0] @ts + [0] 588.58/148.20 [0 2] [0 2] [2] 588.58/148.20 = [bfs(@ts, @futurequeue, @x)] 588.58/148.20 588.58/148.20 [bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x)] = [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.58/148.20 [0 2] [0 2] [0 2] [0 2] [10] 588.58/148.20 >= [0 0] @futurequeue + [0 0] @ts + [0 0] @t1 + [0 0] @t2 + [0] 588.58/148.20 [0 2] [0 2] [0 2] [0 2] [5] 588.58/148.20 = [bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y)] 588.58/148.20 588.58/148.20 [bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y)] = [0 0] @x + [2 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 588.58/148.20 1] @t2 + [5] 588.58/148.20 [4 4] [4 0] [0 0] [0 4] [0 588.58/148.20 0] [0] 588.58/148.20 >= [2 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 1] @t2 + [5] 588.58/148.20 [0 0] [0 0] [0 0] [0 0] [0] 588.58/148.20 = [c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x))] 588.58/148.20 588.58/148.20 [bfs^#(@queue, @futurequeue, @x)] = [0 1] @queue + [2 1] @futurequeue + [1] 588.58/148.20 [0 0] [0 0] [0] 588.58/148.20 > [0 1] @queue + [2 1] @futurequeue + [0] 588.58/148.20 [0 0] [0 0] [0] 588.58/148.20 = [c_2(bfs#1^#(@queue, @futurequeue, @x))] 588.58/148.20 588.58/148.20 [reverse^#(@xs)] = [1 0] @xs + [0] 588.58/148.20 [0 0] [0] 588.58/148.20 >= [1 0] @xs + [0] 588.58/148.20 [0 0] [0] 588.58/148.20 = [c_3(appendreverse^#(@xs, nil()))] 588.58/148.20 588.58/148.20 [appendreverse^#(@toreverse, @sofar)] = [1 0] @toreverse + [0 0] @sofar + [0] 588.58/148.20 [0 4] [4 4] [0] 588.58/148.20 >= [1 0] @toreverse + [0] 588.58/148.20 [0 0] [0] 588.58/148.20 = [c_4(appendreverse#1^#(@toreverse, @sofar))] 588.58/148.20 588.58/148.20 [appendreverse#1^#(::(@a, @as), @sofar)] = [0 0] @sofar + [1 0] @as + [1] 588.58/148.20 [4 4] [0 0] [0] 588.58/148.20 > [1 0] @as + [0] 588.58/148.20 [0 0] [0] 588.58/148.20 = [c_5(appendreverse^#(@as, ::(@a, @sofar)))] 588.58/148.20 588.58/148.20 [dobfs^#(@t, @x)] = [0 0] @x + [0 1] @t + [1] 588.58/148.20 [4 4] [0 4] [0] 588.58/148.20 >= [0 1] @t + [1] 588.58/148.20 [0 0] [0] 588.58/148.20 = [c_9(bfs^#(::(@t, nil()), nil(), @x))] 588.58/148.20 588.58/148.20 [bfs2#1^#(@t', @x)] = [0 0] @x + [0 2] @t' + [2] 588.58/148.20 [4 0] [4 4] [0] 588.58/148.20 >= [0 2] @t' + [2] 588.58/148.20 [0 0] [0] 588.58/148.20 = [c_12(dobfs^#(@t', @x))] 588.58/148.20 588.58/148.20 [bfs2^#(@t, @x)] = [7 7] @x + [7 7] @t + [7] 588.58/148.20 [7 7] [7 7] [7] 588.58/148.20 >= [0 5] @t + [7] 588.58/148.20 [0 0] [7] 588.58/148.20 = [c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x))] 588.58/148.20 588.58/148.20 [bfs#1^#(nil(), @futurequeue, @x)] = [0 0] @x + [2 1] @futurequeue + [0] 588.58/148.20 [4 4] [4 0] [0] 588.58/148.20 >= [2 1] @futurequeue + [0] 588.58/148.20 [0 0] [0] 588.58/148.20 = [c_14(bfs#2^#(@futurequeue, @x))] 588.58/148.21 588.58/148.21 [bfs#1^#(::(@t, @ts), @futurequeue, @x)] = [0 0] @x + [2 1] @futurequeue + [0 1] @t + [0 1] @ts + [0] 588.58/148.21 [4 4] [4 0] [0 0] [0 0] [0] 588.58/148.21 >= [2 1] @futurequeue + [0 1] @t + [0 1] @ts + [0] 588.58/148.21 [0 0] [0 0] [0 0] [0] 588.58/148.21 = [c_15(bfs#3^#(@t, @futurequeue, @ts, @x))] 588.58/148.21 588.58/148.21 [bfs#2^#(::(@t, @ts), @x)] = [0 0] @x + [0 1] @t + [2 1] @ts + [2] 588.58/148.21 [4 0] [0 0] [0 0] [4] 588.58/148.21 >= [0 1] @t + [1 1] @ts + [2] 588.58/148.21 [0 0] [0 0] [3] 588.58/148.21 = [c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.58/148.21 reverse^#(::(@t, @ts)))] 588.58/148.21 588.58/148.21 [bfs#3^#(leaf(), @futurequeue, @ts, @x)] = [0 0] @x + [2 1] @futurequeue + [0 1] @ts + [1] 588.58/148.21 [0 4] [4 0] [0 4] [4] 588.58/148.21 >= [2 1] @futurequeue + [0 1] @ts + [1] 588.58/148.21 [0 0] [0 0] [3] 588.58/148.21 = [c_17(bfs^#(@ts, @futurequeue, @x))] 588.58/148.21 588.58/148.21 [bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x)] = [0 0] @x + [2 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 588.58/148.21 1] @t2 + [5] 588.58/148.21 [0 4] [4 0] [0 4] [0 0] [0 588.58/148.21 0] [4] 588.58/148.21 >= [2 1] @futurequeue + [0 1] @ts + [0 1] @t1 + [0 1] @t2 + [5] 588.58/148.21 [0 0] [0 0] [0 0] [0 0] [3] 588.58/148.21 = [c_18(bfs#4^#(#equal(@x, @y), 588.58/148.21 @futurequeue, 588.58/148.21 @t1, 588.58/148.21 @t2, 588.58/148.21 @ts, 588.58/148.21 @x, 588.58/148.21 @y))] 588.58/148.21 588.58/148.21 588.58/148.21 We return to the main proof. Consider the set of all dependency 588.58/148.21 pairs 588.58/148.21 588.58/148.21 : 588.58/148.21 { 1: bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.58/148.21 , 2: bfs^#(@queue, @futurequeue, @x) -> 588.58/148.21 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.58/148.21 , 3: reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.58/148.21 , 4: appendreverse^#(@toreverse, @sofar) -> 588.58/148.21 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.58/148.21 , 5: bfs#1^#(nil(), @futurequeue, @x) -> 588.58/148.21 c_14(bfs#2^#(@futurequeue, @x)) 588.58/148.21 , 6: bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.58/148.21 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.58/148.21 , 7: bfs#2^#(::(@t, @ts), @x) -> 588.58/148.21 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.58/148.21 reverse^#(::(@t, @ts))) 588.58/148.21 , 8: bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.58/148.21 c_17(bfs^#(@ts, @futurequeue, @x)) 588.58/148.21 , 9: bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.21 c_18(bfs#4^#(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y)) 588.58/148.21 , 10: appendreverse#1^#(::(@a, @as), @sofar) -> 588.58/148.21 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.58/148.21 , 11: dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.58/148.21 , 12: bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.58/148.21 , 13: bfs2^#(@t, @x) -> 588.58/148.21 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) } 588.58/148.21 588.58/148.21 Processor 'matrix interpretation of dimension 2' induces the 588.58/148.21 complexity certificate YES(?,O(n^1)) on application of dependency 588.58/148.21 pairs {2,10}. These cover all (indirect) predecessors of dependency 588.58/148.21 pairs {1,2,3,4,5,6,7,8,9,10,11,12,13}, their number of application 588.58/148.21 is equally bounded. The dependency pairs are shifted into the weak 588.58/148.21 component. 588.58/148.21 588.58/148.21 We are left with following problem, upon which TcT provides the 588.58/148.21 certificate YES(O(1),O(1)). 588.58/148.21 588.58/148.21 Weak DPs: 588.58/148.21 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.58/148.21 , bfs^#(@queue, @futurequeue, @x) -> 588.58/148.21 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.58/148.21 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.58/148.21 , appendreverse^#(@toreverse, @sofar) -> 588.58/148.21 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.58/148.21 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.58/148.21 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.58/148.21 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.58/148.21 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.58/148.21 , bfs2^#(@t, @x) -> 588.58/148.21 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.58/148.21 , bfs#1^#(nil(), @futurequeue, @x) -> 588.58/148.21 c_14(bfs#2^#(@futurequeue, @x)) 588.58/148.21 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.58/148.21 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.58/148.21 , bfs#2^#(::(@t, @ts), @x) -> 588.58/148.21 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.58/148.21 reverse^#(::(@t, @ts))) 588.58/148.21 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.58/148.21 c_17(bfs^#(@ts, @futurequeue, @x)) 588.58/148.21 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.21 c_18(bfs#4^#(#equal(@x, @y), 588.58/148.21 @futurequeue, 588.58/148.21 @t1, 588.58/148.21 @t2, 588.58/148.21 @ts, 588.58/148.21 @x, 588.58/148.21 @y)) } 588.58/148.21 Weak Trs: 588.58/148.21 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.21 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 node(@y, @t1, @t2) 588.58/148.21 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.58/148.21 , #eq(leaf(), leaf()) -> #true() 588.58/148.21 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.21 , #eq(leaf(), nil()) -> #false() 588.58/148.21 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.21 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.21 , #eq(#pos(@x), #0()) -> #false() 588.58/148.21 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.21 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.21 , #eq(nil(), leaf()) -> #false() 588.58/148.21 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.21 , #eq(nil(), nil()) -> #true() 588.58/148.21 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.21 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.21 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.21 , #eq(#0(), #0()) -> #true() 588.58/148.21 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.21 , #eq(#0(), #s(@y)) -> #false() 588.58/148.21 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.21 , #eq(#neg(@x), #0()) -> #false() 588.58/148.21 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.21 , #eq(#s(@x), #0()) -> #false() 588.58/148.21 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.21 , reverse(@xs) -> appendreverse(@xs, nil()) 588.58/148.21 , appendreverse#1(nil(), @sofar) -> @sofar 588.58/148.21 , appendreverse#1(::(@a, @as), @sofar) -> 588.58/148.21 appendreverse(@as, ::(@a, @sofar)) 588.58/148.21 , appendreverse(@toreverse, @sofar) -> 588.58/148.21 appendreverse#1(@toreverse, @sofar) 588.58/148.21 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.58/148.21 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.58/148.21 , #and(#true(), #true()) -> #true() 588.58/148.21 , #and(#true(), #false()) -> #false() 588.58/148.21 , #and(#false(), #true()) -> #false() 588.58/148.21 , #and(#false(), #false()) -> #false() 588.58/148.21 , bfs#2(nil(), @x) -> leaf() 588.58/148.21 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.58/148.21 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.58/148.21 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.58/148.21 bfs#3(@t, @futurequeue, @ts, @x) 588.58/148.21 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.58/148.21 bfs(@ts, @futurequeue, @x) 588.58/148.21 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.21 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.58/148.21 Obligation: 588.58/148.21 innermost runtime complexity 588.58/148.21 Answer: 588.58/148.21 YES(O(1),O(1)) 588.58/148.21 588.58/148.21 The following weak DPs constitute a sub-graph of the DG that is 588.58/148.21 closed under successors. The DPs are removed. 588.58/148.21 588.58/148.21 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.58/148.21 , bfs^#(@queue, @futurequeue, @x) -> 588.58/148.21 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.58/148.21 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.58/148.21 , appendreverse^#(@toreverse, @sofar) -> 588.58/148.21 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.58/148.21 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.58/148.21 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.58/148.21 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.58/148.21 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.58/148.21 , bfs2^#(@t, @x) -> 588.58/148.21 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.58/148.21 , bfs#1^#(nil(), @futurequeue, @x) -> 588.58/148.21 c_14(bfs#2^#(@futurequeue, @x)) 588.58/148.21 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.58/148.21 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.58/148.21 , bfs#2^#(::(@t, @ts), @x) -> 588.58/148.21 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.58/148.21 reverse^#(::(@t, @ts))) 588.58/148.21 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.58/148.21 c_17(bfs^#(@ts, @futurequeue, @x)) 588.58/148.21 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.21 c_18(bfs#4^#(#equal(@x, @y), 588.58/148.21 @futurequeue, 588.58/148.21 @t1, 588.58/148.21 @t2, 588.58/148.21 @ts, 588.58/148.21 @x, 588.58/148.21 @y)) } 588.58/148.21 588.58/148.21 We are left with following problem, upon which TcT provides the 588.58/148.21 certificate YES(O(1),O(1)). 588.58/148.21 588.58/148.21 Weak Trs: 588.58/148.21 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.21 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 node(@y, @t1, @t2) 588.58/148.21 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.58/148.21 , #eq(leaf(), leaf()) -> #true() 588.58/148.21 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.21 , #eq(leaf(), nil()) -> #false() 588.58/148.21 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.21 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.21 , #eq(#pos(@x), #0()) -> #false() 588.58/148.21 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.21 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.21 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.21 , #eq(nil(), leaf()) -> #false() 588.58/148.21 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.21 , #eq(nil(), nil()) -> #true() 588.58/148.21 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.21 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.21 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.21 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.21 , #eq(#0(), #0()) -> #true() 588.58/148.21 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.21 , #eq(#0(), #s(@y)) -> #false() 588.58/148.21 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.21 , #eq(#neg(@x), #0()) -> #false() 588.58/148.21 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.21 , #eq(#s(@x), #0()) -> #false() 588.58/148.21 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.21 , reverse(@xs) -> appendreverse(@xs, nil()) 588.58/148.21 , appendreverse#1(nil(), @sofar) -> @sofar 588.58/148.21 , appendreverse#1(::(@a, @as), @sofar) -> 588.58/148.21 appendreverse(@as, ::(@a, @sofar)) 588.58/148.21 , appendreverse(@toreverse, @sofar) -> 588.58/148.21 appendreverse#1(@toreverse, @sofar) 588.58/148.21 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.58/148.21 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.58/148.21 , #and(#true(), #true()) -> #true() 588.58/148.21 , #and(#true(), #false()) -> #false() 588.58/148.21 , #and(#false(), #true()) -> #false() 588.58/148.21 , #and(#false(), #false()) -> #false() 588.58/148.21 , bfs#2(nil(), @x) -> leaf() 588.58/148.21 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.58/148.21 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.58/148.21 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.58/148.21 bfs#3(@t, @futurequeue, @ts, @x) 588.58/148.21 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.58/148.21 bfs(@ts, @futurequeue, @x) 588.58/148.21 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.21 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.58/148.21 Obligation: 588.58/148.21 innermost runtime complexity 588.58/148.21 Answer: 588.58/148.21 YES(O(1),O(1)) 588.58/148.21 588.58/148.21 No rule is usable, rules are removed from the input problem. 588.58/148.21 588.58/148.21 We are left with following problem, upon which TcT provides the 588.58/148.21 certificate YES(O(1),O(1)). 588.58/148.21 588.58/148.21 Rules: Empty 588.58/148.21 Obligation: 588.58/148.21 innermost runtime complexity 588.58/148.21 Answer: 588.58/148.21 YES(O(1),O(1)) 588.58/148.21 588.58/148.21 Empty rules are trivially bounded 588.58/148.21 588.58/148.21 S) We are left with following problem, upon which TcT provides the 588.58/148.21 certificate YES(O(1),O(n^1)). 588.58/148.21 588.58/148.21 Strict DPs: 588.58/148.21 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.58/148.21 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.58/148.21 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.58/148.21 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.58/148.21 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.58/148.21 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.58/148.21 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.58/148.21 Weak DPs: 588.58/148.21 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.21 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.58/148.21 , bfs^#(@queue, @futurequeue, @x) -> 588.58/148.21 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.58/148.21 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.58/148.21 , appendreverse^#(@toreverse, @sofar) -> 588.58/148.21 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.58/148.21 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.58/148.21 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.58/148.21 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.58/148.22 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.58/148.22 , bfs2^#(@t, @x) -> 588.58/148.22 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.58/148.22 , bfs#1^#(nil(), @futurequeue, @x) -> 588.58/148.22 c_14(bfs#2^#(@futurequeue, @x)) 588.58/148.22 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.58/148.22 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.58/148.22 , bfs#2^#(::(@t, @ts), @x) -> 588.58/148.22 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.58/148.22 reverse^#(::(@t, @ts))) 588.58/148.22 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.58/148.22 c_17(bfs^#(@ts, @futurequeue, @x)) 588.58/148.22 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.22 c_18(bfs#4^#(#equal(@x, @y), 588.58/148.22 @futurequeue, 588.58/148.22 @t1, 588.58/148.22 @t2, 588.58/148.22 @ts, 588.58/148.22 @x, 588.58/148.22 @y)) } 588.58/148.22 Weak Trs: 588.58/148.22 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.22 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.22 node(@y, @t1, @t2) 588.58/148.22 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.22 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.58/148.22 , #eq(leaf(), leaf()) -> #true() 588.58/148.22 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(leaf(), nil()) -> #false() 588.58/148.22 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#pos(@x), #0()) -> #false() 588.58/148.22 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(nil(), leaf()) -> #false() 588.58/148.22 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(nil(), nil()) -> #true() 588.58/148.22 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.22 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.22 , #eq(#0(), #0()) -> #true() 588.58/148.22 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.22 , #eq(#0(), #s(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #0()) -> #false() 588.58/148.22 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#s(@x), #0()) -> #false() 588.58/148.22 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.22 , reverse(@xs) -> appendreverse(@xs, nil()) 588.58/148.22 , appendreverse#1(nil(), @sofar) -> @sofar 588.58/148.22 , appendreverse#1(::(@a, @as), @sofar) -> 588.58/148.22 appendreverse(@as, ::(@a, @sofar)) 588.58/148.22 , appendreverse(@toreverse, @sofar) -> 588.58/148.22 appendreverse#1(@toreverse, @sofar) 588.58/148.22 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.58/148.22 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.58/148.22 , #and(#true(), #true()) -> #true() 588.58/148.22 , #and(#true(), #false()) -> #false() 588.58/148.22 , #and(#false(), #true()) -> #false() 588.58/148.22 , #and(#false(), #false()) -> #false() 588.58/148.22 , bfs#2(nil(), @x) -> leaf() 588.58/148.22 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.58/148.22 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.58/148.22 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.58/148.22 bfs#3(@t, @futurequeue, @ts, @x) 588.58/148.22 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.58/148.22 bfs(@ts, @futurequeue, @x) 588.58/148.22 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.22 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.58/148.22 Obligation: 588.58/148.22 innermost runtime complexity 588.58/148.22 Answer: 588.58/148.22 YES(O(1),O(n^1)) 588.58/148.22 588.58/148.22 The following weak DPs constitute a sub-graph of the DG that is 588.58/148.22 closed under successors. The DPs are removed. 588.58/148.22 588.58/148.22 { bfs#4^#(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.22 c_1(bfs^#(@ts, ::(@t2, ::(@t1, @futurequeue)), @x)) 588.58/148.22 , bfs^#(@queue, @futurequeue, @x) -> 588.58/148.22 c_2(bfs#1^#(@queue, @futurequeue, @x)) 588.58/148.22 , reverse^#(@xs) -> c_3(appendreverse^#(@xs, nil())) 588.58/148.22 , appendreverse^#(@toreverse, @sofar) -> 588.58/148.22 c_4(appendreverse#1^#(@toreverse, @sofar)) 588.58/148.22 , appendreverse#1^#(::(@a, @as), @sofar) -> 588.58/148.22 c_5(appendreverse^#(@as, ::(@a, @sofar))) 588.58/148.22 , dobfs^#(@t, @x) -> c_9(bfs^#(::(@t, nil()), nil(), @x)) 588.58/148.22 , bfs2#1^#(@t', @x) -> c_12(dobfs^#(@t', @x)) 588.58/148.22 , bfs2^#(@t, @x) -> 588.58/148.22 c_13(bfs2#1^#(dobfs(@t, @x), @x), dobfs^#(@t, @x)) 588.58/148.22 , bfs#1^#(nil(), @futurequeue, @x) -> 588.58/148.22 c_14(bfs#2^#(@futurequeue, @x)) 588.58/148.22 , bfs#1^#(::(@t, @ts), @futurequeue, @x) -> 588.58/148.22 c_15(bfs#3^#(@t, @futurequeue, @ts, @x)) 588.58/148.22 , bfs#2^#(::(@t, @ts), @x) -> 588.58/148.22 c_16(bfs^#(reverse(::(@t, @ts)), nil(), @x), 588.58/148.22 reverse^#(::(@t, @ts))) 588.58/148.22 , bfs#3^#(leaf(), @futurequeue, @ts, @x) -> 588.58/148.22 c_17(bfs^#(@ts, @futurequeue, @x)) 588.58/148.22 , bfs#3^#(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.22 c_18(bfs#4^#(#equal(@x, @y), 588.58/148.22 @futurequeue, 588.58/148.22 @t1, 588.58/148.22 @t2, 588.58/148.22 @ts, 588.58/148.22 @x, 588.58/148.22 @y)) } 588.58/148.22 588.58/148.22 We are left with following problem, upon which TcT provides the 588.58/148.22 certificate YES(O(1),O(n^1)). 588.58/148.22 588.58/148.22 Strict DPs: 588.58/148.22 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.58/148.22 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.58/148.22 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.58/148.22 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.58/148.22 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.58/148.22 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.58/148.22 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.58/148.22 Weak Trs: 588.58/148.22 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.22 , bfs#4(#true(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.22 node(@y, @t1, @t2) 588.58/148.22 , bfs#4(#false(), @futurequeue, @t1, @t2, @ts, @x, @y) -> 588.58/148.22 bfs(@ts, ::(@t2, ::(@t1, @futurequeue)), @x) 588.58/148.22 , #eq(leaf(), leaf()) -> #true() 588.58/148.22 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(leaf(), nil()) -> #false() 588.58/148.22 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#pos(@x), #0()) -> #false() 588.58/148.22 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(nil(), leaf()) -> #false() 588.58/148.22 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(nil(), nil()) -> #true() 588.58/148.22 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.22 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.22 , #eq(#0(), #0()) -> #true() 588.58/148.22 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.22 , #eq(#0(), #s(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #0()) -> #false() 588.58/148.22 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#s(@x), #0()) -> #false() 588.58/148.22 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.22 , reverse(@xs) -> appendreverse(@xs, nil()) 588.58/148.22 , appendreverse#1(nil(), @sofar) -> @sofar 588.58/148.22 , appendreverse#1(::(@a, @as), @sofar) -> 588.58/148.22 appendreverse(@as, ::(@a, @sofar)) 588.58/148.22 , appendreverse(@toreverse, @sofar) -> 588.58/148.22 appendreverse#1(@toreverse, @sofar) 588.58/148.22 , dobfs(@t, @x) -> bfs(::(@t, nil()), nil(), @x) 588.58/148.22 , bfs(@queue, @futurequeue, @x) -> bfs#1(@queue, @futurequeue, @x) 588.58/148.22 , #and(#true(), #true()) -> #true() 588.58/148.22 , #and(#true(), #false()) -> #false() 588.58/148.22 , #and(#false(), #true()) -> #false() 588.58/148.22 , #and(#false(), #false()) -> #false() 588.58/148.22 , bfs#2(nil(), @x) -> leaf() 588.58/148.22 , bfs#2(::(@t, @ts), @x) -> bfs(reverse(::(@t, @ts)), nil(), @x) 588.58/148.22 , bfs#1(nil(), @futurequeue, @x) -> bfs#2(@futurequeue, @x) 588.58/148.22 , bfs#1(::(@t, @ts), @futurequeue, @x) -> 588.58/148.22 bfs#3(@t, @futurequeue, @ts, @x) 588.58/148.22 , bfs#3(leaf(), @futurequeue, @ts, @x) -> 588.58/148.22 bfs(@ts, @futurequeue, @x) 588.58/148.22 , bfs#3(node(@y, @t1, @t2), @futurequeue, @ts, @x) -> 588.58/148.22 bfs#4(#equal(@x, @y), @futurequeue, @t1, @t2, @ts, @x, @y) } 588.58/148.22 Obligation: 588.58/148.22 innermost runtime complexity 588.58/148.22 Answer: 588.58/148.22 YES(O(1),O(n^1)) 588.58/148.22 588.58/148.22 We replace rewrite rules by usable rules: 588.58/148.22 588.58/148.22 Weak Usable Rules: 588.58/148.22 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.22 , #eq(leaf(), leaf()) -> #true() 588.58/148.22 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(leaf(), nil()) -> #false() 588.58/148.22 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#pos(@x), #0()) -> #false() 588.58/148.22 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(nil(), leaf()) -> #false() 588.58/148.22 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(nil(), nil()) -> #true() 588.58/148.22 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.22 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.22 , #eq(#0(), #0()) -> #true() 588.58/148.22 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.22 , #eq(#0(), #s(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #0()) -> #false() 588.58/148.22 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#s(@x), #0()) -> #false() 588.58/148.22 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.22 , #and(#true(), #true()) -> #true() 588.58/148.22 , #and(#true(), #false()) -> #false() 588.58/148.22 , #and(#false(), #true()) -> #false() 588.58/148.22 , #and(#false(), #false()) -> #false() } 588.58/148.22 588.58/148.22 We are left with following problem, upon which TcT provides the 588.58/148.22 certificate YES(O(1),O(n^1)). 588.58/148.22 588.58/148.22 Strict DPs: 588.58/148.22 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.58/148.22 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.58/148.22 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.58/148.22 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.58/148.22 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.58/148.22 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.58/148.22 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.58/148.22 Weak Trs: 588.58/148.22 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.22 , #eq(leaf(), leaf()) -> #true() 588.58/148.22 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(leaf(), nil()) -> #false() 588.58/148.22 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#pos(@x), #0()) -> #false() 588.58/148.22 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.22 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(nil(), leaf()) -> #false() 588.58/148.22 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(nil(), nil()) -> #true() 588.58/148.22 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.22 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.22 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.22 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.22 , #eq(#0(), #0()) -> #true() 588.58/148.22 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.22 , #eq(#0(), #s(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.22 , #eq(#neg(@x), #0()) -> #false() 588.58/148.22 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.22 , #eq(#s(@x), #0()) -> #false() 588.58/148.22 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.22 , #and(#true(), #true()) -> #true() 588.58/148.22 , #and(#true(), #false()) -> #false() 588.58/148.22 , #and(#false(), #true()) -> #false() 588.58/148.22 , #and(#false(), #false()) -> #false() } 588.58/148.22 Obligation: 588.58/148.22 innermost runtime complexity 588.58/148.22 Answer: 588.58/148.22 YES(O(1),O(n^1)) 588.58/148.22 588.58/148.22 We use the processor 'matrix interpretation of dimension 1' to 588.58/148.22 orient following rules strictly. 588.58/148.22 588.58/148.22 DPs: 588.58/148.22 { 2: dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.58/148.22 , 5: dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.58/148.22 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.58/148.22 588.58/148.22 Sub-proof: 588.58/148.22 ---------- 588.58/148.22 The following argument positions are usable: 588.58/148.22 Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1}, 588.58/148.22 Uargs(c_11) = {1}, Uargs(c_19) = {1} 588.58/148.22 588.58/148.22 TcT has computed the following constructor-based matrix 588.58/148.22 interpretation satisfying not(EDA). 588.58/148.22 588.58/148.22 [#equal](x1, x2) = [0] 588.58/148.22 588.58/148.22 [#eq](x1, x2) = [0] 588.58/148.22 588.58/148.22 [#true] = [0] 588.58/148.22 588.58/148.22 [leaf] = [2] 588.58/148.22 588.58/148.22 [#pos](x1) = [1] x1 + [0] 588.58/148.22 588.58/148.22 [node](x1, x2, x3) = [1] x1 + [1] x2 + [1] x3 + [2] 588.58/148.22 588.58/148.22 [#and](x1, x2) = [0] 588.58/148.22 588.58/148.22 [nil] = [0] 588.58/148.22 588.58/148.22 [#false] = [0] 588.58/148.22 588.58/148.22 [::](x1, x2) = [1] x1 + [1] x2 + [0] 588.58/148.22 588.58/148.22 [#0] = [0] 588.58/148.22 588.58/148.22 [#neg](x1) = [1] x1 + [0] 588.58/148.22 588.58/148.22 [#s](x1) = [1] x1 + [0] 588.58/148.22 588.58/148.22 [dfs#1^#](x1, x2) = [2] x1 + [0] 588.58/148.22 588.58/148.22 [dfs#2^#](x1, x2, x3, x4) = [2] x1 + [2] x3 + [0] 588.58/148.22 588.58/148.22 [dfs^#](x1, x2) = [2] x1 + [0] 588.58/148.22 588.58/148.22 [dfs#3^#](x1, x2, x3, x4, x5, x6) = [2] x3 + [2] x4 + [2] x5 + [4] 588.58/148.22 588.58/148.22 [c_6](x1) = [1] x1 + [0] 588.58/148.22 588.58/148.22 [c_7](x1) = [1] x1 + [1] 588.58/148.22 588.58/148.22 [c_8](x1) = [1] x1 + [0] 588.58/148.22 588.58/148.22 [c_11](x1) = [1] x1 + [0] 588.58/148.22 588.58/148.22 [c_19](x1) = [1] x1 + [3] 588.58/148.22 588.58/148.22 The order satisfies the following ordering constraints: 588.58/148.22 588.58/148.22 [#equal(@x, @y)] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#eq(@x, @y)] 588.58/148.22 588.58/148.22 [#eq(leaf(), leaf())] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#true()] 588.58/148.22 588.58/148.22 [#eq(leaf(), node(@y_1, @y_2, @y_3))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(leaf(), nil())] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(leaf(), ::(@y_1, @y_2))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(#pos(@x), #pos(@y))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#eq(@x, @y)] 588.58/148.22 588.58/148.22 [#eq(#pos(@x), #0())] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(#pos(@x), #neg(@y))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(node(@x_1, @x_2, @x_3), leaf())] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3)))] 588.58/148.22 588.58/148.22 [#eq(node(@x_1, @x_2, @x_3), nil())] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(nil(), leaf())] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(nil(), node(@y_1, @y_2, @y_3))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(nil(), nil())] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#true()] 588.58/148.22 588.58/148.22 [#eq(nil(), ::(@y_1, @y_2))] = [0] 588.58/148.22 >= [0] 588.58/148.22 = [#false()] 588.58/148.22 588.58/148.22 [#eq(::(@x_1, @x_2), leaf())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(::(@x_1, @x_2), nil())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))] 588.58/148.23 588.58/148.23 [#eq(#0(), #pos(@y))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(#0(), #0())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#true()] 588.58/148.23 588.58/148.23 [#eq(#0(), #neg(@y))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(#0(), #s(@y))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(#neg(@x), #pos(@y))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(#neg(@x), #0())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(#neg(@x), #neg(@y))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#eq(@x, @y)] 588.58/148.23 588.58/148.23 [#eq(#s(@x), #0())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#eq(#s(@x), #s(@y))] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#eq(@x, @y)] 588.58/148.23 588.58/148.23 [#and(#true(), #true())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#true()] 588.58/148.23 588.58/148.23 [#and(#true(), #false())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#and(#false(), #true())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [#and(#false(), #false())] = [0] 588.58/148.23 >= [0] 588.58/148.23 = [#false()] 588.58/148.23 588.58/148.23 [dfs#1^#(::(@t, @ts), @x)] = [2] @t + [2] @ts + [0] 588.58/148.23 >= [2] @t + [2] @ts + [0] 588.58/148.23 = [c_6(dfs#2^#(@t, @t, @ts, @x))] 588.58/148.23 588.58/148.23 [dfs#2^#(leaf(), @t, @ts, @x)] = [2] @ts + [4] 588.58/148.23 > [2] @ts + [1] 588.58/148.23 = [c_7(dfs^#(@ts, @x))] 588.58/148.23 588.58/148.23 [dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x)] = [2] @a + [2] @ts + [2] @t1 + [2] @t2 + [4] 588.58/148.23 >= [2] @ts + [2] @t1 + [2] @t2 + [4] 588.58/148.23 = [c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x))] 588.58/148.23 588.58/148.23 [dfs^#(@queue, @x)] = [2] @queue + [0] 588.58/148.23 >= [2] @queue + [0] 588.58/148.23 = [c_11(dfs#1^#(@queue, @x))] 588.58/148.23 588.58/148.23 [dfs#3^#(#false(), @t, @t1, @t2, @ts, @x)] = [2] @ts + [2] @t1 + [2] @t2 + [4] 588.58/148.23 > [2] @ts + [2] @t1 + [2] @t2 + [3] 588.58/148.23 = [c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x))] 588.58/148.23 588.58/148.23 588.58/148.23 We return to the main proof. Consider the set of all dependency 588.58/148.23 pairs 588.58/148.23 588.58/148.23 : 588.58/148.23 { 1: dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.58/148.23 , 2: dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.58/148.23 , 3: dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.58/148.23 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.58/148.23 , 4: dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.58/148.23 , 5: dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.58/148.23 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.58/148.23 588.58/148.23 Processor 'matrix interpretation of dimension 1' induces the 588.58/148.23 complexity certificate YES(?,O(n^1)) on application of dependency 588.58/148.23 pairs {2,5}. These cover all (indirect) predecessors of dependency 588.58/148.23 pairs {1,2,3,4,5}, their number of application is equally bounded. 588.58/148.23 The dependency pairs are shifted into the weak component. 588.58/148.23 588.58/148.23 We are left with following problem, upon which TcT provides the 588.58/148.23 certificate YES(O(1),O(1)). 588.58/148.23 588.58/148.23 Weak DPs: 588.58/148.23 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.58/148.23 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.58/148.23 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.58/148.23 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.58/148.23 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.58/148.23 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.58/148.23 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.58/148.23 Weak Trs: 588.58/148.23 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.23 , #eq(leaf(), leaf()) -> #true() 588.58/148.23 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.23 , #eq(leaf(), nil()) -> #false() 588.58/148.23 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.23 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.23 , #eq(#pos(@x), #0()) -> #false() 588.58/148.23 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.23 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.23 , #eq(nil(), leaf()) -> #false() 588.58/148.23 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.23 , #eq(nil(), nil()) -> #true() 588.58/148.23 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.23 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.23 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.23 , #eq(#0(), #0()) -> #true() 588.58/148.23 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.23 , #eq(#0(), #s(@y)) -> #false() 588.58/148.23 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.23 , #eq(#neg(@x), #0()) -> #false() 588.58/148.23 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.23 , #eq(#s(@x), #0()) -> #false() 588.58/148.23 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.23 , #and(#true(), #true()) -> #true() 588.58/148.23 , #and(#true(), #false()) -> #false() 588.58/148.23 , #and(#false(), #true()) -> #false() 588.58/148.23 , #and(#false(), #false()) -> #false() } 588.58/148.23 Obligation: 588.58/148.23 innermost runtime complexity 588.58/148.23 Answer: 588.58/148.23 YES(O(1),O(1)) 588.58/148.23 588.58/148.23 The following weak DPs constitute a sub-graph of the DG that is 588.58/148.23 closed under successors. The DPs are removed. 588.58/148.23 588.58/148.23 { dfs#1^#(::(@t, @ts), @x) -> c_6(dfs#2^#(@t, @t, @ts, @x)) 588.58/148.23 , dfs#2^#(leaf(), @t, @ts, @x) -> c_7(dfs^#(@ts, @x)) 588.58/148.23 , dfs#2^#(node(@a, @t1, @t2), @t, @ts, @x) -> 588.58/148.23 c_8(dfs#3^#(#equal(@a, @x), @t, @t1, @t2, @ts, @x)) 588.58/148.23 , dfs^#(@queue, @x) -> c_11(dfs#1^#(@queue, @x)) 588.58/148.23 , dfs#3^#(#false(), @t, @t1, @t2, @ts, @x) -> 588.58/148.23 c_19(dfs^#(::(@t1, ::(@t2, @ts)), @x)) } 588.58/148.23 588.58/148.23 We are left with following problem, upon which TcT provides the 588.58/148.23 certificate YES(O(1),O(1)). 588.58/148.23 588.58/148.23 Weak Trs: 588.58/148.23 { #equal(@x, @y) -> #eq(@x, @y) 588.58/148.23 , #eq(leaf(), leaf()) -> #true() 588.58/148.23 , #eq(leaf(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.23 , #eq(leaf(), nil()) -> #false() 588.58/148.23 , #eq(leaf(), ::(@y_1, @y_2)) -> #false() 588.58/148.23 , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y) 588.58/148.23 , #eq(#pos(@x), #0()) -> #false() 588.58/148.23 , #eq(#pos(@x), #neg(@y)) -> #false() 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), leaf()) -> #false() 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), node(@y_1, @y_2, @y_3)) -> 588.58/148.23 #and(#eq(@x_1, @y_1), #and(#eq(@x_2, @y_2), #eq(@x_3, @y_3))) 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), nil()) -> #false() 588.58/148.23 , #eq(node(@x_1, @x_2, @x_3), ::(@y_1, @y_2)) -> #false() 588.58/148.23 , #eq(nil(), leaf()) -> #false() 588.58/148.23 , #eq(nil(), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.23 , #eq(nil(), nil()) -> #true() 588.58/148.23 , #eq(nil(), ::(@y_1, @y_2)) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), leaf()) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), node(@y_1, @y_2, @y_3)) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), nil()) -> #false() 588.58/148.23 , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) -> 588.58/148.23 #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) 588.58/148.23 , #eq(#0(), #pos(@y)) -> #false() 588.58/148.23 , #eq(#0(), #0()) -> #true() 588.58/148.23 , #eq(#0(), #neg(@y)) -> #false() 588.58/148.23 , #eq(#0(), #s(@y)) -> #false() 588.58/148.23 , #eq(#neg(@x), #pos(@y)) -> #false() 588.58/148.23 , #eq(#neg(@x), #0()) -> #false() 588.58/148.23 , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y) 588.58/148.23 , #eq(#s(@x), #0()) -> #false() 588.58/148.23 , #eq(#s(@x), #s(@y)) -> #eq(@x, @y) 588.58/148.23 , #and(#true(), #true()) -> #true() 588.58/148.23 , #and(#true(), #false()) -> #false() 588.58/148.23 , #and(#false(), #true()) -> #false() 588.58/148.23 , #and(#false(), #false()) -> #false() } 588.58/148.23 Obligation: 588.58/148.23 innermost runtime complexity 588.58/148.23 Answer: 588.58/148.23 YES(O(1),O(1)) 588.58/148.23 588.58/148.23 No rule is usable, rules are removed from the input problem. 588.58/148.23 588.58/148.23 We are left with following problem, upon which TcT provides the 588.58/148.23 certificate YES(O(1),O(1)). 588.58/148.23 588.58/148.23 Rules: Empty 588.58/148.23 Obligation: 588.58/148.23 innermost runtime complexity 588.58/148.23 Answer: 588.58/148.23 YES(O(1),O(1)) 588.58/148.23 588.58/148.23 Empty rules are trivially bounded 588.58/148.23 588.58/148.23 588.58/148.23 Hurray, we answered YES(O(1),O(n^1)) 589.25/148.89 EOF