WORST_CASE(?,O(n^3)) * Step 1: DependencyPairs WORST_CASE(?,O(n^3)) + Considered Problem: - Strict TRS: #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) bfs2(@t,@x) -> bfs2#1(dobfs(@t,@x),@x) bfs2#1(@t',@x) -> dobfs(@t',@x) dfs(@queue,@x) -> dfs#1(@queue,@x) dfs#1(::(@t,@ts),@x) -> dfs#2(@t,@t,@ts,@x) dfs#1(nil(),@x) -> leaf() dfs#2(leaf(),@t,@ts,@x) -> dfs(@ts,@x) dfs#2(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3(#false(),@t,@t1,@t2,@ts,@x) -> dfs(::(@t1,::(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(::(@t,nil()),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1 ,#true/0,::/2,leaf/0,nil/0,node/3} - Obligation: innermost runtime complexity wrt. defined symbols {#and,#eq,#equal,appendreverse,appendreverse#1,bfs,bfs#1 ,bfs#2,bfs#3,bfs#4,bfs2,bfs2#1,dfs,dfs#1,dfs#2,dfs#3,dobfs,dodfs,reverse} and constructors {#0,#false,#neg ,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs #equal#(@x,@y) -> c_1(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_4() bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#2#(nil(),@x) -> c_9() bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_13() bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#1#(nil(),@x) -> c_18() dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_22() dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) Weak DPs #and#(#false(),#false()) -> c_26() #and#(#false(),#true()) -> c_27() #and#(#true(),#false()) -> c_28() #and#(#true(),#true()) -> c_29() #eq#(#0(),#0()) -> c_30() #eq#(#0(),#neg(@y)) -> c_31() #eq#(#0(),#pos(@y)) -> c_32() #eq#(#0(),#s(@y)) -> c_33() #eq#(#neg(@x),#0()) -> c_34() #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_36() #eq#(#pos(@x),#0()) -> c_37() #eq#(#pos(@x),#neg(@y)) -> c_38() #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_40() #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)) #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #eq#(::(@x_1,@x_2),leaf()) -> c_43() #eq#(::(@x_1,@x_2),nil()) -> c_44() #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45() #eq#(leaf(),::(@y_1,@y_2)) -> c_46() #eq#(leaf(),leaf()) -> c_47() #eq#(leaf(),nil()) -> c_48() #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49() #eq#(nil(),::(@y_1,@y_2)) -> c_50() #eq#(nil(),leaf()) -> c_51() #eq#(nil(),nil()) -> c_52() #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53() #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54() #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55() #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56() #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)) and mark the set of starting terms. * Step 2: PredecessorEstimation WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: #equal#(@x,@y) -> c_1(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_4() bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#2#(nil(),@x) -> c_9() bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_13() bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#1#(nil(),@x) -> c_18() dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_22() dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak DPs: #and#(#false(),#false()) -> c_26() #and#(#false(),#true()) -> c_27() #and#(#true(),#false()) -> c_28() #and#(#true(),#true()) -> c_29() #eq#(#0(),#0()) -> c_30() #eq#(#0(),#neg(@y)) -> c_31() #eq#(#0(),#pos(@y)) -> c_32() #eq#(#0(),#s(@y)) -> c_33() #eq#(#neg(@x),#0()) -> c_34() #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_36() #eq#(#pos(@x),#0()) -> c_37() #eq#(#pos(@x),#neg(@y)) -> c_38() #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_40() #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)) #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #eq#(::(@x_1,@x_2),leaf()) -> c_43() #eq#(::(@x_1,@x_2),nil()) -> c_44() #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45() #eq#(leaf(),::(@y_1,@y_2)) -> c_46() #eq#(leaf(),leaf()) -> c_47() #eq#(leaf(),nil()) -> c_48() #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49() #eq#(nil(),::(@y_1,@y_2)) -> c_50() #eq#(nil(),leaf()) -> c_51() #eq#(nil(),nil()) -> c_52() #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53() #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54() #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55() #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56() #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) bfs2(@t,@x) -> bfs2#1(dobfs(@t,@x),@x) bfs2#1(@t',@x) -> dobfs(@t',@x) dfs(@queue,@x) -> dfs#1(@queue,@x) dfs#1(::(@t,@ts),@x) -> dfs#2(@t,@t,@ts,@x) dfs#1(nil(),@x) -> leaf() dfs#2(leaf(),@t,@ts,@x) -> dfs(@ts,@x) dfs#2(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3(#false(),@t,@t1,@t2,@ts,@x) -> dfs(::(@t1,::(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(::(@t,nil()),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/2,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/2,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,4,9,13,18,22} by application of Pre({1,4,9,13,18,22}) = {2,7,11,16,20}. Here rules are labelled as follows: 1: #equal#(@x,@y) -> c_1(#eq#(@x,@y)) 2: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) 3: appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) 4: appendreverse#1#(nil(),@sofar) -> c_4() 5: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) 6: bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) 7: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) 8: bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) 9: bfs#2#(nil(),@x) -> c_9() 10: bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) 11: bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)) 12: bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) 13: bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_13() 14: bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) 15: bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) 16: dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) 17: dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) 18: dfs#1#(nil(),@x) -> c_18() 19: dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) 20: dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) 21: dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) 22: dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_22() 23: dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) 24: dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) 25: reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) 26: #and#(#false(),#false()) -> c_26() 27: #and#(#false(),#true()) -> c_27() 28: #and#(#true(),#false()) -> c_28() 29: #and#(#true(),#true()) -> c_29() 30: #eq#(#0(),#0()) -> c_30() 31: #eq#(#0(),#neg(@y)) -> c_31() 32: #eq#(#0(),#pos(@y)) -> c_32() 33: #eq#(#0(),#s(@y)) -> c_33() 34: #eq#(#neg(@x),#0()) -> c_34() 35: #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)) 36: #eq#(#neg(@x),#pos(@y)) -> c_36() 37: #eq#(#pos(@x),#0()) -> c_37() 38: #eq#(#pos(@x),#neg(@y)) -> c_38() 39: #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)) 40: #eq#(#s(@x),#0()) -> c_40() 41: #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)) 42: #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) 43: #eq#(::(@x_1,@x_2),leaf()) -> c_43() 44: #eq#(::(@x_1,@x_2),nil()) -> c_44() 45: #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45() 46: #eq#(leaf(),::(@y_1,@y_2)) -> c_46() 47: #eq#(leaf(),leaf()) -> c_47() 48: #eq#(leaf(),nil()) -> c_48() 49: #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49() 50: #eq#(nil(),::(@y_1,@y_2)) -> c_50() 51: #eq#(nil(),leaf()) -> c_51() 52: #eq#(nil(),nil()) -> c_52() 53: #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53() 54: #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54() 55: #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55() 56: #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56() 57: #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)) * Step 3: RemoveWeakSuffixes WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak DPs: #and#(#false(),#false()) -> c_26() #and#(#false(),#true()) -> c_27() #and#(#true(),#false()) -> c_28() #and#(#true(),#true()) -> c_29() #eq#(#0(),#0()) -> c_30() #eq#(#0(),#neg(@y)) -> c_31() #eq#(#0(),#pos(@y)) -> c_32() #eq#(#0(),#s(@y)) -> c_33() #eq#(#neg(@x),#0()) -> c_34() #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_36() #eq#(#pos(@x),#0()) -> c_37() #eq#(#pos(@x),#neg(@y)) -> c_38() #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_40() #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)) #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) #eq#(::(@x_1,@x_2),leaf()) -> c_43() #eq#(::(@x_1,@x_2),nil()) -> c_44() #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45() #eq#(leaf(),::(@y_1,@y_2)) -> c_46() #eq#(leaf(),leaf()) -> c_47() #eq#(leaf(),nil()) -> c_48() #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49() #eq#(nil(),::(@y_1,@y_2)) -> c_50() #eq#(nil(),leaf()) -> c_51() #eq#(nil(),nil()) -> c_52() #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53() #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54() #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55() #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56() #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)) #equal#(@x,@y) -> c_1(#eq#(@x,@y)) appendreverse#1#(nil(),@sofar) -> c_4() bfs#2#(nil(),@x) -> c_9() bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_13() dfs#1#(nil(),@x) -> c_18() dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_22() - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) bfs2(@t,@x) -> bfs2#1(dobfs(@t,@x),@x) bfs2#1(@t',@x) -> dobfs(@t',@x) dfs(@queue,@x) -> dfs#1(@queue,@x) dfs#1(::(@t,@ts),@x) -> dfs#2(@t,@t,@ts,@x) dfs#1(nil(),@x) -> leaf() dfs#2(leaf(),@t,@ts,@x) -> dfs(@ts,@x) dfs#2(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3(#false(),@t,@t1,@t2,@ts,@x) -> dfs(::(@t1,::(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(::(@t,nil()),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/2,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/2,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))):2 -->_1 appendreverse#1#(nil(),@sofar) -> c_4():53 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 3:S:bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)):5 -->_1 bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)):4 4:S:bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)):8 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)):7 5:S:bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))):6 -->_1 bfs#2#(nil(),@x) -> c_9():54 6:S:bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) -->_2 reverse#(@xs) -> c_25(appendreverse#(@xs,nil())):19 -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 7:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 8:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)) -->_2 #equal#(@x,@y) -> c_1(#eq#(@x,@y)):52 -->_1 bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)):9 -->_1 bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_13():55 9:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 10:S:bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):17 -->_1 bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)):11 11:S:bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):17 12:S:dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) -->_1 dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)):13 -->_1 dfs#1#(nil(),@x) -> c_18():56 13:S:dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) ,#equal#(@a,@x)):15 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)):14 14:S:dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 15:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) -->_2 #equal#(@x,@y) -> c_1(#eq#(@x,@y)):52 -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)):16 -->_1 dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_22():57 16:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 17:S:dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 18:S:dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 19:S:reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 20:W:#and#(#false(),#false()) -> c_26() 21:W:#and#(#false(),#true()) -> c_27() 22:W:#and#(#true(),#false()) -> c_28() 23:W:#and#(#true(),#true()) -> c_29() 24:W:#eq#(#0(),#0()) -> c_30() 25:W:#eq#(#0(),#neg(@y)) -> c_31() 26:W:#eq#(#0(),#pos(@y)) -> c_32() 27:W:#eq#(#0(),#s(@y)) -> c_33() 28:W:#eq#(#neg(@x),#0()) -> c_34() 29:W:#eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)) -->_1 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_1 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_1 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_1 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_1 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_1 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_1 #eq#(nil(),nil()) -> c_52():46 -->_1 #eq#(nil(),leaf()) -> c_51():45 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_1 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_1 #eq#(leaf(),nil()) -> c_48():42 -->_1 #eq#(leaf(),leaf()) -> c_47():41 -->_1 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_1 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_1 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_1 #eq#(#s(@x),#0()) -> c_40():34 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_1 #eq#(#pos(@x),#0()) -> c_37():31 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_1 #eq#(#neg(@x),#0()) -> c_34():28 -->_1 #eq#(#0(),#s(@y)) -> c_33():27 -->_1 #eq#(#0(),#pos(@y)) -> c_32():26 -->_1 #eq#(#0(),#neg(@y)) -> c_31():25 -->_1 #eq#(#0(),#0()) -> c_30():24 30:W:#eq#(#neg(@x),#pos(@y)) -> c_36() 31:W:#eq#(#pos(@x),#0()) -> c_37() 32:W:#eq#(#pos(@x),#neg(@y)) -> c_38() 33:W:#eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)) -->_1 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_1 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_1 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_1 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_1 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_1 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_1 #eq#(nil(),nil()) -> c_52():46 -->_1 #eq#(nil(),leaf()) -> c_51():45 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_1 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_1 #eq#(leaf(),nil()) -> c_48():42 -->_1 #eq#(leaf(),leaf()) -> c_47():41 -->_1 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_1 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_1 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_1 #eq#(#s(@x),#0()) -> c_40():34 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_1 #eq#(#pos(@x),#0()) -> c_37():31 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_1 #eq#(#neg(@x),#0()) -> c_34():28 -->_1 #eq#(#0(),#s(@y)) -> c_33():27 -->_1 #eq#(#0(),#pos(@y)) -> c_32():26 -->_1 #eq#(#0(),#neg(@y)) -> c_31():25 -->_1 #eq#(#0(),#0()) -> c_30():24 34:W:#eq#(#s(@x),#0()) -> c_40() 35:W:#eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)) -->_1 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_1 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_1 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_1 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_1 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_1 #eq#(nil(),nil()) -> c_52():46 -->_1 #eq#(nil(),leaf()) -> c_51():45 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_1 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_1 #eq#(leaf(),nil()) -> c_48():42 -->_1 #eq#(leaf(),leaf()) -> c_47():41 -->_1 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_1 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_1 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_1 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_1 #eq#(#s(@x),#0()) -> c_40():34 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_1 #eq#(#pos(@x),#0()) -> c_37():31 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_1 #eq#(#neg(@x),#0()) -> c_34():28 -->_1 #eq#(#0(),#s(@y)) -> c_33():27 -->_1 #eq#(#0(),#pos(@y)) -> c_32():26 -->_1 #eq#(#0(),#neg(@y)) -> c_31():25 -->_1 #eq#(#0(),#0()) -> c_30():24 36:W:#eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) -->_3 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_2 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_3 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_2 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_3 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_2 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_3 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_2 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_3 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_2 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_3 #eq#(nil(),nil()) -> c_52():46 -->_2 #eq#(nil(),nil()) -> c_52():46 -->_3 #eq#(nil(),leaf()) -> c_51():45 -->_2 #eq#(nil(),leaf()) -> c_51():45 -->_3 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_2 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_3 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_2 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_3 #eq#(leaf(),nil()) -> c_48():42 -->_2 #eq#(leaf(),nil()) -> c_48():42 -->_3 #eq#(leaf(),leaf()) -> c_47():41 -->_2 #eq#(leaf(),leaf()) -> c_47():41 -->_3 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_2 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_3 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_2 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_3 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_2 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_3 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_2 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_3 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_2 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_3 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_2 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_3 #eq#(#s(@x),#0()) -> c_40():34 -->_2 #eq#(#s(@x),#0()) -> c_40():34 -->_3 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_3 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_2 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_3 #eq#(#pos(@x),#0()) -> c_37():31 -->_2 #eq#(#pos(@x),#0()) -> c_37():31 -->_3 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_2 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_3 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_3 #eq#(#neg(@x),#0()) -> c_34():28 -->_2 #eq#(#neg(@x),#0()) -> c_34():28 -->_3 #eq#(#0(),#s(@y)) -> c_33():27 -->_2 #eq#(#0(),#s(@y)) -> c_33():27 -->_3 #eq#(#0(),#pos(@y)) -> c_32():26 -->_2 #eq#(#0(),#pos(@y)) -> c_32():26 -->_3 #eq#(#0(),#neg(@y)) -> c_31():25 -->_2 #eq#(#0(),#neg(@y)) -> c_31():25 -->_3 #eq#(#0(),#0()) -> c_30():24 -->_2 #eq#(#0(),#0()) -> c_30():24 -->_1 #and#(#true(),#true()) -> c_29():23 -->_1 #and#(#true(),#false()) -> c_28():22 -->_1 #and#(#false(),#true()) -> c_27():21 -->_1 #and#(#false(),#false()) -> c_26():20 37:W:#eq#(::(@x_1,@x_2),leaf()) -> c_43() 38:W:#eq#(::(@x_1,@x_2),nil()) -> c_44() 39:W:#eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45() 40:W:#eq#(leaf(),::(@y_1,@y_2)) -> c_46() 41:W:#eq#(leaf(),leaf()) -> c_47() 42:W:#eq#(leaf(),nil()) -> c_48() 43:W:#eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49() 44:W:#eq#(nil(),::(@y_1,@y_2)) -> c_50() 45:W:#eq#(nil(),leaf()) -> c_51() 46:W:#eq#(nil(),nil()) -> c_52() 47:W:#eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53() 48:W:#eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54() 49:W:#eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55() 50:W:#eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56() 51:W:#eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)) -->_5 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_4 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_2 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_5 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_4 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_2 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_5 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_4 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_2 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_5 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_4 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_2 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_5 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_4 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_2 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_5 #eq#(nil(),nil()) -> c_52():46 -->_4 #eq#(nil(),nil()) -> c_52():46 -->_2 #eq#(nil(),nil()) -> c_52():46 -->_5 #eq#(nil(),leaf()) -> c_51():45 -->_4 #eq#(nil(),leaf()) -> c_51():45 -->_2 #eq#(nil(),leaf()) -> c_51():45 -->_5 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_4 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_2 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_5 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_4 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_2 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_5 #eq#(leaf(),nil()) -> c_48():42 -->_4 #eq#(leaf(),nil()) -> c_48():42 -->_2 #eq#(leaf(),nil()) -> c_48():42 -->_5 #eq#(leaf(),leaf()) -> c_47():41 -->_4 #eq#(leaf(),leaf()) -> c_47():41 -->_2 #eq#(leaf(),leaf()) -> c_47():41 -->_5 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_4 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_2 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_5 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_4 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_2 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_5 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_4 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_2 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_5 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_4 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_2 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_5 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_4 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_2 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_5 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_4 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_2 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_5 #eq#(#s(@x),#0()) -> c_40():34 -->_4 #eq#(#s(@x),#0()) -> c_40():34 -->_2 #eq#(#s(@x),#0()) -> c_40():34 -->_5 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_4 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_5 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_4 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_2 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_5 #eq#(#pos(@x),#0()) -> c_37():31 -->_4 #eq#(#pos(@x),#0()) -> c_37():31 -->_2 #eq#(#pos(@x),#0()) -> c_37():31 -->_5 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_4 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_2 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_5 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_4 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_5 #eq#(#neg(@x),#0()) -> c_34():28 -->_4 #eq#(#neg(@x),#0()) -> c_34():28 -->_2 #eq#(#neg(@x),#0()) -> c_34():28 -->_5 #eq#(#0(),#s(@y)) -> c_33():27 -->_4 #eq#(#0(),#s(@y)) -> c_33():27 -->_2 #eq#(#0(),#s(@y)) -> c_33():27 -->_5 #eq#(#0(),#pos(@y)) -> c_32():26 -->_4 #eq#(#0(),#pos(@y)) -> c_32():26 -->_2 #eq#(#0(),#pos(@y)) -> c_32():26 -->_5 #eq#(#0(),#neg(@y)) -> c_31():25 -->_4 #eq#(#0(),#neg(@y)) -> c_31():25 -->_2 #eq#(#0(),#neg(@y)) -> c_31():25 -->_5 #eq#(#0(),#0()) -> c_30():24 -->_4 #eq#(#0(),#0()) -> c_30():24 -->_2 #eq#(#0(),#0()) -> c_30():24 -->_3 #and#(#true(),#true()) -> c_29():23 -->_1 #and#(#true(),#true()) -> c_29():23 -->_3 #and#(#true(),#false()) -> c_28():22 -->_1 #and#(#true(),#false()) -> c_28():22 -->_3 #and#(#false(),#true()) -> c_27():21 -->_1 #and#(#false(),#true()) -> c_27():21 -->_3 #and#(#false(),#false()) -> c_26():20 -->_1 #and#(#false(),#false()) -> c_26():20 52:W:#equal#(@x,@y) -> c_1(#eq#(@x,@y)) -->_1 #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)):51 -->_1 #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56():50 -->_1 #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55():49 -->_1 #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54():48 -->_1 #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53():47 -->_1 #eq#(nil(),nil()) -> c_52():46 -->_1 #eq#(nil(),leaf()) -> c_51():45 -->_1 #eq#(nil(),::(@y_1,@y_2)) -> c_50():44 -->_1 #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49():43 -->_1 #eq#(leaf(),nil()) -> c_48():42 -->_1 #eq#(leaf(),leaf()) -> c_47():41 -->_1 #eq#(leaf(),::(@y_1,@y_2)) -> c_46():40 -->_1 #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45():39 -->_1 #eq#(::(@x_1,@x_2),nil()) -> c_44():38 -->_1 #eq#(::(@x_1,@x_2),leaf()) -> c_43():37 -->_1 #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)):36 -->_1 #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)):35 -->_1 #eq#(#s(@x),#0()) -> c_40():34 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)):33 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_38():32 -->_1 #eq#(#pos(@x),#0()) -> c_37():31 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_36():30 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)):29 -->_1 #eq#(#neg(@x),#0()) -> c_34():28 -->_1 #eq#(#0(),#s(@y)) -> c_33():27 -->_1 #eq#(#0(),#pos(@y)) -> c_32():26 -->_1 #eq#(#0(),#neg(@y)) -> c_31():25 -->_1 #eq#(#0(),#0()) -> c_30():24 53:W:appendreverse#1#(nil(),@sofar) -> c_4() 54:W:bfs#2#(nil(),@x) -> c_9() 55:W:bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_13() 56:W:dfs#1#(nil(),@x) -> c_18() 57:W:dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_22() The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 56: dfs#1#(nil(),@x) -> c_18() 57: dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_22() 55: bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_13() 52: #equal#(@x,@y) -> c_1(#eq#(@x,@y)) 51: #eq#(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> c_57(#and#(#eq(@x_1,@y_1) ,#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) ,#eq#(@x_1,@y_1) ,#and#(#eq(@x_2,@y_2),#eq(@x_3,@y_3)) ,#eq#(@x_2,@y_2) ,#eq#(@x_3,@y_3)) 36: #eq#(::(@x_1,@x_2),::(@y_1,@y_2)) -> c_42(#and#(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) ,#eq#(@x_1,@y_1) ,#eq#(@x_2,@y_2)) 35: #eq#(#s(@x),#s(@y)) -> c_41(#eq#(@x,@y)) 33: #eq#(#pos(@x),#pos(@y)) -> c_39(#eq#(@x,@y)) 29: #eq#(#neg(@x),#neg(@y)) -> c_35(#eq#(@x,@y)) 20: #and#(#false(),#false()) -> c_26() 21: #and#(#false(),#true()) -> c_27() 22: #and#(#true(),#false()) -> c_28() 23: #and#(#true(),#true()) -> c_29() 24: #eq#(#0(),#0()) -> c_30() 25: #eq#(#0(),#neg(@y)) -> c_31() 26: #eq#(#0(),#pos(@y)) -> c_32() 27: #eq#(#0(),#s(@y)) -> c_33() 28: #eq#(#neg(@x),#0()) -> c_34() 30: #eq#(#neg(@x),#pos(@y)) -> c_36() 31: #eq#(#pos(@x),#0()) -> c_37() 32: #eq#(#pos(@x),#neg(@y)) -> c_38() 34: #eq#(#s(@x),#0()) -> c_40() 37: #eq#(::(@x_1,@x_2),leaf()) -> c_43() 38: #eq#(::(@x_1,@x_2),nil()) -> c_44() 39: #eq#(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> c_45() 40: #eq#(leaf(),::(@y_1,@y_2)) -> c_46() 41: #eq#(leaf(),leaf()) -> c_47() 42: #eq#(leaf(),nil()) -> c_48() 43: #eq#(leaf(),node(@y_1,@y_2,@y_3)) -> c_49() 44: #eq#(nil(),::(@y_1,@y_2)) -> c_50() 45: #eq#(nil(),leaf()) -> c_51() 46: #eq#(nil(),nil()) -> c_52() 47: #eq#(nil(),node(@y_1,@y_2,@y_3)) -> c_53() 48: #eq#(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> c_54() 49: #eq#(node(@x_1,@x_2,@x_3),leaf()) -> c_55() 50: #eq#(node(@x_1,@x_2,@x_3),nil()) -> c_56() 54: bfs#2#(nil(),@x) -> c_9() 53: appendreverse#1#(nil(),@sofar) -> c_4() * Step 4: SimplifyRHS WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) bfs2(@t,@x) -> bfs2#1(dobfs(@t,@x),@x) bfs2#1(@t',@x) -> dobfs(@t',@x) dfs(@queue,@x) -> dfs#1(@queue,@x) dfs#1(::(@t,@ts),@x) -> dfs#2(@t,@t,@ts,@x) dfs#1(nil(),@x) -> leaf() dfs#2(leaf(),@t,@ts,@x) -> dfs(@ts,@x) dfs#2(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3(#false(),@t,@t1,@t2,@ts,@x) -> dfs(::(@t1,::(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(::(@t,nil()),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/2,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/2,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 3:S:bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)):5 -->_1 bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)):4 4:S:bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)):8 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)):7 5:S:bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))):6 6:S:bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) -->_2 reverse#(@xs) -> c_25(appendreverse#(@xs,nil())):19 -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 7:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 8:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)) -->_1 bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts ,::(@t2,::(@t1,@futurequeue)) ,@x)):9 9:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 10:S:bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):17 -->_1 bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)):11 11:S:bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):17 12:S:dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) -->_1 dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)):13 13:S:dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) ,#equal#(@a,@x)):15 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)):14 14:S:dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 15:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)):16 16:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 17:S:dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 18:S:dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 19:S:reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) * Step 5: UsableRules WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) bfs2(@t,@x) -> bfs2#1(dobfs(@t,@x),@x) bfs2#1(@t',@x) -> dobfs(@t',@x) dfs(@queue,@x) -> dfs#1(@queue,@x) dfs#1(::(@t,@ts),@x) -> dfs#2(@t,@t,@ts,@x) dfs#1(nil(),@x) -> leaf() dfs#2(leaf(),@t,@ts,@x) -> dfs(@ts,@x) dfs#2(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3(#false(),@t,@t1,@t2,@ts,@x) -> dfs(::(@t1,::(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(::(@t,nil()),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) * Step 6: RemoveHeads WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 3:S:bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)):5 -->_1 bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)):4 4:S:bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y)):8 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)):7 5:S:bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))):6 6:S:bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) -->_2 reverse#(@xs) -> c_25(appendreverse#(@xs,nil())):19 -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 7:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 8:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y)) -->_1 bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts ,::(@t2,::(@t1,@futurequeue)) ,@x)):9 9:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 10:S:bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):17 -->_1 bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)):11 11:S:bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):17 12:S:dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) -->_1 dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)):13 13:S:dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)):15 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)):14 14:S:dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 15:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)):16 16:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 17:S:dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):3 18:S:dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):12 19:S:reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(18,dodfs#(@t,@x) -> c_24(dfs#(::(@t,nil()),@x)))] * Step 7: DecomposeDG WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) and a lower component appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) Further, following extension rules are added to the lower component. bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) bfs2#(@t,@x) -> dobfs#(@t,@x) bfs2#1#(@t',@x) -> dobfs#(@t',@x) dfs#(@queue,@x) -> dfs#1#(@queue,@x) dfs#1#(::(@t,@ts),@x) -> dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) -> dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> dfs#(::(@t1,::(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) ** Step 7.a:1: SimplifyRHS WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)):3 -->_1 bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)):2 2:S:bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y)):6 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)):5 3:S:bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))):4 4:S:bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x),reverse#(::(@t,@ts))) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):1 5:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):1 6:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y)) -->_1 bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts ,::(@t2,::(@t1,@futurequeue)) ,@x)):7 7:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):1 8:S:bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):15 -->_1 bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)):9 9:S:bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)):15 10:S:dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) -->_1 dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)):11 11:S:dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)):13 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)):12 12:S:dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):10 13:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)):14 14:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)):10 15:S:dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) ** Step 7.a:2: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(appendreverse) = [2] x2 + [0] p(appendreverse#1) = [2] x2 + [0] p(bfs) = [1] x1 + [2] p(bfs#1) = [1] x1 + [2] p(bfs#2) = [2] p(bfs#3) = [1] x3 + [2] p(bfs#4) = [1] x1 + [1] x5 + [2] p(bfs2) = [0] p(bfs2#1) = [0] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [2] x1 + [0] p(dfs#3) = [1] x4 + [1] x5 + [1] x6 + [0] p(dobfs) = [2] x2 + [4] p(dodfs) = [1] x1 + [0] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [2] x2 + [2] p(#eq#) = [2] p(#equal#) = [2] p(appendreverse#) = [1] x2 + [1] p(appendreverse#1#) = [2] x1 + [2] x2 + [1] p(bfs#) = [1] x1 + [2] p(bfs#1#) = [1] x1 + [4] p(bfs#2#) = [4] p(bfs#3#) = [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x5 + [0] p(bfs2#) = [1] x1 + [2] x2 + [2] p(bfs2#1#) = [1] x1 + [4] p(dfs#) = [4] p(dfs#1#) = [3] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [4] p(dobfs#) = [1] p(dodfs#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [1] x1 + [1] x2 + [0] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [0] p(c_23) = [1] x1 + [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @ts + [4] > [1] @ts + [0] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) = [4] > [2] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs2#1#(@t',@x) = [1] @t' + [4] > [1] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [4] > [3] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [3] > [0] = c_17(dfs#2#(@t,@t,@ts,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [2] >= [1] @queue + [4] = c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) = [4] >= [4] = c_7(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [2] = c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [2] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [1] @t + [2] @x + [2] >= [2] @x + [9] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [4] = c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [4] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [4] >= [4] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] >= [2] = c_23(bfs#(::(@t,nil()),nil(),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [2] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [2] >= [1] @queue + [2] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @ts + [2] >= [1] @ts + [2] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [2] >= [2] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [2] >= [2] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [2] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @ts + [2] >= [1] @ts + [2] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [2] >= [1] @ts + [2] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [2] >= [1] @ts + [2] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [2] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @x + [4] >= [2] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [0] >= [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:3: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak DPs: bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(appendreverse) = [2] x2 + [0] p(appendreverse#1) = [2] x2 + [0] p(bfs) = [1] x1 + [0] p(bfs#1) = [1] x1 + [0] p(bfs#2) = [0] p(bfs#3) = [1] x3 + [0] p(bfs#4) = [1] x1 + [1] x5 + [0] p(bfs2) = [0] p(bfs2#1) = [0] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [0] p(dfs#3) = [0] p(dobfs) = [3] x1 + [3] p(dodfs) = [0] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(appendreverse#) = [1] x2 + [0] p(appendreverse#1#) = [1] x1 + [1] x2 + [0] p(bfs#) = [1] x1 + [1] p(bfs#1#) = [1] x1 + [0] p(bfs#2#) = [1] p(bfs#3#) = [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x5 + [0] p(bfs2#) = [4] x1 + [4] x2 + [1] p(bfs2#1#) = [1] x1 + [4] x2 + [1] p(dfs#) = [4] p(dfs#1#) = [4] p(dfs#2#) = [4] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [1] p(dodfs#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [2] x1 + [0] p(c_3) = [0] p(c_4) = [1] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [1] x1 + [1] x2 + [0] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [0] p(c_23) = [1] x1 + [1] p(c_24) = [2] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [1] > [1] @queue + [0] = c_5(bfs#1#(@queue,@futurequeue,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [4] > [0] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) Following rules are (at-least) weakly oriented: bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [0] >= [1] = c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) = [1] >= [1] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [1] = c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [1] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [4] @t + [4] @x + [1] >= [4] @t + [4] @x + [5] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [4] @x + [1] >= [1] @t' + [1] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [4] >= [4] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [4] >= [4] = c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [4] >= [4] = c_19(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [4] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [1] >= [2] = c_23(bfs#(::(@t,nil()),nil(),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [2] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [0] >= [0] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [0] >= [0] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [3] @t + [3] >= [0] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [0] >= [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:4: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(appendreverse) = [1] x2 + [0] p(appendreverse#1) = [1] x2 + [0] p(bfs) = [1] x1 + [0] p(bfs#1) = [1] x1 + [0] p(bfs#2) = [1] p(bfs#3) = [1] x3 + [0] p(bfs#4) = [1] x1 + [1] x5 + [0] p(bfs2) = [0] p(bfs2#1) = [0] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [0] p(dfs#3) = [0] p(dobfs) = [2] x2 + [1] p(dodfs) = [0] p(leaf) = [0] p(nil) = [1] p(node) = [0] p(reverse) = [1] p(#and#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bfs#) = [1] x1 + [4] p(bfs#1#) = [1] x1 + [1] p(bfs#2#) = [5] p(bfs#3#) = [1] x3 + [1] p(bfs#4#) = [1] x1 + [1] x5 + [0] p(bfs2#) = [5] x1 + [7] x2 + [7] p(bfs2#1#) = [1] x1 + [4] x2 + [5] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [1] x2 + [0] p(dodfs#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [1] x1 + [1] x2 + [0] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [0] p(c_23) = [1] x1 + [2] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [1] > [1] @ts + [0] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) = [5] @t + [7] @x + [7] > [1] @t + [7] @x + [6] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [4] >= [1] @queue + [1] = c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @ts + [1] >= [1] @ts + [1] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [2] >= [5] = c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) = [5] >= [5] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [1] >= [1] @ts + [4] = c_10(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [4] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#1#(@t',@x) = [1] @t' + [4] @x + [5] >= [1] @t' + [1] @x + [0] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [0] >= [0] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [0] >= [0] = c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [1] @x + [0] >= [7] = c_23(bfs#(::(@t,nil()),nil(),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] >= [1] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [1] >= [1] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [1] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @x + [1] >= [1] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [1] >= [1] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:5: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [1] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [0] p(#s) = [0] p(#true) = [0] p(::) = [1] x2 + [0] p(appendreverse) = [1] x2 + [0] p(appendreverse#1) = [1] x2 + [0] p(bfs) = [1] x1 + [0] p(bfs#1) = [1] x1 + [0] p(bfs#2) = [0] p(bfs#3) = [1] x3 + [0] p(bfs#4) = [1] x1 + [1] x5 + [0] p(bfs2) = [1] x2 + [0] p(bfs2#1) = [2] x1 + [2] p(dfs) = [0] p(dfs#1) = [1] x1 + [4] x2 + [4] p(dfs#2) = [1] x1 + [1] x2 + [4] p(dfs#3) = [1] x1 + [1] x2 + [1] x3 + [1] x5 + [1] x6 + [0] p(dobfs) = [2] x1 + [0] p(dodfs) = [4] x2 + [0] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [4] x1 + [1] x2 + [2] p(#eq#) = [4] x2 + [0] p(#equal#) = [1] x2 + [2] p(appendreverse#) = [4] x1 + [0] p(appendreverse#1#) = [4] x1 + [1] x2 + [1] p(bfs#) = [1] x1 + [1] x2 + [0] p(bfs#1#) = [1] x1 + [1] x2 + [0] p(bfs#2#) = [3] p(bfs#3#) = [1] x2 + [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x2 + [1] x5 + [0] p(bfs2#) = [5] x1 + [4] x2 + [6] p(bfs2#1#) = [1] x1 + [3] x2 + [1] p(dfs#) = [1] p(dfs#1#) = [1] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] p(dodfs#) = [4] p(reverse#) = [1] x1 + [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [1] x1 + [1] p(c_4) = [2] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [2] p(c_9) = [0] p(c_10) = [1] x1 + [1] p(c_11) = [1] x1 + [0] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [1] x1 + [1] x2 + [2] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [1] p(c_19) = [1] x1 + [6] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [1] p(c_23) = [1] x1 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [1] p(c_26) = [0] p(c_27) = [1] p(c_28) = [4] p(c_29) = [1] p(c_30) = [1] p(c_31) = [0] p(c_32) = [1] p(c_33) = [4] p(c_34) = [1] p(c_35) = [1] x1 + [1] p(c_36) = [0] p(c_37) = [0] p(c_38) = [1] p(c_39) = [1] x1 + [1] p(c_40) = [1] p(c_41) = [0] p(c_42) = [1] x2 + [1] x3 + [0] p(c_43) = [2] p(c_44) = [1] p(c_45) = [0] p(c_46) = [2] p(c_47) = [1] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [2] p(c_52) = [1] p(c_53) = [1] p(c_54) = [0] p(c_55) = [1] p(c_56) = [4] p(c_57) = [1] x1 + [4] x2 + [1] x4 + [2] x5 + [4] Following rules are strictly oriented: dobfs#(@t,@x) = [1] > [0] = c_23(bfs#(::(@t,nil()),nil(),@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [3] = c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) = [3] >= [2] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [1] = c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [5] @t + [4] @x + [6] >= [2] @t + [3] @x + [4] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [3] @x + [1] >= [1] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [1] >= [1] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [1] >= [0] = c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [7] = c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [1] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [0] >= [0] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [0] >= [0] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @t + [0] >= [0] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [0] >= [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:6: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [1] p(#pos) = [1] x1 + [1] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bfs) = [1] x1 + [1] x2 + [0] p(bfs#1) = [1] x1 + [1] x2 + [0] p(bfs#2) = [1] x1 + [0] p(bfs#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [2] p(bfs2) = [0] p(bfs2#1) = [1] x2 + [1] p(dfs) = [1] x1 + [1] x2 + [0] p(dfs#1) = [2] x1 + [0] p(dfs#2) = [4] x1 + [2] x2 + [1] x4 + [2] p(dfs#3) = [1] x1 + [2] x3 + [1] x4 + [1] p(dobfs) = [2] x1 + [5] x2 + [0] p(dodfs) = [2] x1 + [0] p(leaf) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [0] p(#and#) = [0] p(#eq#) = [1] x1 + [0] p(#equal#) = [1] x1 + [1] x2 + [0] p(appendreverse#) = [1] x1 + [2] x2 + [1] p(appendreverse#1#) = [4] x1 + [4] x2 + [1] p(bfs#) = [1] x1 + [1] x2 + [0] p(bfs#1#) = [1] x1 + [1] x2 + [0] p(bfs#2#) = [1] x1 + [1] p(bfs#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [1] p(bfs2#) = [5] x1 + [5] x2 + [2] p(bfs2#1#) = [1] x1 + [1] p(dfs#) = [3] p(dfs#1#) = [2] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [0] p(dodfs#) = [2] x1 + [1] x2 + [1] p(reverse#) = [0] p(c_1) = [1] x1 + [1] p(c_2) = [4] x1 + [4] p(c_3) = [0] p(c_4) = [0] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [6] p(c_8) = [1] x1 + [1] p(c_9) = [1] p(c_10) = [1] x1 + [1] p(c_11) = [1] x1 + [1] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [1] x1 + [1] x2 + [1] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [1] p(c_17) = [1] x1 + [2] p(c_18) = [4] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [0] p(c_23) = [1] x1 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [4] x1 + [0] p(c_26) = [0] p(c_27) = [4] p(c_28) = [1] p(c_29) = [0] p(c_30) = [2] p(c_31) = [0] p(c_32) = [2] p(c_33) = [4] p(c_34) = [0] p(c_35) = [1] p(c_36) = [1] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [2] p(c_41) = [0] p(c_42) = [1] x2 + [1] x3 + [1] p(c_43) = [0] p(c_44) = [0] p(c_45) = [4] p(c_46) = [0] p(c_47) = [4] p(c_48) = [1] p(c_49) = [0] p(c_50) = [1] p(c_51) = [0] p(c_52) = [4] p(c_53) = [0] p(c_54) = [0] p(c_55) = [1] p(c_56) = [0] p(c_57) = [1] x1 + [1] x2 + [0] Following rules are strictly oriented: bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] > [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [7] = c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [1] = c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) = [5] @t + [5] @x + [2] >= [3] @t + [5] @x + [2] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [1] >= [1] @t' + [1] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [3] >= [3] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [2] >= [2] = c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [3] = c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [3] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [0] >= [1] @t + [0] = c_23(bfs#(::(@t,nil()),nil(),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] >= [1] @t1 + [1] @t2 + [2] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @t + [5] @x + [0] >= [1] @t + [0] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:7: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [1] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [1] p(#pos) = [2] p(#s) = [1] x1 + [4] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [1] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bfs) = [1] x1 + [1] x2 + [0] p(bfs#1) = [1] x1 + [1] x2 + [0] p(bfs#2) = [1] x1 + [0] p(bfs#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [4] p(bfs2) = [1] x2 + [2] p(bfs2#1) = [1] x1 + [1] p(dfs) = [1] x2 + [0] p(dfs#1) = [1] x2 + [4] p(dfs#2) = [2] x1 + [2] x3 + [0] p(dfs#3) = [1] x1 + [1] x3 + [1] x4 + [1] x5 + [1] p(dobfs) = [4] x1 + [1] p(dodfs) = [4] x1 + [4] x2 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [4] p(reverse) = [1] x1 + [0] p(#and#) = [1] x2 + [1] p(#eq#) = [1] x2 + [0] p(#equal#) = [2] x1 + [4] x2 + [0] p(appendreverse#) = [1] x2 + [0] p(appendreverse#1#) = [1] x1 + [1] x2 + [2] p(bfs#) = [1] x1 + [1] x2 + [1] p(bfs#1#) = [1] x1 + [1] x2 + [1] p(bfs#2#) = [1] x1 + [1] p(bfs#3#) = [1] x1 + [1] x2 + [1] x3 + [2] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [6] p(bfs2#) = [5] x1 + [4] x2 + [7] p(bfs2#1#) = [1] x1 + [4] x2 + [4] p(dfs#) = [4] p(dfs#1#) = [4] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [2] p(dodfs#) = [4] p(reverse#) = [0] p(c_1) = [1] p(c_2) = [2] x1 + [0] p(c_3) = [4] x1 + [4] p(c_4) = [0] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [4] p(c_8) = [1] x1 + [0] p(c_9) = [4] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [1] x1 + [3] p(c_13) = [0] p(c_14) = [1] x1 + [1] x2 + [0] p(c_15) = [1] x1 + [2] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [4] p(c_18) = [1] p(c_19) = [1] x1 + [3] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [1] p(c_22) = [2] p(c_23) = [1] x1 + [0] p(c_24) = [4] p(c_25) = [4] p(c_26) = [1] p(c_27) = [1] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] p(c_32) = [1] p(c_33) = [1] p(c_34) = [2] p(c_35) = [0] p(c_36) = [1] p(c_37) = [2] p(c_38) = [0] p(c_39) = [1] p(c_40) = [1] p(c_41) = [0] p(c_42) = [1] x1 + [1] x3 + [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [2] p(c_46) = [0] p(c_47) = [1] p(c_48) = [4] p(c_49) = [1] p(c_50) = [4] p(c_51) = [1] p(c_52) = [1] p(c_53) = [4] p(c_54) = [2] p(c_55) = [2] p(c_56) = [2] p(c_57) = [1] x1 + [1] x3 + [1] x4 + [0] Following rules are strictly oriented: bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [2] > [1] @futurequeue + [1] @ts + [1] = c_10(bfs#(@ts,@futurequeue,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [1] >= [1] @futurequeue + [1] @queue + [1] = c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [2] >= [1] @futurequeue + [1] @t + [1] @ts + [2] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [1] >= [1] @futurequeue + [5] = c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) = [1] @t + [1] @ts + [2] >= [1] @t + [1] @ts + [2] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [5] @t + [4] @x + [7] >= [5] @t + [4] @x + [7] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [4] @x + [4] >= [1] @t' + [4] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [4] >= [4] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [4] >= [4] = c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [7] = c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [5] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [2] >= [1] @t + [2] = c_23(bfs#(::(@t,nil()),nil(),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [1] >= [1] @a + [1] @as + [1] @sofar + [1] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [1] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @t1 + [1] @t2 + [4] = node(@y,@t1,@t2) dobfs(@t,@x) = [4] @t + [1] >= [1] @t + [1] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:8: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [2] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [2] p(#false) = [0] p(#neg) = [2] p(#pos) = [0] p(#s) = [1] x1 + [2] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bfs) = [1] x1 + [1] x2 + [4] p(bfs#1) = [1] x1 + [1] x2 + [4] p(bfs#2) = [1] x1 + [4] p(bfs#3) = [1] x1 + [1] x2 + [1] x3 + [4] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [4] p(bfs2) = [2] x1 + [4] x2 + [2] p(bfs2#1) = [1] p(dfs) = [1] p(dfs#1) = [4] p(dfs#2) = [4] x1 + [1] x3 + [2] x4 + [1] p(dfs#3) = [2] x1 + [2] x2 + [1] x3 + [1] x5 + [1] x6 + [4] p(dobfs) = [4] x1 + [2] x2 + [4] p(dodfs) = [1] x1 + [2] x2 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [3] p(reverse) = [1] x1 + [0] p(#and#) = [1] x1 + [1] x2 + [0] p(#eq#) = [0] p(#equal#) = [4] x1 + [1] x2 + [1] p(appendreverse#) = [1] x2 + [0] p(appendreverse#1#) = [2] x2 + [1] p(bfs#) = [1] x1 + [1] x2 + [0] p(bfs#1#) = [1] x1 + [1] x2 + [0] p(bfs#2#) = [1] x1 + [0] p(bfs#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [1] p(bfs2#) = [5] x1 + [7] x2 + [5] p(bfs2#1#) = [1] x1 + [2] x2 + [1] p(dfs#) = [3] x1 + [0] p(dfs#1#) = [3] x1 + [0] p(dfs#2#) = [3] x1 + [3] x3 + [0] p(dfs#3#) = [1] x1 + [3] x3 + [3] x4 + [3] x5 + [1] p(dobfs#) = [1] x1 + [1] x2 + [0] p(dodfs#) = [1] x1 + [0] p(reverse#) = [1] x1 + [0] p(c_1) = [4] p(c_2) = [1] p(c_3) = [0] p(c_4) = [1] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [7] p(c_8) = [1] x1 + [0] p(c_9) = [1] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [1] x1 + [1] x2 + [0] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [0] p(c_19) = [1] x1 + [1] p(c_20) = [1] x1 + [6] p(c_21) = [1] x1 + [0] p(c_22) = [0] p(c_23) = [1] x1 + [0] p(c_24) = [0] p(c_25) = [2] p(c_26) = [4] p(c_27) = [2] p(c_28) = [1] p(c_29) = [1] p(c_30) = [2] p(c_31) = [0] p(c_32) = [1] p(c_33) = [1] p(c_34) = [2] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [1] p(c_39) = [2] x1 + [0] p(c_40) = [0] p(c_41) = [1] x1 + [1] p(c_42) = [4] x1 + [4] x3 + [1] p(c_43) = [0] p(c_44) = [0] p(c_45) = [4] p(c_46) = [1] p(c_47) = [1] p(c_48) = [4] p(c_49) = [1] p(c_50) = [1] p(c_51) = [2] p(c_52) = [0] p(c_53) = [1] p(c_54) = [1] p(c_55) = [0] p(c_56) = [4] p(c_57) = [1] x1 + [4] x4 + [2] x5 + [0] Following rules are strictly oriented: dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [3] @t1 + [3] @t2 + [3] @ts + [1] > [3] @t1 + [3] @t2 + [3] @ts + [0] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [7] = c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [3] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [3] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [5] @t + [7] @x + [5] >= [5] @t + [5] @x + [5] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [2] @x + [1] >= [1] @t' + [1] @x + [1] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [3] @queue + [0] >= [3] @queue + [0] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [3] @t + [3] @ts + [0] >= [3] @t + [3] @ts + [0] = c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [3] @ts + [0] >= [3] @ts + [1] = c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [3] @t1 + [3] @t2 + [3] @ts + [9] >= [3] @t1 + [3] @t2 + [3] @ts + [9] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dobfs#(@t,@x) = [1] @t + [1] @x + [0] >= [1] @t + [0] = c_23(bfs#(::(@t,nil()),nil(),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [2] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [4] >= [1] @futurequeue + [1] @queue + [4] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [4] >= [1] @futurequeue + [1] @t + [1] @ts + [4] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [4] >= [1] @futurequeue + [4] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [1] @t + [1] @ts + [4] >= [1] @t + [1] @ts + [4] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [4] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [4] >= [1] @futurequeue + [1] @ts + [4] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [7] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @t1 + [1] @t2 + [3] = node(@y,@t1,@t2) dobfs(@t,@x) = [4] @t + [2] @x + [4] >= [1] @t + [4] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:9: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(dfs#3#) = {1}, uargs(c_5) = {1}, uargs(c_6) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_11) = {1}, uargs(c_12) = {1}, uargs(c_14) = {1,2}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_21) = {1}, uargs(c_23) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [2] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [4] p(#pos) = [1] x1 + [0] p(#s) = [0] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bfs) = [1] x1 + [1] x2 + [4] p(bfs#1) = [1] x1 + [1] x2 + [4] p(bfs#2) = [1] x1 + [4] p(bfs#3) = [1] x1 + [1] x2 + [1] x3 + [4] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [4] p(bfs2) = [4] x2 + [1] p(bfs2#1) = [1] x1 + [1] p(dfs) = [1] p(dfs#1) = [1] x1 + [1] p(dfs#2) = [1] x1 + [1] x4 + [4] p(dfs#3) = [1] x1 + [1] x2 + [1] x3 + [4] x5 + [4] x6 + [0] p(dobfs) = [2] x1 + [2] x2 + [4] p(dodfs) = [2] x1 + [1] x2 + [4] p(leaf) = [1] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [0] p(reverse) = [1] x1 + [0] p(#and#) = [2] x2 + [1] p(#eq#) = [4] x1 + [1] x2 + [2] p(#equal#) = [1] x1 + [2] x2 + [4] p(appendreverse#) = [2] x1 + [2] p(appendreverse#1#) = [0] p(bfs#) = [1] x1 + [1] x2 + [0] p(bfs#1#) = [1] x1 + [1] x2 + [0] p(bfs#2#) = [1] x1 + [0] p(bfs#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [0] p(bfs2#) = [4] x1 + [5] x2 + [7] p(bfs2#1#) = [1] x1 + [1] x2 + [1] p(dfs#) = [4] x1 + [0] p(dfs#1#) = [4] x1 + [0] p(dfs#2#) = [4] x1 + [4] x3 + [0] p(dfs#3#) = [1] x1 + [4] x3 + [4] x4 + [4] x5 + [0] p(dobfs#) = [1] x1 + [0] p(dodfs#) = [1] x1 + [1] x2 + [0] p(reverse#) = [4] x1 + [0] p(c_1) = [4] x1 + [0] p(c_2) = [1] x1 + [0] p(c_3) = [1] p(c_4) = [0] p(c_5) = [1] x1 + [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [1] p(c_8) = [1] x1 + [0] p(c_9) = [1] p(c_10) = [1] x1 + [0] p(c_11) = [1] x1 + [0] p(c_12) = [1] x1 + [0] p(c_13) = [1] p(c_14) = [1] x1 + [1] x2 + [2] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [0] p(c_18) = [1] p(c_19) = [1] x1 + [1] p(c_20) = [1] x1 + [0] p(c_21) = [1] x1 + [0] p(c_22) = [0] p(c_23) = [1] x1 + [0] p(c_24) = [0] p(c_25) = [2] x1 + [1] p(c_26) = [1] p(c_27) = [1] p(c_28) = [1] p(c_29) = [1] p(c_30) = [0] p(c_31) = [2] p(c_32) = [1] p(c_33) = [2] p(c_34) = [4] p(c_35) = [1] x1 + [4] p(c_36) = [1] p(c_37) = [1] p(c_38) = [0] p(c_39) = [4] x1 + [0] p(c_40) = [4] p(c_41) = [0] p(c_42) = [2] x3 + [0] p(c_43) = [0] p(c_44) = [1] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [4] p(c_49) = [4] p(c_50) = [1] p(c_51) = [0] p(c_52) = [0] p(c_53) = [4] p(c_54) = [2] p(c_55) = [1] p(c_56) = [2] p(c_57) = [1] x1 + [4] x4 + [0] Following rules are strictly oriented: dfs#2#(leaf(),@t,@ts,@x) = [4] @ts + [4] > [4] @ts + [1] = c_19(dfs#(@ts,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [1] = c_7(bfs#2#(@futurequeue,@x)) bfs#2#(::(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [1] >= [1] @futurequeue + [1] @ts + [0] = c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [4] @t + [5] @x + [7] >= [3] @t + [3] @x + [7] = c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [1] @x + [1] >= [1] @t' + [1] = c_15(dobfs#(@t',@x)) dfs#(@queue,@x) = [4] @queue + [0] >= [4] @queue + [0] = c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) = [4] @t + [4] @ts + [0] >= [4] @t + [4] @ts + [0] = c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [4] @t1 + [4] @t2 + [4] @ts + [0] >= [4] @t1 + [4] @t2 + [4] @ts + [0] = c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [4] @t1 + [4] @t2 + [4] @ts + [0] >= [4] @t1 + [4] @t2 + [4] @ts + [0] = c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [0] >= [1] @t + [0] = c_23(bfs#(::(@t,nil()),nil(),@x)) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [4] >= [1] @futurequeue + [1] @queue + [4] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [4] >= [1] @futurequeue + [1] @t + [1] @ts + [4] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [4] >= [1] @futurequeue + [4] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [1] @t + [1] @ts + [4] >= [1] @t + [1] @ts + [4] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [4] >= [1] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [5] >= [1] @futurequeue + [1] @ts + [4] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] >= [1] @t1 + [1] @t2 + [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @t + [2] @x + [4] >= [1] @t + [4] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:10: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_5(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(::(@t,@ts),@futurequeue,@x) -> c_6(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(::(@t,@ts),@x) -> c_8(bfs#(reverse(::(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_10(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_11(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_12(bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_14(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_15(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_16(dfs#1#(@queue,@x)) dfs#1#(::(@t,@ts),@x) -> c_17(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_19(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_20(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_21(dfs#(::(@t1,::(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_23(bfs#(::(@t,nil()),nil(),@x)) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 2, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0, 0) #and :: ["A"(3, 3) x "A"(3, 3)] -(0)-> "A"(12, 12) #eq :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(9, 9) #equal :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(4, 4) #false :: [] -(0)-> "A"(3, 3) #false :: [] -(0)-> "A"(0, 0) #false :: [] -(0)-> "A"(15, 15) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(3, 3) #true :: [] -(0)-> "A"(15, 15) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(7, 0) x "A"(7, 4)] -(4)-> "A"(7, 4) :: :: ["A"(7, 0) x "A"(7, 3)] -(3)-> "A"(7, 3) :: :: ["A"(7, 0) x "A"(7, 5)] -(5)-> "A"(7, 5) :: :: ["A"(6, 0) x "A"(6, 1)] -(1)-> "A"(6, 1) :: :: ["A"(8, 0) x "A"(8, 3)] -(3)-> "A"(8, 3) appendreverse :: ["A"(7, 4) x "A"(7, 4)] -(0)-> "A"(7, 4) appendreverse#1 :: ["A"(7, 4) x "A"(7, 4)] -(0)-> "A"(7, 4) bfs :: ["A"(7, 3) x "A"(7, 4) x "A"(9, 8)] -(1)-> "A"(7, 9) bfs#1 :: ["A"(7, 3) x "A"(7, 4) x "A"(9, 8)] -(1)-> "A"(7, 9) bfs#2 :: ["A"(7, 4) x "A"(9, 8)] -(1)-> "A"(7, 9) bfs#3 :: ["A"(7, 0) x "A"(7, 4) x "A"(7, 3) x "A"(9, 8)] -(3)-> "A"(7, 9) bfs#4 :: ["A"(3, 3) x "A"(7, 4) x "A"(7, 0) x "A"(7, 0) x "A"(7, 3) x "A"(9, 8) x "A"(0, 0)] -(10)-> "A"(7, 9) dobfs :: ["A"(8, 8) x "A"(9, 9)] -(5)-> "A"(7, 7) leaf :: [] -(0)-> "A"(0, 0) leaf :: [] -(0)-> "A"(7, 0) leaf :: [] -(0)-> "A"(6, 0) leaf :: [] -(0)-> "A"(13, 15) nil :: [] -(0)-> "A"(7, 3) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(7, 4) nil :: [] -(0)-> "A"(15, 11) nil :: [] -(0)-> "A"(15, 13) nil :: [] -(0)-> "A"(15, 15) nil :: [] -(0)-> "A"(13, 13) nil :: [] -(0)-> "A"(14, 15) node :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) node :: ["A"(0, 0) x "A"(7, 0) x "A"(7, 0)] -(7)-> "A"(7, 0) node :: ["A"(0, 0) x "A"(6, 0) x "A"(6, 0)] -(6)-> "A"(6, 0) node :: ["A"(0, 0) x "A"(7, 0) x "A"(7, 0)] -(7)-> "A"(7, 10) reverse :: ["A"(7, 4)] -(0)-> "A"(7, 3) bfs# :: ["A"(7, 3) x "A"(7, 5) x "A"(0, 0)] -(2)-> "A"(12, 8) bfs#1# :: ["A"(7, 3) x "A"(7, 5) x "A"(0, 0)] -(2)-> "A"(1, 9) bfs#2# :: ["A"(7, 5) x "A"(0, 0)] -(1)-> "A"(12, 12) bfs#3# :: ["A"(7, 0) x "A"(7, 5) x "A"(7, 3) x "A"(0, 0)] -(5)-> "A"(2, 1) bfs#4# :: ["A"(3, 3) x "A"(7, 5) x "A"(7, 0) x "A"(7, 0) x "A"(7, 3) x "A"(0, 0) x "A"(0, 0)] -(12)-> "A"(7, 1) bfs2# :: ["A"(15, 15) x "A"(15, 15)] -(15)-> "A"(2, 0) bfs2#1# :: ["A"(7, 5) x "A"(2, 3)] -(5)-> "A"(13, 5) dfs# :: ["A"(6, 1) x "A"(8, 8)] -(8)-> "A"(0, 0) dfs#1# :: ["A"(6, 1) x "A"(8, 8)] -(7)-> "A"(1, 11) dfs#2# :: ["A"(6, 0) x "A"(0, 0) x "A"(6, 1) x "A"(8, 8)] -(8)-> "A"(1, 2) dfs#3# :: ["A"(0, 0) x "A"(0, 0) x "A"(6, 0) x "A"(6, 0) x "A"(6, 1) x "A"(8, 8)] -(13)-> "A"(5, 4) dobfs# :: ["A"(7, 2) x "A"(2, 2)] -(5)-> "A"(14, 2) c_5 :: ["A"(0, 0)] -(0)-> "A"(12, 12) c_6 :: ["A"(0, 0)] -(0)-> "A"(13, 12) c_7 :: ["A"(9, 12)] -(0)-> "A"(9, 12) c_8 :: ["A"(12, 0)] -(0)-> "A"(12, 12) c_10 :: ["A"(0, 3)] -(0)-> "A"(2, 3) c_11 :: ["A"(1, 0)] -(0)-> "A"(11, 1) c_12 :: ["A"(0, 0)] -(0)-> "A"(7, 12) c_14 :: ["A"(13, 0) x "A"(13, 0)] -(0)-> "A"(13, 0) c_15 :: ["A"(0, 0)] -(0)-> "A"(13, 7) c_16 :: ["A"(0, 0)] -(0)-> "A"(1, 8) c_17 :: ["A"(1, 0)] -(0)-> "A"(1, 12) c_19 :: ["A"(0, 0)] -(0)-> "A"(3, 3) c_20 :: ["A"(5, 2)] -(0)-> "A"(3, 2) c_21 :: ["A"(0, 0)] -(0)-> "A"(5, 6) c_23 :: ["A"(0, 3)] -(0)-> "A"(14, 3) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(0) "#false_A" :: [] -(0)-> "A"(0) "#neg_A" :: ["A"(0)] -(0)-> "A"(0) "#pos_A" :: ["A"(0)] -(0)-> "A"(0) "#s_A" :: ["A"(0)] -(0)-> "A"(0) "#true_A" :: [] -(0)-> "A"(0) "::_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) "c_10_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_10_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_11_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_11_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_12_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_12_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_14_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(1, 0) "c_14_A" :: ["A"(0) x "A"(0)] -(1)-> "A"(0, 1) "c_15_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_15_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_16_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_16_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_17_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_17_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_19_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_19_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_20_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_20_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_21_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_21_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_23_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_23_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_5_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_5_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_6_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_6_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_7_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_8_A" :: ["A"(0)] -(0)-> "A"(0, 1) "leaf_A" :: [] -(0)-> "A"(1, 0) "leaf_A" :: [] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "node_A" :: ["A"(0, 0) x "A"(1, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) "node_A" :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bfs#1#(nil(),@futurequeue,@x) -> c_7(bfs#2#(@futurequeue,@x)) 2. Weak: ** Step 7.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) bfs2#(@t,@x) -> dobfs#(@t,@x) bfs2#1#(@t',@x) -> dobfs#(@t',@x) dfs#(@queue,@x) -> dfs#1#(@queue,@x) dfs#1#(::(@t,@ts),@x) -> dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) -> dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> dfs#(::(@t1,::(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 3:S:reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 4:W:bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) -->_1 bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x):6 -->_1 bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x):5 5:W:bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y):10 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x):9 6:W:bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) -->_1 bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)):8 -->_1 bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x):7 7:W:bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 8:W:bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) -->_1 reverse#(@xs) -> c_25(appendreverse#(@xs,nil())):3 9:W:bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 10:W:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) -->_1 bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x):11 11:W:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 12:W:bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) -->_1 bfs2#1#(@t',@x) -> dobfs#(@t',@x):14 13:W:bfs2#(@t,@x) -> dobfs#(@t,@x) -->_1 dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x):20 14:W:bfs2#1#(@t',@x) -> dobfs#(@t',@x) -->_1 dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x):20 15:W:dfs#(@queue,@x) -> dfs#1#(@queue,@x) -->_1 dfs#1#(::(@t,@ts),@x) -> dfs#2#(@t,@t,@ts,@x):16 16:W:dfs#1#(::(@t,@ts),@x) -> dfs#2#(@t,@t,@ts,@x) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x):18 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> dfs#(@ts,@x):17 17:W:dfs#2#(leaf(),@t,@ts,@x) -> dfs#(@ts,@x) -->_1 dfs#(@queue,@x) -> dfs#1#(@queue,@x):15 18:W:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> dfs#(::(@t1,::(@t2,@ts)),@x):19 19:W:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> dfs#(::(@t1,::(@t2,@ts)),@x) -->_1 dfs#(@queue,@x) -> dfs#1#(@queue,@x):15 20:W:dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 15: dfs#(@queue,@x) -> dfs#1#(@queue,@x) 19: dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> dfs#(::(@t1,::(@t2,@ts)),@x) 18: dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) 16: dfs#1#(::(@t,@ts),@x) -> dfs#2#(@t,@t,@ts,@x) 17: dfs#2#(leaf(),@t,@ts,@x) -> dfs#(@ts,@x) ** Step 7.b:2: RemoveHeads WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) bfs2#(@t,@x) -> dobfs#(@t,@x) bfs2#1#(@t',@x) -> dobfs#(@t',@x) dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 3:S:reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)):1 4:W:bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) -->_1 bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x):6 -->_1 bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x):5 5:W:bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y):10 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x):9 6:W:bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) -->_1 bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)):8 -->_1 bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x):7 7:W:bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 8:W:bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) -->_1 reverse#(@xs) -> c_25(appendreverse#(@xs,nil())):3 9:W:bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 10:W:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) -->_1 bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x):11 11:W:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 12:W:bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) -->_1 bfs2#1#(@t',@x) -> dobfs#(@t',@x):14 13:W:bfs2#(@t,@x) -> dobfs#(@t,@x) -->_1 dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x):20 14:W:bfs2#1#(@t',@x) -> dobfs#(@t',@x) -->_1 dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x):20 20:W:dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):4 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(13,bfs2#(@t,@x) -> dobfs#(@t,@x))] ** Step 7.b:3: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) -> dobfs#(@t',@x) dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(c_2) = {1}, uargs(c_3) = {1}, uargs(c_25) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [0] p(::) = [1] x2 + [0] p(appendreverse) = [2] x2 + [0] p(appendreverse#1) = [2] x2 + [0] p(bfs) = [1] x1 + [0] p(bfs#1) = [1] x1 + [0] p(bfs#2) = [0] p(bfs#3) = [1] x3 + [0] p(bfs#4) = [1] x1 + [1] x5 + [0] p(bfs2) = [0] p(bfs2#1) = [0] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [0] p(dfs#3) = [0] p(dobfs) = [3] x2 + [1] p(dodfs) = [0] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(appendreverse#) = [2] p(appendreverse#1#) = [0] p(bfs#) = [1] x1 + [1] x2 + [2] p(bfs#1#) = [1] x1 + [1] x2 + [2] p(bfs#2#) = [2] p(bfs#3#) = [1] x2 + [1] x3 + [2] p(bfs#4#) = [1] x1 + [1] x2 + [1] x5 + [2] p(bfs2#) = [4] x2 + [4] p(bfs2#1#) = [1] x1 + [1] x2 + [3] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [0] p(dobfs#) = [1] x1 + [3] p(dodfs#) = [0] p(reverse#) = [2] p(c_1) = [0] p(c_2) = [1] x1 + [0] p(c_3) = [1] x1 + [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [1] x1 + [1] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: appendreverse#(@toreverse,@sofar) = [2] > [0] = c_2(appendreverse#1#(@toreverse,@sofar)) Following rules are (at-least) weakly oriented: appendreverse#1#(::(@a,@as),@sofar) = [0] >= [2] = c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [2] >= [1] @futurequeue + [1] @queue + [2] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @ts + [2] >= [1] @futurequeue + [1] @ts + [2] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [2] >= [2] = bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) = [2] >= [2] = bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) = [2] >= [2] = reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [2] >= [1] @futurequeue + [1] @ts + [2] = bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [2] >= [1] @futurequeue + [1] @ts + [2] = bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @ts + [2] >= [1] @futurequeue + [1] @ts + [2] = bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [4] @x + [4] >= [4] @x + [4] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [1] @x + [3] >= [1] @t' + [3] = dobfs#(@t',@x) dobfs#(@t,@x) = [1] @t + [3] >= [2] = bfs#(::(@t,nil()),nil(),@x) reverse#(@xs) = [2] >= [3] = c_25(appendreverse#(@xs,nil())) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [2] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [0] >= [0] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [0] >= [0] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [0] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [3] @x + [1] >= [0] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [0] >= [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.b:4: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) -> dobfs#(@t',@x) dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_2) = {1}, uargs(c_3) = {1}, uargs(c_25) = {1} Following symbols are considered usable: {#and,#eq,#equal,#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs#,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2# ,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs#,reverse#} TcT has computed the following interpretation: p(#0) = [0] p(#and) = [1] p(#eq) = [1] p(#equal) = [1] p(#false) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [0] p(#s) = [0] p(#true) = [1] p(::) = [0] p(appendreverse) = [0] p(appendreverse#1) = [0] p(bfs) = [4] x1 + [0] p(bfs#1) = [0] p(bfs#2) = [0] p(bfs#3) = [0] p(bfs#4) = [0] p(bfs2) = [0] p(bfs2#1) = [0] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [0] p(dfs#3) = [0] p(dobfs) = [0] p(dodfs) = [0] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [3] p(#and#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bfs#) = [2] p(bfs#1#) = [2] p(bfs#2#) = [2] p(bfs#3#) = [2] p(bfs#4#) = [2] p(bfs2#) = [2] p(bfs2#1#) = [2] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [0] p(dobfs#) = [2] p(dodfs#) = [0] p(reverse#) = [2] p(c_1) = [0] p(c_2) = [1] x1 + [0] p(c_3) = [1] x1 + [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [2] p(c_25) = [4] x1 + [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: reverse#(@xs) = [2] > [0] = c_25(appendreverse#(@xs,nil())) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [0] >= [0] = c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) = [0] >= [0] = c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [2] >= [2] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) = [2] >= [2] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [2] >= [2] = bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) = [2] >= [2] = bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) = [2] >= [2] = reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [2] >= [2] = bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [2] >= [2] = bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [2] >= [2] = bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [2] >= [2] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [2] >= [2] = dobfs#(@t',@x) dobfs#(@t,@x) = [2] >= [2] = bfs#(::(@t,nil()),nil(),@x) #and(#false(),#false()) = [1] >= [0] = #false() #and(#false(),#true()) = [1] >= [0] = #false() #and(#true(),#false()) = [1] >= [0] = #false() #and(#true(),#true()) = [1] >= [1] = #true() #eq(#0(),#0()) = [1] >= [1] = #true() #eq(#0(),#neg(@y)) = [1] >= [0] = #false() #eq(#0(),#pos(@y)) = [1] >= [0] = #false() #eq(#0(),#s(@y)) = [1] >= [0] = #false() #eq(#neg(@x),#0()) = [1] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [1] >= [1] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [1] >= [0] = #false() #eq(#pos(@x),#0()) = [1] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [1] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [1] >= [1] = #eq(@x,@y) #eq(#s(@x),#0()) = [1] >= [0] = #false() #eq(#s(@x),#s(@y)) = [1] >= [1] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [1] >= [1] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [1] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [1] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [1] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [1] >= [0] = #false() #eq(leaf(),leaf()) = [1] >= [1] = #true() #eq(leaf(),nil()) = [1] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [1] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [1] >= [0] = #false() #eq(nil(),leaf()) = [1] >= [0] = #false() #eq(nil(),nil()) = [1] >= [1] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [1] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [1] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [1] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [1] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [1] >= [1] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [1] >= [1] = #eq(@x,@y) ** Step 7.b:5: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) - Weak DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) -> dobfs#(@t',@x) dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#and) = {1,2}, uargs(bfs) = {1}, uargs(bfs#4) = {1}, uargs(bfs#) = {1}, uargs(bfs#4#) = {1}, uargs(bfs2#1#) = {1}, uargs(c_2) = {1}, uargs(c_3) = {1}, uargs(c_25) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [2] p(#and) = [1] x1 + [1] x2 + [0] p(#eq) = [0] p(#equal) = [0] p(#false) = [0] p(#neg) = [1] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [2] p(#true) = [0] p(::) = [1] x1 + [1] x2 + [2] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bfs) = [1] x1 + [1] x2 + [0] p(bfs#1) = [1] x1 + [1] x2 + [0] p(bfs#2) = [1] x1 + [0] p(bfs#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [1] x7 + [4] p(bfs2) = [1] x1 + [1] p(bfs2#1) = [2] x1 + [1] x2 + [1] p(dfs) = [4] x2 + [0] p(dfs#1) = [1] x1 + [4] p(dfs#2) = [1] x2 + [0] p(dfs#3) = [2] x2 + [2] x3 + [1] x4 + [4] x5 + [0] p(dobfs) = [4] x1 + [7] x2 + [2] p(dodfs) = [1] x1 + [1] x2 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [4] p(reverse) = [1] x1 + [0] p(#and#) = [0] p(#eq#) = [1] x1 + [2] p(#equal#) = [1] x1 + [1] p(appendreverse#) = [1] x1 + [0] p(appendreverse#1#) = [1] x1 + [0] p(bfs#) = [1] x1 + [1] x2 + [2] p(bfs#1#) = [1] x1 + [1] x2 + [2] p(bfs#2#) = [1] x1 + [2] p(bfs#3#) = [1] x1 + [1] x2 + [1] x3 + [4] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [6] p(bfs2#) = [5] x1 + [7] x2 + [7] p(bfs2#1#) = [1] x1 + [5] p(dfs#) = [1] x2 + [1] p(dfs#1#) = [1] p(dfs#2#) = [1] x1 + [1] x3 + [4] p(dfs#3#) = [4] x1 + [1] x2 + [2] x4 + [1] x6 + [0] p(dobfs#) = [1] x1 + [5] p(dodfs#) = [1] x2 + [0] p(reverse#) = [1] x1 + [0] p(c_1) = [1] x1 + [1] p(c_2) = [1] x1 + [0] p(c_3) = [1] x1 + [1] p(c_4) = [1] p(c_5) = [4] p(c_6) = [0] p(c_7) = [1] x1 + [2] p(c_8) = [1] x2 + [0] p(c_9) = [1] p(c_10) = [1] x1 + [1] p(c_11) = [4] x1 + [0] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [1] x2 + [0] p(c_15) = [4] x1 + [1] p(c_16) = [4] x1 + [1] p(c_17) = [1] p(c_18) = [1] p(c_19) = [1] x1 + [0] p(c_20) = [2] p(c_21) = [0] p(c_22) = [2] p(c_23) = [0] p(c_24) = [1] x1 + [2] p(c_25) = [1] x1 + [0] p(c_26) = [0] p(c_27) = [2] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [4] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [2] x1 + [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [1] p(c_39) = [2] x1 + [4] p(c_40) = [0] p(c_41) = [1] x1 + [1] p(c_42) = [1] x1 + [4] x3 + [1] p(c_43) = [1] p(c_44) = [0] p(c_45) = [0] p(c_46) = [1] p(c_47) = [2] p(c_48) = [1] p(c_49) = [1] p(c_50) = [0] p(c_51) = [1] p(c_52) = [1] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [1] p(c_57) = [1] x1 + [1] x2 + [1] x4 + [1] x5 + [0] Following rules are strictly oriented: appendreverse#1#(::(@a,@as),@sofar) = [1] @a + [1] @as + [2] > [1] @as + [1] = c_3(appendreverse#(@as,::(@a,@sofar))) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [1] @toreverse + [0] >= [1] @toreverse + [0] = c_2(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [2] >= [1] @futurequeue + [1] @queue + [2] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [4] >= [1] @futurequeue + [1] @t + [1] @ts + [4] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [2] >= [1] @futurequeue + [2] = bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) = [1] @t + [1] @ts + [4] >= [1] @t + [1] @ts + [4] = bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) = [1] @t + [1] @ts + [4] >= [1] @t + [1] @ts + [2] = reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [4] >= [1] @futurequeue + [1] @ts + [2] = bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [8] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] = bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] = bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [5] @t + [7] @x + [7] >= [4] @t + [7] @x + [7] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [5] >= [1] @t' + [5] = dobfs#(@t',@x) dobfs#(@t,@x) = [1] @t + [5] >= [1] @t + [4] = bfs#(::(@t,nil()),nil(),@x) reverse#(@xs) = [1] @xs + [0] >= [1] @xs + [0] = c_25(appendreverse#(@xs,nil())) #and(#false(),#false()) = [0] >= [0] = #false() #and(#false(),#true()) = [0] >= [0] = #false() #and(#true(),#false()) = [0] >= [0] = #false() #and(#true(),#true()) = [0] >= [0] = #true() #eq(#0(),#0()) = [0] >= [0] = #true() #eq(#0(),#neg(@y)) = [0] >= [0] = #false() #eq(#0(),#pos(@y)) = [0] >= [0] = #false() #eq(#0(),#s(@y)) = [0] >= [0] = #false() #eq(#neg(@x),#0()) = [0] >= [0] = #false() #eq(#neg(@x),#neg(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#neg(@x),#pos(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#0()) = [0] >= [0] = #false() #eq(#pos(@x),#neg(@y)) = [0] >= [0] = #false() #eq(#pos(@x),#pos(@y)) = [0] >= [0] = #eq(@x,@y) #eq(#s(@x),#0()) = [0] >= [0] = #false() #eq(#s(@x),#s(@y)) = [0] >= [0] = #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),nil()) = [0] >= [0] = #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(leaf(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(leaf(),leaf()) = [0] >= [0] = #true() #eq(leaf(),nil()) = [0] >= [0] = #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(nil(),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(nil(),leaf()) = [0] >= [0] = #false() #eq(nil(),nil()) = [0] >= [0] = #true() #eq(nil(),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),leaf()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),nil()) = [0] >= [0] = #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) = [0] >= [0] = #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) = [0] >= [0] = #eq(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [2] >= [1] @a + [1] @as + [1] @sofar + [2] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [2] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) = [1] @t + [1] @ts + [2] >= [1] @t + [1] @ts + [2] = bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [4] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [4] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [4] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [4] = bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [4] >= [1] @t1 + [1] @t2 + [1] @y + [4] = node(@y,@t1,@t2) dobfs(@t,@x) = [4] @t + [7] @x + [2] >= [1] @t + [2] = bfs(::(@t,nil()),nil(),@x) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.b:6: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: appendreverse#(@toreverse,@sofar) -> c_2(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_3(appendreverse#(@as,::(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(::(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(::(@t,@ts),@x) -> bfs#(reverse(::(@t,@ts)),nil(),@x) bfs#2#(::(@t,@ts),@x) -> reverse#(::(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) -> dobfs#(@t',@x) dobfs#(@t,@x) -> bfs#(::(@t,nil()),nil(),@x) reverse#(@xs) -> c_25(appendreverse#(@xs,nil())) - Weak TRS: #and(#false(),#false()) -> #false() #and(#false(),#true()) -> #false() #and(#true(),#false()) -> #false() #and(#true(),#true()) -> #true() #eq(#0(),#0()) -> #true() #eq(#0(),#neg(@y)) -> #false() #eq(#0(),#pos(@y)) -> #false() #eq(#0(),#s(@y)) -> #false() #eq(#neg(@x),#0()) -> #false() #eq(#neg(@x),#neg(@y)) -> #eq(@x,@y) #eq(#neg(@x),#pos(@y)) -> #false() #eq(#pos(@x),#0()) -> #false() #eq(#pos(@x),#neg(@y)) -> #false() #eq(#pos(@x),#pos(@y)) -> #eq(@x,@y) #eq(#s(@x),#0()) -> #false() #eq(#s(@x),#s(@y)) -> #eq(@x,@y) #eq(::(@x_1,@x_2),::(@y_1,@y_2)) -> #and(#eq(@x_1,@y_1),#eq(@x_2,@y_2)) #eq(::(@x_1,@x_2),leaf()) -> #false() #eq(::(@x_1,@x_2),nil()) -> #false() #eq(::(@x_1,@x_2),node(@y_1,@y_2,@y_3)) -> #false() #eq(leaf(),::(@y_1,@y_2)) -> #false() #eq(leaf(),leaf()) -> #true() #eq(leaf(),nil()) -> #false() #eq(leaf(),node(@y_1,@y_2,@y_3)) -> #false() #eq(nil(),::(@y_1,@y_2)) -> #false() #eq(nil(),leaf()) -> #false() #eq(nil(),nil()) -> #true() #eq(nil(),node(@y_1,@y_2,@y_3)) -> #false() #eq(node(@x_1,@x_2,@x_3),::(@y_1,@y_2)) -> #false() #eq(node(@x_1,@x_2,@x_3),leaf()) -> #false() #eq(node(@x_1,@x_2,@x_3),nil()) -> #false() #eq(node(@x_1,@x_2,@x_3),node(@y_1,@y_2,@y_3)) -> #and(#eq(@x_1,@y_1),#and(#eq(@x_2,@y_2),#eq(@x_3,@y_3))) #equal(@x,@y) -> #eq(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(::(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(::(@t,@ts),@x) -> bfs(reverse(::(@t,@ts)),nil(),@x) bfs#2(nil(),@x) -> leaf() bfs#3(leaf(),@futurequeue,@ts,@x) -> bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs(@ts,::(@t2,::(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(::(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#and/2,#eq/2,#equal/2,appendreverse/2,appendreverse#1/2,bfs/3,bfs#1/3,bfs#2/2,bfs#3/4,bfs#4/7,bfs2/2 ,bfs2#1/2,dfs/2,dfs#1/2,dfs#2/4,dfs#3/6,dobfs/2,dodfs/2,reverse/1,#and#/2,#eq#/2,#equal#/2,appendreverse#/2 ,appendreverse#1#/2,bfs#/3,bfs#1#/3,bfs#2#/2,bfs#3#/4,bfs#4#/7,bfs2#/2,bfs2#1#/2,dfs#/2,dfs#1#/2,dfs#2#/4 ,dfs#3#/6,dobfs#/2,dodfs#/2,reverse#/1} / {#0/0,#false/0,#neg/1,#pos/1,#s/1,#true/0,::/2,leaf/0,nil/0,node/3 ,c_1/1,c_2/1,c_3/1,c_4/0,c_5/1,c_6/1,c_7/1,c_8/2,c_9/0,c_10/1,c_11/1,c_12/1,c_13/0,c_14/2,c_15/1,c_16/1 ,c_17/1,c_18/0,c_19/1,c_20/1,c_21/1,c_22/0,c_23/1,c_24/1,c_25/1,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/0,c_33/0,c_34/0,c_35/1,c_36/0,c_37/0,c_38/0,c_39/1,c_40/0,c_41/1,c_42/3,c_43/0,c_44/0,c_45/0,c_46/0 ,c_47/0,c_48/0,c_49/0,c_50/0,c_51/0,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/5} - Obligation: innermost runtime complexity wrt. defined symbols {#and#,#eq#,#equal#,appendreverse#,appendreverse#1#,bfs# ,bfs#1#,bfs#2#,bfs#3#,bfs#4#,bfs2#,bfs2#1#,dfs#,dfs#1#,dfs#2#,dfs#3#,dobfs#,dodfs# ,reverse#} and constructors {#0,#false,#neg,#pos,#s,#true,::,leaf,nil,node} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). WORST_CASE(?,O(n^3))