WORST_CASE(?,O(n^3)) * Step 1: DependencyPairs WORST_CASE(?,O(n^3)) + Considered Problem: - Strict 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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@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(dd(@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(dd(@t1,dd(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(dd(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(dd(@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} / {#0/0,#false/0,#neg/1,#pos/1,#s/1 ,#true/0,dd/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,dd,leaf,nil,node} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs #and#(#false(),#false()) -> c_1() #and#(#false(),#true()) -> c_2() #and#(#true(),#false()) -> c_3() #and#(#true(),#true()) -> c_4() #eq#(#0(),#0()) -> c_5() #eq#(#0(),#neg(@y)) -> c_6() #eq#(#0(),#pos(@y)) -> c_7() #eq#(#0(),#s(@y)) -> c_8() #eq#(#neg(@x),#0()) -> c_9() #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_11() #eq#(#pos(@x),#0()) -> c_12() #eq#(#pos(@x),#neg(@y)) -> c_13() #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_15() #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)) #eq#(dd(@x'1,@x'2),leaf()) -> c_18() #eq#(dd(@x'1,@x'2),nil()) -> c_19() #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20() #eq#(leaf(),dd(@y'1,@y'2)) -> c_21() #eq#(leaf(),leaf()) -> c_22() #eq#(leaf(),nil()) -> c_23() #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24() #eq#(nil(),dd(@y'1,@y'2)) -> c_25() #eq#(nil(),leaf()) -> c_26() #eq#(nil(),nil()) -> c_27() #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28() #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29() #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30() #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31() #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_36() bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#2#(nil(),@x) -> c_41() bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_45() bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#1#(nil(),@x) -> c_50() dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_54() dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) Weak DPs and mark the set of starting terms. * Step 2: PredecessorEstimation WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: #and#(#false(),#false()) -> c_1() #and#(#false(),#true()) -> c_2() #and#(#true(),#false()) -> c_3() #and#(#true(),#true()) -> c_4() #eq#(#0(),#0()) -> c_5() #eq#(#0(),#neg(@y)) -> c_6() #eq#(#0(),#pos(@y)) -> c_7() #eq#(#0(),#s(@y)) -> c_8() #eq#(#neg(@x),#0()) -> c_9() #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#neg(@x),#pos(@y)) -> c_11() #eq#(#pos(@x),#0()) -> c_12() #eq#(#pos(@x),#neg(@y)) -> c_13() #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#0()) -> c_15() #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)) #eq#(dd(@x'1,@x'2),leaf()) -> c_18() #eq#(dd(@x'1,@x'2),nil()) -> c_19() #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20() #eq#(leaf(),dd(@y'1,@y'2)) -> c_21() #eq#(leaf(),leaf()) -> c_22() #eq#(leaf(),nil()) -> c_23() #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24() #eq#(nil(),dd(@y'1,@y'2)) -> c_25() #eq#(nil(),leaf()) -> c_26() #eq#(nil(),nil()) -> c_27() #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28() #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29() #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30() #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31() #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_36() bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#2#(nil(),@x) -> c_41() bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_45() bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#1#(nil(),@x) -> c_50() dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_54() dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@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(dd(@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(dd(@t1,dd(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(dd(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/3,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/5,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,leaf,nil,node} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,2,3,4,5,6,7,8,9,11,12,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,36,41,45,50,54} by application of Pre({1,2,3,4,5,6,7,8,9,11,12,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,36,41,45,50,54}) = {10,14,16 ,17,32,33,34,39,43,48,52}. Here rules are labelled as follows: 1: #and#(#false(),#false()) -> c_1() 2: #and#(#false(),#true()) -> c_2() 3: #and#(#true(),#false()) -> c_3() 4: #and#(#true(),#true()) -> c_4() 5: #eq#(#0(),#0()) -> c_5() 6: #eq#(#0(),#neg(@y)) -> c_6() 7: #eq#(#0(),#pos(@y)) -> c_7() 8: #eq#(#0(),#s(@y)) -> c_8() 9: #eq#(#neg(@x),#0()) -> c_9() 10: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) 11: #eq#(#neg(@x),#pos(@y)) -> c_11() 12: #eq#(#pos(@x),#0()) -> c_12() 13: #eq#(#pos(@x),#neg(@y)) -> c_13() 14: #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) 15: #eq#(#s(@x),#0()) -> c_15() 16: #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) 17: #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)) 18: #eq#(dd(@x'1,@x'2),leaf()) -> c_18() 19: #eq#(dd(@x'1,@x'2),nil()) -> c_19() 20: #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20() 21: #eq#(leaf(),dd(@y'1,@y'2)) -> c_21() 22: #eq#(leaf(),leaf()) -> c_22() 23: #eq#(leaf(),nil()) -> c_23() 24: #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24() 25: #eq#(nil(),dd(@y'1,@y'2)) -> c_25() 26: #eq#(nil(),leaf()) -> c_26() 27: #eq#(nil(),nil()) -> c_27() 28: #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28() 29: #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29() 30: #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30() 31: #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31() 32: #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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)) 33: #equal#(@x,@y) -> c_33(#eq#(@x,@y)) 34: appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) 35: appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) 36: appendreverse#1#(nil(),@sofar) -> c_36() 37: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) 38: bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) 39: bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) 40: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) 41: bfs#2#(nil(),@x) -> c_41() 42: bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) 43: bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)) 44: bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) 45: bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_45() 46: bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) 47: bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) 48: dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) 49: dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) 50: dfs#1#(nil(),@x) -> c_50() 51: dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) 52: dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) 53: dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) 54: dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_54() 55: dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) 56: dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) 57: reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) * Step 3: RemoveWeakSuffixes WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) - Weak DPs: #and#(#false(),#false()) -> c_1() #and#(#false(),#true()) -> c_2() #and#(#true(),#false()) -> c_3() #and#(#true(),#true()) -> c_4() #eq#(#0(),#0()) -> c_5() #eq#(#0(),#neg(@y)) -> c_6() #eq#(#0(),#pos(@y)) -> c_7() #eq#(#0(),#s(@y)) -> c_8() #eq#(#neg(@x),#0()) -> c_9() #eq#(#neg(@x),#pos(@y)) -> c_11() #eq#(#pos(@x),#0()) -> c_12() #eq#(#pos(@x),#neg(@y)) -> c_13() #eq#(#s(@x),#0()) -> c_15() #eq#(dd(@x'1,@x'2),leaf()) -> c_18() #eq#(dd(@x'1,@x'2),nil()) -> c_19() #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20() #eq#(leaf(),dd(@y'1,@y'2)) -> c_21() #eq#(leaf(),leaf()) -> c_22() #eq#(leaf(),nil()) -> c_23() #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24() #eq#(nil(),dd(@y'1,@y'2)) -> c_25() #eq#(nil(),leaf()) -> c_26() #eq#(nil(),nil()) -> c_27() #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28() #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29() #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30() #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31() appendreverse#1#(nil(),@sofar) -> c_36() bfs#2#(nil(),@x) -> c_41() bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_45() dfs#1#(nil(),@x) -> c_50() dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_54() - 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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@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(dd(@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(dd(@t1,dd(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(dd(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/3,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/5,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,leaf,nil,node} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:#eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_1 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_1 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_1 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_1 #eq#(nil(),nil()) -> c_27():48 -->_1 #eq#(nil(),leaf()) -> c_26():47 -->_1 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_1 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_1 #eq#(leaf(),nil()) -> c_23():44 -->_1 #eq#(leaf(),leaf()) -> c_22():43 -->_1 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_1 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_1 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_1 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_1 #eq#(#s(@x),#0()) -> c_15():38 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_1 #eq#(#pos(@x),#0()) -> c_12():36 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_1 #eq#(#neg(@x),#0()) -> c_9():34 -->_1 #eq#(#0(),#s(@y)) -> c_8():33 -->_1 #eq#(#0(),#pos(@y)) -> c_7():32 -->_1 #eq#(#0(),#neg(@y)) -> c_6():31 -->_1 #eq#(#0(),#0()) -> c_5():30 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 2:S:#eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_1 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_1 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_1 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_1 #eq#(nil(),nil()) -> c_27():48 -->_1 #eq#(nil(),leaf()) -> c_26():47 -->_1 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_1 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_1 #eq#(leaf(),nil()) -> c_23():44 -->_1 #eq#(leaf(),leaf()) -> c_22():43 -->_1 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_1 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_1 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_1 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_1 #eq#(#s(@x),#0()) -> c_15():38 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_1 #eq#(#pos(@x),#0()) -> c_12():36 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_1 #eq#(#neg(@x),#0()) -> c_9():34 -->_1 #eq#(#0(),#s(@y)) -> c_8():33 -->_1 #eq#(#0(),#pos(@y)) -> c_7():32 -->_1 #eq#(#0(),#neg(@y)) -> c_6():31 -->_1 #eq#(#0(),#0()) -> c_5():30 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 3:S:#eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_1 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_1 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_1 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_1 #eq#(nil(),nil()) -> c_27():48 -->_1 #eq#(nil(),leaf()) -> c_26():47 -->_1 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_1 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_1 #eq#(leaf(),nil()) -> c_23():44 -->_1 #eq#(leaf(),leaf()) -> c_22():43 -->_1 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_1 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_1 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_1 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_1 #eq#(#s(@x),#0()) -> c_15():38 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_1 #eq#(#pos(@x),#0()) -> c_12():36 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_1 #eq#(#neg(@x),#0()) -> c_9():34 -->_1 #eq#(#0(),#s(@y)) -> c_8():33 -->_1 #eq#(#0(),#pos(@y)) -> c_7():32 -->_1 #eq#(#0(),#neg(@y)) -> c_6():31 -->_1 #eq#(#0(),#0()) -> c_5():30 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 4:S:#eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#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_32(#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 -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_3 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_2 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_3 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_2 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_3 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_2 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_3 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_2 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_3 #eq#(nil(),nil()) -> c_27():48 -->_2 #eq#(nil(),nil()) -> c_27():48 -->_3 #eq#(nil(),leaf()) -> c_26():47 -->_2 #eq#(nil(),leaf()) -> c_26():47 -->_3 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_2 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_3 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_2 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_3 #eq#(leaf(),nil()) -> c_23():44 -->_2 #eq#(leaf(),nil()) -> c_23():44 -->_3 #eq#(leaf(),leaf()) -> c_22():43 -->_2 #eq#(leaf(),leaf()) -> c_22():43 -->_3 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_2 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_3 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_2 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_3 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_2 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_3 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_2 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_3 #eq#(#s(@x),#0()) -> c_15():38 -->_2 #eq#(#s(@x),#0()) -> c_15():38 -->_3 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_2 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_3 #eq#(#pos(@x),#0()) -> c_12():36 -->_2 #eq#(#pos(@x),#0()) -> c_12():36 -->_3 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_2 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_3 #eq#(#neg(@x),#0()) -> c_9():34 -->_2 #eq#(#neg(@x),#0()) -> c_9():34 -->_3 #eq#(#0(),#s(@y)) -> c_8():33 -->_2 #eq#(#0(),#s(@y)) -> c_8():33 -->_3 #eq#(#0(),#pos(@y)) -> c_7():32 -->_2 #eq#(#0(),#pos(@y)) -> c_7():32 -->_3 #eq#(#0(),#neg(@y)) -> c_6():31 -->_2 #eq#(#0(),#neg(@y)) -> c_6():31 -->_3 #eq#(#0(),#0()) -> c_5():30 -->_2 #eq#(#0(),#0()) -> c_5():30 -->_1 #and#(#true(),#true()) -> c_4():29 -->_1 #and#(#true(),#false()) -> c_3():28 -->_1 #and#(#false(),#true()) -> c_2():27 -->_1 #and#(#false(),#false()) -> c_1():26 -->_3 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_3 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_3 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_3 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 5:S:#eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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),nil()) -> c_31():52 -->_4 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_2 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_5 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_4 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_2 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_5 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_4 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_2 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_5 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_4 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_2 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_5 #eq#(nil(),nil()) -> c_27():48 -->_4 #eq#(nil(),nil()) -> c_27():48 -->_2 #eq#(nil(),nil()) -> c_27():48 -->_5 #eq#(nil(),leaf()) -> c_26():47 -->_4 #eq#(nil(),leaf()) -> c_26():47 -->_2 #eq#(nil(),leaf()) -> c_26():47 -->_5 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_4 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_2 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_5 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_4 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_2 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_5 #eq#(leaf(),nil()) -> c_23():44 -->_4 #eq#(leaf(),nil()) -> c_23():44 -->_2 #eq#(leaf(),nil()) -> c_23():44 -->_5 #eq#(leaf(),leaf()) -> c_22():43 -->_4 #eq#(leaf(),leaf()) -> c_22():43 -->_2 #eq#(leaf(),leaf()) -> c_22():43 -->_5 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_4 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_2 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_5 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_4 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_2 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_5 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_4 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_2 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_5 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_4 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_2 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_5 #eq#(#s(@x),#0()) -> c_15():38 -->_4 #eq#(#s(@x),#0()) -> c_15():38 -->_2 #eq#(#s(@x),#0()) -> c_15():38 -->_5 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_4 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_2 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_5 #eq#(#pos(@x),#0()) -> c_12():36 -->_4 #eq#(#pos(@x),#0()) -> c_12():36 -->_2 #eq#(#pos(@x),#0()) -> c_12():36 -->_5 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_4 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_2 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_5 #eq#(#neg(@x),#0()) -> c_9():34 -->_4 #eq#(#neg(@x),#0()) -> c_9():34 -->_2 #eq#(#neg(@x),#0()) -> c_9():34 -->_5 #eq#(#0(),#s(@y)) -> c_8():33 -->_4 #eq#(#0(),#s(@y)) -> c_8():33 -->_2 #eq#(#0(),#s(@y)) -> c_8():33 -->_5 #eq#(#0(),#pos(@y)) -> c_7():32 -->_4 #eq#(#0(),#pos(@y)) -> c_7():32 -->_2 #eq#(#0(),#pos(@y)) -> c_7():32 -->_5 #eq#(#0(),#neg(@y)) -> c_6():31 -->_4 #eq#(#0(),#neg(@y)) -> c_6():31 -->_2 #eq#(#0(),#neg(@y)) -> c_6():31 -->_5 #eq#(#0(),#0()) -> c_5():30 -->_4 #eq#(#0(),#0()) -> c_5():30 -->_2 #eq#(#0(),#0()) -> c_5():30 -->_3 #and#(#true(),#true()) -> c_4():29 -->_1 #and#(#true(),#true()) -> c_4():29 -->_3 #and#(#true(),#false()) -> c_3():28 -->_1 #and#(#true(),#false()) -> c_3():28 -->_3 #and#(#false(),#true()) -> c_2():27 -->_1 #and#(#false(),#true()) -> c_2():27 -->_3 #and#(#false(),#false()) -> c_1():26 -->_1 #and#(#false(),#false()) -> c_1():26 -->_5 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_4 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_5 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_4 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_5 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_4 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_5 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_4 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_5 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_4 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 6:S:#equal#(@x,@y) -> c_33(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31():52 -->_1 #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30():51 -->_1 #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29():50 -->_1 #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28():49 -->_1 #eq#(nil(),nil()) -> c_27():48 -->_1 #eq#(nil(),leaf()) -> c_26():47 -->_1 #eq#(nil(),dd(@y'1,@y'2)) -> c_25():46 -->_1 #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24():45 -->_1 #eq#(leaf(),nil()) -> c_23():44 -->_1 #eq#(leaf(),leaf()) -> c_22():43 -->_1 #eq#(leaf(),dd(@y'1,@y'2)) -> c_21():42 -->_1 #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20():41 -->_1 #eq#(dd(@x'1,@x'2),nil()) -> c_19():40 -->_1 #eq#(dd(@x'1,@x'2),leaf()) -> c_18():39 -->_1 #eq#(#s(@x),#0()) -> c_15():38 -->_1 #eq#(#pos(@x),#neg(@y)) -> c_13():37 -->_1 #eq#(#pos(@x),#0()) -> c_12():36 -->_1 #eq#(#neg(@x),#pos(@y)) -> c_11():35 -->_1 #eq#(#neg(@x),#0()) -> c_9():34 -->_1 #eq#(#0(),#s(@y)) -> c_8():33 -->_1 #eq#(#0(),#pos(@y)) -> c_7():32 -->_1 #eq#(#0(),#neg(@y)) -> c_6():31 -->_1 #eq#(#0(),#0()) -> c_5():30 -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 7:S:appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))):8 -->_1 appendreverse#1#(nil(),@sofar) -> c_36():53 8:S:appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 9:S:bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)):11 -->_1 bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)):10 10:S:bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)):14 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)):13 11:S:bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))):12 -->_1 bfs#2#(nil(),@x) -> c_41():54 12:S:bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) -->_2 reverse#(@xs) -> c_57(appendreverse#(@xs,nil())):25 -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 13:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 14:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(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_44(bfs#(@ts ,dd(@t2,dd(@t1,@futurequeue)) ,@x)):15 -->_1 bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_45():55 -->_2 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 15:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 16:S:bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):23 -->_1 bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)):17 17:S:bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):23 18:S:dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) -->_1 dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)):19 -->_1 dfs#1#(nil(),@x) -> c_50():56 19:S:dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) ,#equal#(@a,@x)):21 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)):20 20:S:dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 21:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)):22 -->_1 dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_54():57 -->_2 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 22:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 23:S:dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 24:S:dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 25:S:reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 26:W:#and#(#false(),#false()) -> c_1() 27:W:#and#(#false(),#true()) -> c_2() 28:W:#and#(#true(),#false()) -> c_3() 29:W:#and#(#true(),#true()) -> c_4() 30:W:#eq#(#0(),#0()) -> c_5() 31:W:#eq#(#0(),#neg(@y)) -> c_6() 32:W:#eq#(#0(),#pos(@y)) -> c_7() 33:W:#eq#(#0(),#s(@y)) -> c_8() 34:W:#eq#(#neg(@x),#0()) -> c_9() 35:W:#eq#(#neg(@x),#pos(@y)) -> c_11() 36:W:#eq#(#pos(@x),#0()) -> c_12() 37:W:#eq#(#pos(@x),#neg(@y)) -> c_13() 38:W:#eq#(#s(@x),#0()) -> c_15() 39:W:#eq#(dd(@x'1,@x'2),leaf()) -> c_18() 40:W:#eq#(dd(@x'1,@x'2),nil()) -> c_19() 41:W:#eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20() 42:W:#eq#(leaf(),dd(@y'1,@y'2)) -> c_21() 43:W:#eq#(leaf(),leaf()) -> c_22() 44:W:#eq#(leaf(),nil()) -> c_23() 45:W:#eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24() 46:W:#eq#(nil(),dd(@y'1,@y'2)) -> c_25() 47:W:#eq#(nil(),leaf()) -> c_26() 48:W:#eq#(nil(),nil()) -> c_27() 49:W:#eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28() 50:W:#eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29() 51:W:#eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30() 52:W:#eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31() 53:W:appendreverse#1#(nil(),@sofar) -> c_36() 54:W:bfs#2#(nil(),@x) -> c_41() 55:W:bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_45() 56:W:dfs#1#(nil(),@x) -> c_50() 57:W:dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_54() 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_50() 57: dfs#3#(#true(),@t,@t1,@t2,@ts,@x) -> c_54() 55: bfs#4#(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_45() 54: bfs#2#(nil(),@x) -> c_41() 53: appendreverse#1#(nil(),@sofar) -> c_36() 26: #and#(#false(),#false()) -> c_1() 27: #and#(#false(),#true()) -> c_2() 28: #and#(#true(),#false()) -> c_3() 29: #and#(#true(),#true()) -> c_4() 30: #eq#(#0(),#0()) -> c_5() 31: #eq#(#0(),#neg(@y)) -> c_6() 32: #eq#(#0(),#pos(@y)) -> c_7() 33: #eq#(#0(),#s(@y)) -> c_8() 34: #eq#(#neg(@x),#0()) -> c_9() 35: #eq#(#neg(@x),#pos(@y)) -> c_11() 36: #eq#(#pos(@x),#0()) -> c_12() 37: #eq#(#pos(@x),#neg(@y)) -> c_13() 38: #eq#(#s(@x),#0()) -> c_15() 39: #eq#(dd(@x'1,@x'2),leaf()) -> c_18() 40: #eq#(dd(@x'1,@x'2),nil()) -> c_19() 41: #eq#(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> c_20() 42: #eq#(leaf(),dd(@y'1,@y'2)) -> c_21() 43: #eq#(leaf(),leaf()) -> c_22() 44: #eq#(leaf(),nil()) -> c_23() 45: #eq#(leaf(),node(@y'1,@y'2,@y'3)) -> c_24() 46: #eq#(nil(),dd(@y'1,@y'2)) -> c_25() 47: #eq#(nil(),leaf()) -> c_26() 48: #eq#(nil(),nil()) -> c_27() 49: #eq#(nil(),node(@y'1,@y'2,@y'3)) -> c_28() 50: #eq#(node(@x'1,@x'2,@x'3),dd(@y'1,@y'2)) -> c_29() 51: #eq#(node(@x'1,@x'2,@x'3),leaf()) -> c_30() 52: #eq#(node(@x'1,@x'2,@x'3),nil()) -> c_31() * Step 4: SimplifyRHS WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@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(dd(@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(dd(@t1,dd(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(dd(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/3,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/5,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,leaf,nil,node} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:#eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 2:S:#eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 3:S:#eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 4:S:#eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#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_32(#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 -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_3 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_3 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_3 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_3 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 5:S:#eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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_32(#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 -->_4 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_5 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_4 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_5 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_4 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_5 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_4 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_5 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_4 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 6:S:#equal#(@x,@y) -> c_33(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#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 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#and#(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) ,#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 7:S:appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))):8 8:S:appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 9:S:bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)):11 -->_1 bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)):10 10:S:bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)):14 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)):13 11:S:bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))):12 12:S:bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) -->_2 reverse#(@xs) -> c_57(appendreverse#(@xs,nil())):25 -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 13:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 14:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(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_44(bfs#(@ts ,dd(@t2,dd(@t1,@futurequeue)) ,@x)):15 -->_2 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 15:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 16:S:bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):23 -->_1 bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)):17 17:S:bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):23 18:S:dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) -->_1 dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)):19 19:S:dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) ,#equal#(@a,@x)):21 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)):20 20:S:dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 21:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)):22 -->_2 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 22:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 23:S:dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 24:S:dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 25:S:reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) * Step 5: UsableRules WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@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(dd(@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(dd(@t1,dd(@t2,@ts)),@x) dfs#3(#true(),@t,@t1,@t2,@ts,@x) -> @t dobfs(@t,@x) -> bfs(dd(@t,nil()),nil(),@x) dodfs(@t,@x) -> dfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@t,nil()),nil(),@x) reverse(@xs) -> appendreverse(@xs,nil()) #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) * Step 6: RemoveHeads WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,leaf,nil,node} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:#eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 2:S:#eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 3:S:#eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 4:S:#eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 5:S:#eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) -->_3 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_3 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_3 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_3 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_3 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 6:S:#equal#(@x,@y) -> c_33(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 7:S:appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))):8 8:S:appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 9:S:bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)):11 -->_1 bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)):10 10:S:bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)):14 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)):13 11:S:bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))):12 12:S:bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) -->_2 reverse#(@xs) -> c_57(appendreverse#(@xs,nil())):25 -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 13:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 14:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(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_44(bfs#(@ts ,dd(@t2,dd(@t1,@futurequeue)) ,@x)):15 -->_2 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 15:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 16:S:bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):23 -->_1 bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)):17 17:S:bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):23 18:S:dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) -->_1 dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)):19 19:S:dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) ,#equal#(@a,@x)):21 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)):20 20:S:dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 21:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)):22 -->_2 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 22:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 23:S:dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):9 24:S:dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):18 25:S:reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 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). [(24,dodfs#(@t,@x) -> c_56(dfs#(dd(@t,nil()),@x)))] * Step 7: DecomposeDG WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) and a lower component #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) Further, following extension rules are added to the lower component. bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) ** Step 7.a:1: SimplifyRHS WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) ,#equal#(@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,leaf,nil,node} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) -->_1 bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)):3 -->_1 bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)):2 2:S:bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y) ,@futurequeue ,@t1 ,@t2 ,@ts ,@x ,@y) ,#equal#(@x,@y)):6 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)):5 3:S:bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) -->_1 bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))):4 4:S:bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x),reverse#(dd(@t,@ts))) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):1 5:S:bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):1 6:S:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(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_44(bfs#(@ts ,dd(@t2,dd(@t1,@futurequeue)) ,@x)):7 7:S:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)):1 8:S:bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) -->_2 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):15 -->_1 bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)):9 9:S:bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) -->_1 dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)):15 10:S:dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) -->_1 dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)):11 11:S:dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) ,#equal#(@a,@x)):13 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)):12 12:S:dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):10 13:S:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x),#equal#(@a,@x)) -->_1 dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)):14 14:S:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) -->_1 dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)):10 15:S:dobfs#(@t,@x) -> c_55(bfs#(dd(@t,nil()),nil(),@x)) -->_1 bfs#(@queue,@futurequeue,@x) -> c_37(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#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) ** Step 7.a:2: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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(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(dd) = [1] x2 + [0] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [0] p(dfs#3) = [0] p(dobfs) = [1] p(dodfs) = [0] p(leaf) = [1] 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 + [5] 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] x1 + [0] p(bfs2#1#) = [1] x1 + [0] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [7] 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) = [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) = [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) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [0] p(c_45) = [0] p(c_46) = [1] x1 + [1] x2 + [0] p(c_47) = [1] x1 + [0] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [1] x1 + [0] p(c_54) = [0] p(c_55) = [1] x1 + [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [5] > [1] @queue + [0] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] > [0] = c_39(bfs#2#(@futurequeue,@x)) dobfs#(@t,@x) = [1] @t + [7] > [6] = c_55(bfs#(dd(@t,nil()),nil(),@x)) Following rules are (at-least) weakly oriented: bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(dd(@t,@ts),@x) = [0] >= [6] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [5] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_43(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 + [5] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [1] @t + [0] >= [1] @t + [8] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [0] >= [1] @t' + [7] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [0] >= [0] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [0] >= [0] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = c_53(dfs#(dd(@t1,dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [1] >= [1] = bfs(reverse(dd(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [1] >= [1] = 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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [1] >= [1] = bfs(dd(@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:3: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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) = [0] p(#true) = [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) = [0] p(bfs2#1) = [0] p(dd) = [1] x2 + [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) = [0] 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#) = [1] p(bfs#3#) = [1] x3 + [1] p(bfs#4#) = [1] x1 + [1] x5 + [0] p(bfs2#) = [1] x1 + [0] p(bfs2#1#) = [1] x1 + [0] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [1] p(dobfs#) = [1] x1 + [4] 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) = [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) = [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) = [1] x1 + [3] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [0] p(c_45) = [0] p(c_46) = [1] x1 + [1] x2 + [0] p(c_47) = [1] x1 + [5] p(c_48) = [1] x1 + [1] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [3] p(c_53) = [1] x1 + [0] p(c_54) = [1] p(c_55) = [1] x1 + [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_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [1] > [0] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [4] >= [1] @queue + [4] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [1] >= [1] @ts + [1] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] >= [1] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [1] >= [4] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [1] >= [1] @ts + [4] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [1] @ts + [4] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [1] @t + [0] >= [1] @t + [4] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [0] >= [1] @t' + [9] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [0] >= [1] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [0] >= [0] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [4] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dobfs#(@t,@x) = [1] @t + [4] >= [4] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [0] >= [0] = bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [0] >= [0] = bfs(dd(@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#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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 + [4] p(#pos) = [0] p(#s) = [1] p(#true) = [0] p(appendreverse) = [4] x2 + [0] p(appendreverse#1) = [4] 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] x1 + [1] x2 + [1] p(bfs2#1) = [2] x1 + [0] p(dd) = [1] x2 + [0] p(dfs) = [0] p(dfs#1) = [4] x1 + [2] x2 + [2] p(dfs#2) = [1] x2 + [1] x3 + [1] x4 + [0] p(dfs#3) = [2] x1 + [1] x3 + [4] x5 + [0] p(dobfs) = [2] x2 + [0] p(dodfs) = [1] x1 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [1] x1 + [4] x2 + [1] p(#eq#) = [2] x1 + [0] p(#equal#) = [1] x1 + [1] x2 + [4] p(appendreverse#) = [1] p(appendreverse#1#) = [1] x1 + [1] x2 + [0] p(bfs#) = [1] x1 + [7] p(bfs#1#) = [1] x1 + [3] p(bfs#2#) = [0] p(bfs#3#) = [1] x3 + [5] p(bfs#4#) = [1] x1 + [1] x5 + [1] p(bfs2#) = [4] x1 + [2] x2 + [2] p(bfs2#1#) = [1] x1 + [0] p(dfs#) = [0] p(dfs#1#) = [1] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [7] 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) = [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) = [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) = [1] x1 + [4] p(c_38) = [1] x1 + [4] p(c_39) = [1] x1 + [3] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [4] p(c_44) = [1] x1 + [0] p(c_45) = [0] p(c_46) = [1] x1 + [1] x2 + [0] p(c_47) = [1] x1 + [0] p(c_48) = [1] x1 + [4] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [6] p(c_52) = [1] x1 + [4] p(c_53) = [1] x1 + [0] p(c_54) = [0] p(c_55) = [1] x1 + [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: dfs#1#(dd(@t,@ts),@x) = [1] > [0] = c_49(dfs#2#(@t,@t,@ts,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [7] >= [1] @queue + [7] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [3] >= [1] @ts + [9] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [3] >= [3] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [0] >= [7] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [5] >= [1] @ts + [7] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [5] >= [1] @ts + [5] = c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [1] >= [1] @ts + [7] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [4] @t + [2] @x + [2] >= [1] @t + [2] @x + [7] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [0] >= [1] @t' + [7] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [0] >= [5] = c_48(dfs#1#(@queue,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [6] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [4] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [7] >= [7] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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) = [4] @sofar + [0] >= [4] @sofar + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(dd(@a,@as),@sofar) = [4] @sofar + [0] >= [4] @sofar + [0] = appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) = [4] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@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(dd(@t,@ts),@x) = [0] >= [0] = bfs(reverse(dd(@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,dd(@t2,dd(@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 + [0] >= [0] = bfs(dd(@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:5: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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) = [0] p(#pos) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#true) = [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(dd) = [1] x2 + [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) = [0] p(#and#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bfs#) = [1] x1 + [1] 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#) = [7] x2 + [0] p(bfs2#1#) = [1] x1 + [5] x2 + [3] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [5] 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) = [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) = [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) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [3] p(c_41) = [0] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [0] p(c_45) = [0] p(c_46) = [1] x1 + [1] x2 + [5] p(c_47) = [1] x1 + [1] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [1] x1 + [0] p(c_54) = [0] p(c_55) = [1] x1 + [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: bfs2#1#(@t',@x) = [1] @t' + [5] @x + [3] > [2] = c_47(dobfs#(@t',@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [1] >= [1] @queue + [0] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [0] >= [0] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [0] >= [4] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [1] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_43(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_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [7] @x + [0] >= [5] @x + [9] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) dfs#(@queue,@x) = [0] >= [0] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [0] >= [0] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [5] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [5] >= [0] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] >= [1] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [0] >= [0] = bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [0] >= [0] = bfs(dd(@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#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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(appendreverse) = [2] x2 + [0] p(appendreverse#1) = [2] x2 + [0] p(bfs) = [1] x1 + [1] x3 + [0] p(bfs#1) = [1] x1 + [1] x3 + [0] p(bfs#2) = [1] x2 + [0] p(bfs#3) = [1] x3 + [1] x4 + [0] p(bfs#4) = [1] x1 + [1] x5 + [1] x6 + [0] p(bfs2) = [0] p(bfs2#1) = [0] p(dd) = [1] x2 + [0] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [0] p(dfs#3) = [0] p(dobfs) = [4] x2 + [0] 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#) = [0] p(appendreverse#1#) = [1] x1 + [4] x2 + [0] p(bfs#) = [1] x1 + [4] p(bfs#1#) = [1] x1 + [1] p(bfs#2#) = [0] p(bfs#3#) = [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x5 + [0] p(bfs2#) = [5] x2 + [0] p(bfs2#1#) = [1] x1 + [5] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [5] 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) = [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) = [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) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [0] p(c_45) = [0] p(c_46) = [1] x1 + [1] x2 + [0] p(c_47) = [1] x1 + [0] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [1] x1 + [0] p(c_54) = [1] p(c_55) = [1] x1 + [1] p(c_56) = [4] x1 + [0] p(c_57) = [4] x1 + [2] Following rules are strictly oriented: bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [1] > [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [4] >= [1] @queue + [1] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] >= [0] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [0] >= [4] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [4] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_43(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 + [4] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [5] @x + [0] >= [4] @x + [10] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [5] >= [5] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [0] >= [0] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [0] >= [0] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [5] >= [5] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) = [2] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [1] @x + [0] >= [1] @queue + [1] @x + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [1] @x + [0] >= [1] @ts + [1] @x + [0] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @x + [0] >= [1] @x + [0] = bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) = [1] @x + [0] >= [1] @x + [0] = bfs(reverse(dd(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [1] @x + [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @ts + [1] @x + [0] >= [1] @ts + [1] @x + [0] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [1] @x + [0] >= [1] @ts + [1] @x + [0] = bfs#4(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [1] @x + [0] >= [1] @ts + [1] @x + [0] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [1] @x + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [4] @x + [0] >= [1] @x + [0] = bfs(dd(@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:7: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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) = [4] p(#s) = [1] x1 + [0] p(#true) = [0] p(appendreverse) = [4] x2 + [0] p(appendreverse#1) = [4] 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) = [2] p(bfs2#1) = [1] x1 + [2] x2 + [0] p(dd) = [1] x2 + [0] p(dfs) = [1] x1 + [1] x2 + [1] p(dfs#1) = [2] x1 + [1] x2 + [0] p(dfs#2) = [1] x4 + [0] p(dfs#3) = [1] x3 + [2] x4 + [1] p(dobfs) = [4] x1 + [4] p(dodfs) = [2] x2 + [0] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [1] x1 + [0] p(#eq#) = [2] x2 + [0] p(#equal#) = [1] x2 + [1] p(appendreverse#) = [2] x1 + [2] x2 + [0] p(appendreverse#1#) = [4] x2 + [1] p(bfs#) = [1] x1 + [2] p(bfs#1#) = [1] x1 + [1] p(bfs#2#) = [1] p(bfs#3#) = [1] x3 + [0] p(bfs#4#) = [1] x1 + [1] x5 + [0] p(bfs2#) = [4] x1 + [4] x2 + [4] p(bfs2#1#) = [1] x1 + [2] x2 + [3] p(dfs#) = [1] p(dfs#1#) = [5] p(dfs#2#) = [2] p(dfs#3#) = [1] x1 + [3] p(dobfs#) = [2] x2 + [2] p(dodfs#) = [1] x1 + [4] x2 + [1] p(reverse#) = [1] x1 + [1] p(c_1) = [4] p(c_2) = [0] p(c_3) = [1] p(c_4) = [0] p(c_5) = [2] p(c_6) = [0] p(c_7) = [0] p(c_8) = [1] p(c_9) = [0] p(c_10) = [1] x1 + [1] p(c_11) = [0] p(c_12) = [0] p(c_13) = [1] p(c_14) = [1] x1 + [0] p(c_15) = [2] p(c_16) = [0] p(c_17) = [2] x1 + [2] p(c_18) = [0] p(c_19) = [0] p(c_20) = [4] p(c_21) = [2] p(c_22) = [1] p(c_23) = [1] p(c_24) = [1] p(c_25) = [1] p(c_26) = [4] p(c_27) = [0] p(c_28) = [0] p(c_29) = [1] p(c_30) = [0] p(c_31) = [0] p(c_32) = [2] x1 + [4] x3 + [0] p(c_33) = [2] p(c_34) = [1] x1 + [1] p(c_35) = [1] p(c_36) = [1] p(c_37) = [1] x1 + [1] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [2] p(c_41) = [1] p(c_42) = [1] x1 + [1] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [2] p(c_45) = [1] p(c_46) = [1] x1 + [1] x2 + [1] p(c_47) = [1] x1 + [1] p(c_48) = [1] x1 + [4] p(c_49) = [1] x1 + [3] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [4] p(c_53) = [1] x1 + [2] p(c_54) = [0] p(c_55) = [1] x1 + [0] p(c_56) = [0] p(c_57) = [1] Following rules are strictly oriented: dfs#2#(leaf(),@t,@ts,@x) = [2] > [1] = c_51(dfs#(@ts,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [2] >= [1] @queue + [2] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [1] >= [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] >= [1] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [1] >= [4] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [3] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_43(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 + [4] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [4] @t + [4] @x + [4] >= [4] @t + [4] @x + [10] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [2] @x + [3] >= [2] @x + [3] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [1] >= [9] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [5] >= [5] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [2] >= [7] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [3] >= [3] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [2] @x + [2] >= [2] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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) = [4] @sofar + [0] >= [4] @sofar + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(dd(@a,@as),@sofar) = [4] @sofar + [0] >= [4] @sofar + [0] = appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) = [4] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@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(dd(@t,@ts),@x) = [0] >= [0] = bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [4] @t + [4] >= [0] = bfs(dd(@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:8: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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) = [2] p(#pos) = [1] p(#s) = [1] x1 + [0] p(#true) = [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) = [2] x1 + [1] x2 + [4] p(bfs2#1) = [0] p(dd) = [1] x2 + [0] p(dfs) = [1] p(dfs#1) = [4] x1 + [4] x2 + [1] p(dfs#2) = [1] x1 + [1] x2 + [1] x4 + [0] p(dfs#3) = [2] x3 + [1] x4 + [0] p(dobfs) = [2] x1 + [0] p(dodfs) = [1] x1 + [1] x2 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [2] x1 + [2] x2 + [0] p(#eq#) = [1] p(#equal#) = [1] x2 + [0] p(appendreverse#) = [1] x1 + [1] x2 + [0] p(appendreverse#1#) = [4] x1 + [2] x2 + [4] 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#) = [2] x1 + [7] p(bfs2#1#) = [1] x1 + [4] p(dfs#) = [2] p(dfs#1#) = [3] p(dfs#2#) = [2] p(dfs#3#) = [1] x1 + [4] p(dobfs#) = [0] p(dodfs#) = [4] x1 + [1] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [4] p(c_3) = [4] p(c_4) = [0] p(c_5) = [0] p(c_6) = [2] p(c_7) = [1] p(c_8) = [1] p(c_9) = [4] p(c_10) = [2] p(c_11) = [2] p(c_12) = [0] p(c_13) = [2] p(c_14) = [2] x1 + [1] p(c_15) = [4] p(c_16) = [1] x1 + [0] p(c_17) = [1] x2 + [2] p(c_18) = [0] p(c_19) = [2] p(c_20) = [1] p(c_21) = [4] p(c_22) = [0] p(c_23) = [2] p(c_24) = [4] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [1] p(c_29) = [4] p(c_30) = [0] p(c_31) = [2] p(c_32) = [1] x1 + [1] x3 + [0] p(c_33) = [0] p(c_34) = [1] p(c_35) = [1] p(c_36) = [2] p(c_37) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [1] x1 + [2] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [6] p(c_45) = [0] p(c_46) = [1] x1 + [1] x2 + [1] p(c_47) = [1] x1 + [4] p(c_48) = [1] x1 + [4] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [4] p(c_53) = [1] x1 + [2] p(c_54) = [0] p(c_55) = [1] x1 + [0] p(c_56) = [0] p(c_57) = [0] Following rules are strictly oriented: bfs2#(@t,@x) = [2] @t + [7] > [2] @t + [5] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [0] >= [0] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [0] >= [0] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [2] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_43(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 + [6] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#1#(@t',@x) = [1] @t' + [4] >= [4] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [2] >= [7] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [3] >= [2] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [2] >= [2] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [2] >= [8] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [4] >= [4] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [0] >= [0] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [0] >= [0] = bfs(reverse(dd(@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,dd(@t2,dd(@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(dd(@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:9: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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 + [1] p(#true) = [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) = [1] x2 + [1] p(dd) = [1] x2 + [0] p(dfs) = [2] p(dfs#1) = [1] p(dfs#2) = [1] x1 + [1] x2 + [1] x4 + [1] p(dfs#3) = [1] x1 + [4] x2 + [4] x3 + [4] x4 + [1] x5 + [1] p(dobfs) = [4] x1 + [2] p(dodfs) = [0] p(leaf) = [1] p(nil) = [1] p(node) = [0] p(reverse) = [1] p(#and#) = [1] x1 + [0] p(#eq#) = [1] x1 + [1] p(#equal#) = [4] p(appendreverse#) = [4] x2 + [1] p(appendreverse#1#) = [1] x1 + [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#) = [6] x1 + [4] x2 + [6] p(bfs2#1#) = [1] x1 + [2] x2 + [1] p(dfs#) = [0] p(dfs#1#) = [3] p(dfs#2#) = [1] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [2] x2 + [1] p(dodfs#) = [1] x1 + [1] p(reverse#) = [0] p(c_1) = [4] p(c_2) = [0] p(c_3) = [1] p(c_4) = [1] p(c_5) = [0] p(c_6) = [2] p(c_7) = [0] p(c_8) = [2] p(c_9) = [0] p(c_10) = [2] x1 + [0] p(c_11) = [1] p(c_12) = [1] p(c_13) = [4] p(c_14) = [4] p(c_15) = [1] p(c_16) = [1] x1 + [1] p(c_17) = [4] x1 + [2] x2 + [4] p(c_18) = [0] p(c_19) = [1] p(c_20) = [1] p(c_21) = [4] p(c_22) = [0] p(c_23) = [0] p(c_24) = [1] p(c_25) = [1] p(c_26) = [2] p(c_27) = [0] p(c_28) = [1] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [2] x1 + [1] x3 + [1] p(c_33) = [1] p(c_34) = [2] x1 + [0] p(c_35) = [1] p(c_36) = [0] p(c_37) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [1] p(c_40) = [1] x1 + [6] p(c_41) = [1] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [6] p(c_45) = [2] p(c_46) = [1] x1 + [1] x2 + [2] p(c_47) = [1] x1 + [0] p(c_48) = [1] x1 + [4] p(c_49) = [1] x1 + [2] p(c_50) = [0] p(c_51) = [1] x1 + [1] p(c_52) = [1] x1 + [0] p(c_53) = [1] x1 + [0] p(c_54) = [0] p(c_55) = [1] x1 + [0] p(c_56) = [1] x1 + [1] p(c_57) = [0] Following rules are strictly oriented: dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] > [0] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @queue + [0] >= [1] @queue + [0] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] >= [1] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [0] >= [7] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [0] >= [1] @ts + [0] = c_43(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 + [6] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [6] @t + [4] @x + [6] >= [5] @t + [4] @x + [6] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [2] @x + [1] >= [1] @t' + [2] @x + [1] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [0] >= [7] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [3] >= [3] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [1] >= [1] = c_51(dfs#(@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [2] @x + [1] >= [1] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [1] >= [1] = bfs(reverse(dd(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [1] >= [1] = 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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [4] @t + [2] >= [1] = bfs(dd(@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:10: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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) = [1] p(#true) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] 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 + [1] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [1] p(bfs2) = [0] p(bfs2#1) = [1] p(dd) = [1] x1 + [1] x2 + [0] p(dfs) = [2] x1 + [0] p(dfs#1) = [2] x1 + [1] x2 + [0] p(dfs#2) = [1] x1 + [1] x2 + [4] x3 + [1] x4 + [1] p(dfs#3) = [1] x3 + [0] p(dobfs) = [2] x1 + [2] p(dodfs) = [1] x1 + [0] p(leaf) = [1] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [0] p(reverse) = [1] x1 + [0] p(#and#) = [1] p(#eq#) = [1] x1 + [0] p(#equal#) = [1] x1 + [1] p(appendreverse#) = [4] x1 + [1] x2 + [1] p(appendreverse#1#) = [2] x1 + [2] 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 + [0] p(bfs2#) = [4] x1 + [5] x2 + [7] p(bfs2#1#) = [1] x1 + [5] x2 + [2] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [1] p(dodfs#) = [1] x1 + [1] x2 + [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [1] p(c_4) = [1] p(c_5) = [0] p(c_6) = [0] p(c_7) = [1] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [4] p(c_12) = [0] p(c_13) = [0] p(c_14) = [2] x1 + [0] p(c_15) = [2] p(c_16) = [4] x1 + [1] p(c_17) = [1] x1 + [0] p(c_18) = [0] p(c_19) = [1] p(c_20) = [0] p(c_21) = [1] p(c_22) = [2] p(c_23) = [0] p(c_24) = [0] p(c_25) = [1] p(c_26) = [4] p(c_27) = [0] p(c_28) = [0] p(c_29) = [1] p(c_30) = [0] p(c_31) = [0] p(c_32) = [1] x1 + [4] x3 + [1] p(c_33) = [1] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [1] p(c_36) = [0] p(c_37) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [1] p(c_41) = [0] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [5] p(c_45) = [1] p(c_46) = [1] x1 + [1] x2 + [1] p(c_47) = [1] x1 + [1] p(c_48) = [1] x1 + [3] p(c_49) = [1] x1 + [0] p(c_50) = [1] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [1] x1 + [0] p(c_54) = [1] p(c_55) = [1] x1 + [1] p(c_56) = [4] p(c_57) = [4] Following rules are strictly oriented: bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [1] > [1] @futurequeue + [1] @ts + [0] = c_42(bfs#(@ts,@futurequeue,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [1] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@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_43(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 + [5] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [4] @t + [5] @x + [7] >= [3] @t + [5] @x + [6] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [5] @x + [2] >= [1] @t' + [2] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [0] >= [3] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [0] >= [0] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [1] >= [1] @t + [1] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [1] >= [1] @futurequeue + [1] @queue + [1] = bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [1] >= [1] @futurequeue + [1] @t + [1] @ts + [1] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [1] >= [1] @futurequeue + [1] = bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = bfs(reverse(dd(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [1] >= [1] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [2] >= [1] @futurequeue + [1] @ts + [1] = bfs(@ts,@futurequeue,@x) bfs#3(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] = 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 + [1] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] >= [1] @t1 + [1] @t2 + [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @t + [2] >= [1] @t + [1] = bfs(dd(@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:11: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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] p(#pos) = [1] x1 + [4] p(#s) = [1] x1 + [0] p(#true) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] 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 + [0] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [6] p(bfs2) = [1] x2 + [0] p(bfs2#1) = [2] x2 + [1] p(dd) = [1] x1 + [1] x2 + [0] p(dfs) = [2] x1 + [0] p(dfs#1) = [1] x1 + [1] x2 + [0] p(dfs#2) = [1] x1 + [1] x3 + [2] p(dfs#3) = [1] x3 + [1] x5 + [0] p(dobfs) = [1] x1 + [1] p(dodfs) = [4] p(leaf) = [1] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [6] p(reverse) = [1] x1 + [0] p(#and#) = [1] x1 + [4] p(#eq#) = [2] x1 + [0] p(#equal#) = [2] x1 + [1] x2 + [2] p(appendreverse#) = [2] x2 + [0] p(appendreverse#1#) = [4] x1 + [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 + [0] p(bfs2#) = [4] x1 + [4] x2 + [7] p(bfs2#1#) = [1] x1 + [4] x2 + [0] p(dfs#) = [1] x1 + [1] x2 + [2] p(dfs#1#) = [1] x1 + [1] x2 + [1] p(dfs#2#) = [1] x1 + [1] x3 + [1] x4 + [1] p(dfs#3#) = [1] x1 + [1] x3 + [1] x4 + [1] x5 + [1] x6 + [2] p(dobfs#) = [1] x1 + [0] p(dodfs#) = [1] x1 + [1] p(reverse#) = [1] x1 + [0] p(c_1) = [0] p(c_2) = [1] p(c_3) = [0] p(c_4) = [4] p(c_5) = [2] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [1] p(c_10) = [1] x1 + [2] p(c_11) = [1] p(c_12) = [4] p(c_13) = [4] p(c_14) = [1] p(c_15) = [0] p(c_16) = [1] p(c_17) = [2] x2 + [0] p(c_18) = [0] p(c_19) = [1] p(c_20) = [4] p(c_21) = [0] p(c_22) = [1] p(c_23) = [0] p(c_24) = [1] p(c_25) = [4] p(c_26) = [0] p(c_27) = [1] p(c_28) = [0] p(c_29) = [2] p(c_30) = [0] p(c_31) = [0] p(c_32) = [2] x1 + [1] x3 + [1] p(c_33) = [1] x1 + [1] p(c_34) = [2] x1 + [1] p(c_35) = [1] x1 + [4] p(c_36) = [4] p(c_37) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [7] p(c_41) = [1] p(c_42) = [1] x1 + [1] p(c_43) = [1] x1 + [6] p(c_44) = [1] x1 + [6] p(c_45) = [1] p(c_46) = [1] x1 + [1] x2 + [6] p(c_47) = [1] x1 + [0] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [2] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [5] p(c_53) = [1] x1 + [0] p(c_54) = [0] p(c_55) = [1] x1 + [0] p(c_56) = [1] x1 + [1] p(c_57) = [4] x1 + [0] Following rules are strictly oriented: dfs#(@queue,@x) = [1] @queue + [1] @x + [2] > [1] @queue + [1] @x + [1] = c_48(dfs#1#(@queue,@x)) Following rules are (at-least) weakly oriented: bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [7] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [1] >= [1] @futurequeue + [1] @ts + [1] = c_42(bfs#(@ts,@futurequeue,@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_43(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 + [6] = c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) = [4] @t + [4] @x + [7] >= [2] @t + [4] @x + [7] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [4] @x + [0] >= [1] @t' + [0] = c_47(dobfs#(@t',@x)) dfs#1#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] @x + [1] >= [1] @t + [1] @ts + [1] @x + [1] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [1] @ts + [1] @x + [2] >= [1] @ts + [1] @x + [2] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] @t1 + [1] @t2 + [1] @ts + [1] @x + [7] >= [1] @t1 + [1] @t2 + [1] @ts + [1] @x + [7] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [1] @t1 + [1] @t2 + [1] @ts + [1] @x + [2] >= [1] @t1 + [1] @t2 + [1] @ts + [1] @x + [2] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [0] >= [1] @t + [0] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [1] >= [1] @futurequeue + [1] @queue + [1] = bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@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 + [1] >= [1] @futurequeue + [1] = bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = bfs(reverse(dd(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [1] >= [1] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [1] >= [1] @futurequeue + [1] @ts + [1] = bfs(@ts,@futurequeue,@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] = 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 + [1] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [6] >= [1] @t1 + [1] @t2 + [6] = node(@y,@t1,@t2) dobfs(@t,@x) = [1] @t + [1] >= [1] @t + [1] = bfs(dd(@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:12: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_37) = {1}, uargs(c_38) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_43) = {1}, uargs(c_44) = {1}, uargs(c_46) = {1,2}, uargs(c_47) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1}, uargs(c_53) = {1}, uargs(c_55) = {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) = [0] p(#pos) = [2] p(#s) = [0] p(#true) = [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 + [1] p(bfs2) = [1] x1 + [4] x2 + [0] p(bfs2#1) = [0] p(dd) = [1] x1 + [1] x2 + [0] p(dfs) = [1] x2 + [1] p(dfs#1) = [4] p(dfs#2) = [2] x3 + [4] p(dfs#3) = [4] x1 + [1] x2 + [1] x3 + [4] x5 + [1] x6 + [2] p(dobfs) = [6] x1 + [2] x2 + [2] p(dodfs) = [1] x1 + [4] x2 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [1] p(reverse) = [1] x1 + [0] p(#and#) = [4] x1 + [4] x2 + [4] p(#eq#) = [1] x1 + [1] x2 + [0] p(#equal#) = [4] x1 + [2] x2 + [1] p(appendreverse#) = [1] x1 + [1] p(appendreverse#1#) = [4] x1 + [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] p(bfs2#) = [7] x1 + [4] x2 + [7] p(bfs2#1#) = [1] x1 + [4] 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 + [4] p(dobfs#) = [1] x1 + [1] p(dodfs#) = [2] x2 + [0] p(reverse#) = [1] p(c_1) = [0] p(c_2) = [0] p(c_3) = [2] p(c_4) = [2] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [2] p(c_9) = [1] p(c_10) = [2] p(c_11) = [1] p(c_12) = [1] p(c_13) = [0] p(c_14) = [1] p(c_15) = [0] p(c_16) = [4] x1 + [1] p(c_17) = [1] x1 + [2] p(c_18) = [2] p(c_19) = [0] p(c_20) = [4] p(c_21) = [1] p(c_22) = [4] p(c_23) = [0] p(c_24) = [4] p(c_25) = [4] p(c_26) = [2] p(c_27) = [0] p(c_28) = [0] p(c_29) = [4] p(c_30) = [1] p(c_31) = [1] p(c_32) = [1] x2 + [0] p(c_33) = [1] x1 + [1] p(c_34) = [4] x1 + [1] p(c_35) = [0] p(c_36) = [0] p(c_37) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [1] p(c_41) = [1] p(c_42) = [1] x1 + [0] p(c_43) = [1] x1 + [0] p(c_44) = [1] x1 + [0] p(c_45) = [1] p(c_46) = [1] x1 + [1] x2 + [0] p(c_47) = [1] x1 + [2] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [1] x1 + [4] p(c_54) = [2] p(c_55) = [1] x1 + [0] p(c_56) = [2] p(c_57) = [2] x1 + [2] 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_44(bfs#(@ts,dd(@t2,dd(@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_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [0] = c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = c_39(bfs#2#(@futurequeue,@x)) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [1] = c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [0] >= [1] @futurequeue + [1] @ts + [0] = c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] = c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs2#(@t,@x) = [7] @t + [4] @x + [7] >= [7] @t + [2] @x + [7] = c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) = [1] @t' + [4] >= [1] @t' + [3] = c_47(dobfs#(@t',@x)) dfs#(@queue,@x) = [4] @queue + [0] >= [4] @queue + [0] = c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) = [4] @t + [4] @ts + [0] >= [4] @t + [4] @ts + [0] = c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) = [4] @ts + [0] >= [4] @ts + [0] = c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [4] @t1 + [4] @t2 + [4] @ts + [4] >= [4] @t1 + [4] @t2 + [4] @ts + [4] = c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [4] @t1 + [4] @t2 + [4] @ts + [4] >= [4] @t1 + [4] @t2 + [4] @ts + [4] = c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) = [1] @t + [1] >= [1] @t + [0] = c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = bfs(reverse(dd(@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] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] = 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] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] >= [1] @t1 + [1] @t2 + [1] = node(@y,@t1,@t2) dobfs(@t,@x) = [6] @t + [2] @x + [2] >= [1] @t + [0] = bfs(dd(@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:13: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> c_37(bfs#1#(@queue,@futurequeue,@x)) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> c_38(bfs#3#(@t,@futurequeue,@ts,@x)) bfs#1#(nil(),@futurequeue,@x) -> c_39(bfs#2#(@futurequeue,@x)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> c_42(bfs#(@ts,@futurequeue,@x)) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> c_43(bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y)) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> c_44(bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x)) bfs2#(@t,@x) -> c_46(bfs2#1#(dobfs(@t,@x),@x),dobfs#(@t,@x)) bfs2#1#(@t',@x) -> c_47(dobfs#(@t',@x)) dfs#(@queue,@x) -> c_48(dfs#1#(@queue,@x)) dfs#1#(dd(@t,@ts),@x) -> c_49(dfs#2#(@t,@t,@ts,@x)) dfs#2#(leaf(),@t,@ts,@x) -> c_51(dfs#(@ts,@x)) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> c_52(dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x)) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> c_53(dfs#(dd(@t1,dd(@t2,@ts)),@x)) dobfs#(@t,@x) -> c_55(bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/1,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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"(1, 0) x "A"(1, 0)] -(0)-> "A"(15, 12) #eq :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(15, 5) #equal :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(6, 2) #false :: [] -(0)-> "A"(1, 0) #false :: [] -(0)-> "A"(0, 0) #false :: [] -(0)-> "A"(2, 0) #false :: [] -(0)-> "A"(15, 15) #false :: [] -(0)-> "A"(15, 11) #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"(1, 0) #true :: [] -(0)-> "A"(0, 0) #true :: [] -(0)-> "A"(15, 15) #true :: [] -(0)-> "A"(15, 11) appendreverse :: ["A"(0, 7) x "A"(0, 7)] -(0)-> "A"(0, 7) appendreverse#1 :: ["A"(0, 7) x "A"(0, 7)] -(0)-> "A"(0, 7) bfs :: ["A"(0, 7) x "A"(0, 7) x "A"(8, 0)] -(5)-> "A"(7, 7) bfs#1 :: ["A"(0, 7) x "A"(0, 7) x "A"(8, 0)] -(5)-> "A"(7, 7) bfs#2 :: ["A"(0, 7) x "A"(8, 0)] -(5)-> "A"(7, 7) bfs#3 :: ["A"(0, 7) x "A"(0, 7) x "A"(0, 7) x "A"(8, 0)] -(5)-> "A"(7, 7) bfs#4 :: ["A"(0, 0) x "A"(0, 7) x "A"(0, 7) x "A"(7, 7) x "A"(0, 7) x "A"(8, 0) x "A"(7, 0)] -(8)-> "A"(7, 7) dd :: ["A"(0, 7) x "A"(0, 7)] -(1)-> "A"(1, 7) dd :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) dd :: ["A"(0, 7) x "A"(0, 7)] -(0)-> "A"(0, 7) dd :: ["A"(0, 9) x "A"(0, 9)] -(0)-> "A"(0, 9) dd :: ["A"(0, 7) x "A"(0, 7)] -(2)-> "A"(2, 7) dd :: ["A"(0, 9) x "A"(0, 9)] -(3)-> "A"(3, 9) dobfs :: ["A"(7, 8) x "A"(9, 0)] -(10)-> "A"(7, 7) leaf :: [] -(0)-> "A"(0, 0) leaf :: [] -(0)-> "A"(0, 7) leaf :: [] -(0)-> "A"(0, 9) leaf :: [] -(0)-> "A"(13, 13) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(0, 7) nil :: [] -(0)-> "A"(6, 15) nil :: [] -(0)-> "A"(4, 13) nil :: [] -(0)-> "A"(14, 13) node :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) node :: ["A"(7, 0) x "A"(0, 7) x "A"(7, 7)] -(7)-> "A"(0, 7) node :: ["A"(9, 0) x "A"(0, 9) x "A"(9, 9)] -(9)-> "A"(0, 9) node :: ["A"(7, 0) x "A"(0, 7) x "A"(7, 7)] -(7)-> "A"(7, 7) reverse :: ["A"(0, 7)] -(0)-> "A"(0, 7) bfs# :: ["A"(0, 7) x "A"(1, 7) x "A"(2, 2)] -(1)-> "A"(10, 5) bfs#1# :: ["A"(0, 7) x "A"(1, 7) x "A"(2, 2)] -(1)-> "A"(10, 9) bfs#2# :: ["A"(1, 7) x "A"(2, 2)] -(1)-> "A"(3, 1) bfs#3# :: ["A"(0, 7) x "A"(1, 7) x "A"(0, 7) x "A"(2, 2)] -(1)-> "A"(15, 6) bfs#4# :: ["A"(0, 0) x "A"(1, 7) x "A"(0, 7) x "A"(1, 7) x "A"(0, 7) x "A"(2, 2) x "A"(0, 0)] -(7)-> "A"(2, 14) bfs2# :: ["A"(14, 15) x "A"(15, 15)] -(15)-> "A"(0, 0) bfs2#1# :: ["A"(7, 7) x "A"(3, 8)] -(1)-> "A"(1, 1) dfs# :: ["A"(0, 9) x "A"(8, 10)] -(5)-> "A"(12, 1) dfs#1# :: ["A"(0, 9) x "A"(8, 10)] -(5)-> "A"(15, 9) dfs#2# :: ["A"(0, 9) x "A"(0, 0) x "A"(0, 9) x "A"(8, 10)] -(5)-> "A"(9, 6) dfs#3# :: ["A"(2, 0) x "A"(0, 0) x "A"(0, 9) x "A"(1, 9) x "A"(0, 9) x "A"(8, 10)] -(13)-> "A"(7, 1) dobfs# :: ["A"(6, 7) x "A"(2, 3)] -(1)-> "A"(12, 2) c_37 :: ["A"(10, 0)] -(0)-> "A"(10, 14) c_38 :: ["A"(11, 0)] -(0)-> "A"(10, 11) c_39 :: ["A"(0, 0)] -(0)-> "A"(10, 12) c_40 :: ["A"(0, 3)] -(0)-> "A"(13, 3) c_42 :: ["A"(10, 0)] -(0)-> "A"(15, 10) c_43 :: ["A"(0, 14)] -(0)-> "A"(15, 14) c_44 :: ["A"(2, 0)] -(0)-> "A"(2, 14) c_46 :: ["A"(0, 0) x "A"(1, 0)] -(0)-> "A"(1, 0) c_47 :: ["A"(3, 0)] -(0)-> "A"(3, 3) c_48 :: ["A"(15, 3)] -(0)-> "A"(12, 3) c_49 :: ["A"(0, 0)] -(0)-> "A"(15, 13) c_51 :: ["A"(6, 0)] -(0)-> "A"(10, 6) c_52 :: ["A"(7, 0)] -(0)-> "A"(12, 7) c_53 :: ["A"(7, 0)] -(0)-> "A"(7, 9) c_55 :: ["A"(0, 5)] -(0)-> "A"(12, 5) 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) "c_37_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_37_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_38_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_38_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_39_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_39_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_40_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_40_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_42_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_42_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_43_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_43_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_44_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_44_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_46_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(1, 0) "c_46_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0, 1) "c_47_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_47_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_48_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_48_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_49_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_49_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_51_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_51_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_52_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_52_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_53_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_53_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_55_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_55_A" :: ["A"(0)] -(0)-> "A"(0, 1) "dd_A" :: ["A"(0, 0) x "A"(0, 0)] -(1)-> "A"(1, 0) "dd_A" :: ["A"(0, 1) x "A"(0, 1)] -(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"(0, 0) x "A"(0, 0)] -(0)-> "A"(1, 0) "node_A" :: ["A"(1, 0) x "A"(0, 1) x "A"(1, 1)] -(1)-> "A"(0, 1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bfs#2#(dd(@t,@ts),@x) -> c_40(bfs#(reverse(dd(@t,@ts)),nil(),@x)) 2. Weak: ** Step 7.b:1: RemoveHeads WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,leaf,nil,node} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:#eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 2:S:#eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 3:S:#eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 4:S:#eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 5:S:#eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) -->_3 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_2 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_3 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_2 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_3 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_2 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_3 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_2 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_3 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_2 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 6:S:#equal#(@x,@y) -> c_33(#eq#(@x,@y)) -->_1 #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1) ,#eq#(@x'2,@y'2) ,#eq#(@x'3,@y'3)):5 -->_1 #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)):4 -->_1 #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)):3 -->_1 #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)):2 -->_1 #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)):1 7:S:appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))):8 8:S:appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 9:S:reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)):7 10:W:bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) -->_1 bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x):12 -->_1 bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x):11 11:W:bfs#1#(dd(@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):17 -->_1 bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y):16 -->_1 bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x):15 12:W:bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) -->_1 bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)):14 -->_1 bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x):13 13:W:bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):10 14:W:bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) -->_1 reverse#(@xs) -> c_57(appendreverse#(@xs,nil())):9 15:W:bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):10 16:W:bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) -->_1 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 17: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,dd(@t2,dd(@t1,@futurequeue)),@x):18 18:W:bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) -> bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):10 19:W:bfs2#(@t,@x) -> bfs2#1#(dobfs(@t,@x),@x) -->_1 bfs2#1#(@t',@x) -> dobfs#(@t',@x):21 20:W:bfs2#(@t,@x) -> dobfs#(@t,@x) -->_1 dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x):28 21:W:bfs2#1#(@t',@x) -> dobfs#(@t',@x) -->_1 dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x):28 22:W:dfs#(@queue,@x) -> dfs#1#(@queue,@x) -->_1 dfs#1#(dd(@t,@ts),@x) -> dfs#2#(@t,@t,@ts,@x):23 23:W:dfs#1#(dd(@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):26 -->_1 dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> #equal#(@a,@x):25 -->_1 dfs#2#(leaf(),@t,@ts,@x) -> dfs#(@ts,@x):24 24:W:dfs#2#(leaf(),@t,@ts,@x) -> dfs#(@ts,@x) -->_1 dfs#(@queue,@x) -> dfs#1#(@queue,@x):22 25:W:dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) -> #equal#(@a,@x) -->_1 #equal#(@x,@y) -> c_33(#eq#(@x,@y)):6 26: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#(dd(@t1,dd(@t2,@ts)),@x):27 27:W:dfs#3#(#false(),@t,@t1,@t2,@ts,@x) -> dfs#(dd(@t1,dd(@t2,@ts)),@x) -->_1 dfs#(@queue,@x) -> dfs#1#(@queue,@x):22 28:W:dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) -->_1 bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x):10 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). [(20,bfs2#(@t,@x) -> dobfs#(@t,@x))] ** Step 7.b:2: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) reverse#(@xs) -> c_57(appendreverse#(@xs,nil())) - Weak DPs: bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_10) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1,2}, uargs(c_32) = {1,2,3}, uargs(c_33) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_57) = {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(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(dd) = [1] x2 + [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) = [0] p(#and#) = [0] p(#eq#) = [0] p(#equal#) = [0] p(appendreverse#) = [1] p(appendreverse#1#) = [0] p(bfs#) = [1] x1 + [3] p(bfs#1#) = [1] x1 + [3] p(bfs#2#) = [3] p(bfs#3#) = [1] x3 + [3] p(bfs#4#) = [1] x1 + [1] x5 + [3] p(bfs2#) = [1] x2 + [3] p(bfs2#1#) = [1] x1 + [3] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [3] p(dodfs#) = [0] p(reverse#) = [3] p(c_1) = [0] p(c_2) = [0] p(c_3) = [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) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [1] x2 + [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) = [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) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [1] 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) = [1] x1 + [0] Following rules are strictly oriented: appendreverse#(@toreverse,@sofar) = [1] > [0] = c_34(appendreverse#1#(@toreverse,@sofar)) reverse#(@xs) = [3] > [1] = c_57(appendreverse#(@xs,nil())) Following rules are (at-least) weakly oriented: #eq#(#neg(@x),#neg(@y)) = [0] >= [0] = c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) = [0] >= [0] = c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) = [0] >= [0] = c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) = [0] >= [0] = c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) = [0] >= [0] = c_33(#eq#(@x,@y)) appendreverse#1#(dd(@a,@as),@sofar) = [0] >= [2] = c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [1] @queue + [3] >= [1] @queue + [3] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [3] >= [1] @ts + [3] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [3] >= [3] = bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) = [3] >= [3] = bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) = [3] >= [3] = reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [3] >= [1] @ts + [3] = bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [3] >= [0] = #equal#(@x,@y) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [3] >= [1] @ts + [3] = bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [3] >= [1] @ts + [3] = bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [1] @x + [3] >= [3] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [3] >= [1] @t' + [3] = dobfs#(@t',@x) dfs#(@queue,@x) = [0] >= [0] = dfs#1#(@queue,@x) dfs#1#(dd(@t,@ts),@x) = [0] >= [0] = dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = #equal#(@a,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = dfs#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) = [1] @t + [3] >= [3] = bfs#(dd(@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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [0] >= [0] = bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [0] >= [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [0] >= [0] = bfs(dd(@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:3: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) - Weak DPs: appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_10) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1,2}, uargs(c_32) = {1,2,3}, uargs(c_33) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_57) = {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(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) = [1] x2 + [0] p(dd) = [1] x2 + [0] p(dfs) = [1] x1 + [0] p(dfs#1) = [2] x1 + [1] x2 + [0] p(dfs#2) = [2] x1 + [1] x3 + [2] x4 + [0] p(dfs#3) = [2] x2 + [1] x3 + [2] x6 + [1] p(dobfs) = [2] x1 + [2] x2 + [0] p(dodfs) = [2] x1 + [2] x2 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [0] p(reverse) = [0] p(#and#) = [1] x1 + [1] x2 + [2] p(#eq#) = [0] p(#equal#) = [1] p(appendreverse#) = [1] p(appendreverse#1#) = [0] p(bfs#) = [1] x1 + [1] p(bfs#1#) = [1] x1 + [1] p(bfs#2#) = [1] p(bfs#3#) = [1] x3 + [1] p(bfs#4#) = [1] x1 + [1] x5 + [1] p(bfs2#) = [2] x1 + [2] x2 + [1] p(bfs2#1#) = [1] x1 + [1] p(dfs#) = [1] p(dfs#1#) = [1] p(dfs#2#) = [1] p(dfs#3#) = [1] x1 + [1] p(dobfs#) = [1] p(dodfs#) = [1] x2 + [0] p(reverse#) = [1] p(c_1) = [2] p(c_2) = [2] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [2] p(c_9) = [0] p(c_10) = [1] x1 + [1] p(c_11) = [0] p(c_12) = [2] p(c_13) = [2] p(c_14) = [1] x1 + [1] p(c_15) = [0] p(c_16) = [1] x1 + [2] p(c_17) = [1] x1 + [1] x2 + [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [1] p(c_23) = [0] p(c_24) = [1] p(c_25) = [0] p(c_26) = [2] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [2] p(c_31) = [0] p(c_32) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [3] p(c_36) = [1] p(c_37) = [1] x1 + [1] p(c_38) = [0] p(c_39) = [0] p(c_40) = [2] x1 + [0] p(c_41) = [1] p(c_42) = [2] x1 + [1] p(c_43) = [0] p(c_44) = [2] p(c_45) = [0] p(c_46) = [1] x2 + [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [1] x1 + [0] p(c_50) = [2] p(c_51) = [2] x1 + [0] p(c_52) = [2] x1 + [2] p(c_53) = [2] x1 + [2] p(c_54) = [2] p(c_55) = [1] x1 + [0] p(c_56) = [1] x1 + [2] p(c_57) = [1] x1 + [0] Following rules are strictly oriented: #equal#(@x,@y) = [1] > [0] = c_33(#eq#(@x,@y)) Following rules are (at-least) weakly oriented: #eq#(#neg(@x),#neg(@y)) = [0] >= [1] = c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) = [0] >= [1] = c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) = [0] >= [2] = c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) = [0] >= [0] = c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) appendreverse#(@toreverse,@sofar) = [1] >= [0] = c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) = [0] >= [4] = c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [1] @queue + [1] >= [1] @queue + [1] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @ts + [1] >= [1] @ts + [1] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [1] >= [1] = bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) = [1] >= [1] = bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) = [1] >= [1] = reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @ts + [1] >= [1] @ts + [1] = bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [1] >= [1] = #equal#(@x,@y) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @ts + [1] >= [1] @ts + [1] = bfs#4#(#equal(@x,@y),@futurequeue,@t1,@t2,@ts,@x,@y) bfs#4#(#false(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @ts + [1] >= [1] @ts + [1] = bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [2] @t + [2] @x + [1] >= [2] @t + [2] @x + [1] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [1] >= [1] = dobfs#(@t',@x) dfs#(@queue,@x) = [1] >= [1] = dfs#1#(@queue,@x) dfs#1#(dd(@t,@ts),@x) = [1] >= [1] = dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) = [1] >= [1] = dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] >= [1] = #equal#(@a,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] >= [1] = dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [1] >= [1] = dfs#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) = [1] >= [1] = bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) = [1] >= [1] = c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [2] @sofar + [0] >= [2] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [0] >= [0] = bfs(reverse(dd(@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,dd(@t2,dd(@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 + [2] @x + [0] >= [0] = bfs(dd(@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: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) - Weak DPs: #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_10) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1,2}, uargs(c_32) = {1,2,3}, uargs(c_33) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_57) = {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 + [0] p(#pos) = [1] x1 + [1] p(#s) = [1] x1 + [0] p(#true) = [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 + [1] x7 + [1] p(bfs2) = [2] x1 + [1] p(bfs2#1) = [1] x2 + [1] p(dd) = [1] x1 + [1] x2 + [0] p(dfs) = [1] x2 + [0] p(dfs#1) = [0] p(dfs#2) = [2] x1 + [1] x2 + [0] p(dfs#3) = [2] x2 + [1] x4 + [0] p(dobfs) = [2] x1 + [1] p(dodfs) = [1] x1 + [2] x2 + [1] p(leaf) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [1] p(reverse) = [1] x1 + [0] p(#and#) = [0] p(#eq#) = [1] x2 + [0] p(#equal#) = [1] x2 + [1] p(appendreverse#) = [0] 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#) = [3] x1 + [1] x2 + [1] p(bfs2#1#) = [1] x1 + [0] p(dfs#) = [2] x2 + [2] p(dfs#1#) = [2] x2 + [2] p(dfs#2#) = [2] x4 + [2] p(dfs#3#) = [1] x1 + [2] x6 + [2] p(dobfs#) = [1] x1 + [0] p(dodfs#) = [1] p(reverse#) = [1] x1 + [0] p(c_1) = [0] p(c_2) = [1] p(c_3) = [2] p(c_4) = [0] p(c_5) = [1] p(c_6) = [0] p(c_7) = [2] p(c_8) = [0] p(c_9) = [0] p(c_10) = [1] x1 + [1] p(c_11) = [1] p(c_12) = [2] p(c_13) = [0] p(c_14) = [1] x1 + [0] p(c_15) = [2] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [1] x2 + [1] p(c_18) = [2] p(c_19) = [0] p(c_20) = [0] p(c_21) = [1] p(c_22) = [0] p(c_23) = [2] p(c_24) = [2] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [1] p(c_29) = [0] p(c_30) = [2] p(c_31) = [2] p(c_32) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_33) = [1] x1 + [1] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [2] p(c_36) = [1] p(c_37) = [2] x1 + [2] p(c_38) = [2] x1 + [0] p(c_39) = [2] x1 + [1] p(c_40) = [1] x1 + [2] p(c_41) = [0] p(c_42) = [2] p(c_43) = [0] p(c_44) = [2] p(c_45) = [2] p(c_46) = [1] x1 + [1] x2 + [2] p(c_47) = [2] p(c_48) = [1] p(c_49) = [0] p(c_50) = [0] p(c_51) = [1] p(c_52) = [1] x1 + [0] p(c_53) = [0] p(c_54) = [2] p(c_55) = [2] p(c_56) = [2] x1 + [0] p(c_57) = [1] x1 + [0] Following rules are strictly oriented: #eq#(#pos(@x),#pos(@y)) = [1] @y + [1] > [1] @y + [0] = c_14(#eq#(@x,@y)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) = [1] @y'1 + [1] @y'2 + [1] @y'3 + [1] > [1] @y'1 + [1] @y'2 + [1] @y'3 + [0] = c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) Following rules are (at-least) weakly oriented: #eq#(#neg(@x),#neg(@y)) = [1] @y + [0] >= [1] @y + [1] = c_10(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) = [1] @y + [0] >= [1] @y + [0] = c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [1] @y'1 + [1] @y'2 + [0] >= [1] @y'1 + [1] @y'2 + [1] = c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #equal#(@x,@y) = [1] @y + [1] >= [1] @y + [1] = c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) = [0] >= [0] = c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) = [0] >= [2] = c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@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#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = reverse#(dd(@t,@ts)) 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 + [1] >= [1] @y + [1] = #equal#(@x,@y) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [1] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = 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] = bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [3] @t + [1] @x + [1] >= [2] @t + [1] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [0] >= [1] @t' + [0] = dobfs#(@t',@x) dfs#(@queue,@x) = [2] @x + [2] >= [2] @x + [2] = dfs#1#(@queue,@x) dfs#1#(dd(@t,@ts),@x) = [2] @x + [2] >= [2] @x + [2] = dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) = [2] @x + [2] >= [2] @x + [2] = dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [2] @x + [2] >= [1] @x + [1] = #equal#(@a,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [2] @x + [2] >= [2] @x + [2] = dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [2] @x + [2] >= [2] @x + [2] = dfs#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) = [1] @t + [0] >= [1] @t + [0] = bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) = [1] @xs + [0] >= [0] = c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = bfs(reverse(dd(@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 + [1] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [1] = 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 + [1] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [1] >= [1] @t1 + [1] @t2 + [1] @y + [1] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @t + [1] >= [1] @t + [0] = bfs(dd(@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:5: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) - Weak DPs: #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_10) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1,2}, uargs(c_32) = {1,2,3}, uargs(c_33) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_57) = {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 + [2] p(#s) = [1] x1 + [2] p(#true) = [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 + [1] x7 + [0] p(bfs2) = [0] p(bfs2#1) = [0] p(dd) = [1] x1 + [1] x2 + [0] p(dfs) = [1] p(dfs#1) = [1] p(dfs#2) = [1] x1 + [2] x2 + [2] x3 + [2] x4 + [1] p(dfs#3) = [2] x2 + [1] x4 + [2] x5 + [1] p(dobfs) = [2] x1 + [1] x2 + [0] p(dodfs) = [1] p(leaf) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [0] p(reverse) = [1] x1 + [0] p(#and#) = [1] x2 + [2] p(#eq#) = [1] x2 + [0] p(#equal#) = [1] x2 + [0] p(appendreverse#) = [0] 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#) = [2] x1 + [3] x2 + [2] p(bfs2#1#) = [1] x1 + [2] x2 + [1] p(dfs#) = [2] x2 + [0] p(dfs#1#) = [2] x2 + [0] p(dfs#2#) = [2] x4 + [0] p(dfs#3#) = [1] x1 + [2] x6 + [0] p(dobfs#) = [1] x1 + [1] p(dodfs#) = [1] x1 + [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [2] p(c_5) = [2] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [1] p(c_12) = [1] p(c_13) = [1] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [1] x2 + [0] p(c_18) = [1] p(c_19) = [2] p(c_20) = [0] p(c_21) = [1] p(c_22) = [1] p(c_23) = [2] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] p(c_28) = [1] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [3] p(c_36) = [2] p(c_37) = [0] p(c_38) = [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x2 + [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [1] p(c_44) = [1] x1 + [1] p(c_45) = [1] p(c_46) = [0] p(c_47) = [2] p(c_48) = [2] x1 + [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [1] p(c_52) = [1] x2 + [2] p(c_53) = [2] x1 + [0] p(c_54) = [0] p(c_55) = [1] p(c_56) = [2] x1 + [1] p(c_57) = [1] x1 + [0] Following rules are strictly oriented: #eq#(#s(@x),#s(@y)) = [1] @y + [2] > [1] @y + [0] = c_16(#eq#(@x,@y)) Following rules are (at-least) weakly oriented: #eq#(#neg(@x),#neg(@y)) = [1] @y + [0] >= [1] @y + [0] = c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) = [1] @y + [2] >= [1] @y + [0] = c_14(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [1] @y'1 + [1] @y'2 + [0] >= [1] @y'1 + [1] @y'2 + [0] = c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) = [1] @y'1 + [1] @y'2 + [1] @y'3 + [0] >= [1] @y'1 + [1] @y'2 + [1] @y'3 + [0] = c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) = [1] @y + [0] >= [1] @y + [0] = c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) = [0] >= [0] = c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) = [0] >= [3] = c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@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#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [0] = reverse#(dd(@t,@ts)) 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 + [0] >= [1] @y + [0] = #equal#(@x,@y) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [0] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = 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] = bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [2] @t + [3] @x + [2] >= [2] @t + [3] @x + [1] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [2] @x + [1] >= [1] @t' + [1] = dobfs#(@t',@x) dfs#(@queue,@x) = [2] @x + [0] >= [2] @x + [0] = dfs#1#(@queue,@x) dfs#1#(dd(@t,@ts),@x) = [2] @x + [0] >= [2] @x + [0] = dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) = [2] @x + [0] >= [2] @x + [0] = dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [2] @x + [0] >= [1] @x + [0] = #equal#(@a,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [2] @x + [0] >= [2] @x + [0] = dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [2] @x + [0] >= [2] @x + [0] = dfs#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) = [1] @t + [1] >= [1] @t + [0] = bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) = [0] >= [0] = c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = bfs(reverse(dd(@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 + [0] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [0] = 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 + [0] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [0] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [0] >= [1] @t1 + [1] @t2 + [1] @y + [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @t + [1] @x + [0] >= [1] @t + [0] = bfs(dd(@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: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) - Weak DPs: #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_10) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1,2}, uargs(c_32) = {1,2,3}, uargs(c_33) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_57) = {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) = [1] x1 + [3] p(#s) = [1] x1 + [0] p(#true) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [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 + [2] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [1] x7 + [2] p(bfs2) = [1] x1 + [1] x2 + [1] p(bfs2#1) = [1] x1 + [1] x2 + [2] p(dd) = [1] x1 + [1] x2 + [0] p(dfs) = [1] x2 + [0] p(dfs#1) = [2] p(dfs#2) = [0] p(dfs#3) = [2] x1 + [2] x3 + [2] x5 + [1] p(dobfs) = [1] x1 + [2] p(dodfs) = [0] p(leaf) = [2] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [0] p(reverse) = [1] x1 + [0] p(#and#) = [1] p(#eq#) = [1] x1 + [0] p(#equal#) = [1] x1 + [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bfs#) = [1] x1 + [1] x2 + [2] x3 + [0] p(bfs#1#) = [1] x1 + [1] x2 + [2] x3 + [0] p(bfs#2#) = [1] x1 + [2] x2 + [0] p(bfs#3#) = [1] x1 + [1] x2 + [1] x3 + [2] x4 + [0] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [2] x6 + [0] p(bfs2#) = [1] x1 + [2] x2 + [3] p(bfs2#1#) = [1] x1 + [2] x2 + [1] p(dfs#) = [1] x1 + [0] p(dfs#1#) = [1] x1 + [0] p(dfs#2#) = [1] x1 + [1] x3 + [0] p(dfs#3#) = [1] x1 + [1] x3 + [1] x4 + [1] x5 + [0] p(dobfs#) = [1] x1 + [2] x2 + [1] p(dodfs#) = [2] x1 + [1] x2 + [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [1] p(c_5) = [0] p(c_6) = [2] p(c_7) = [0] p(c_8) = [1] p(c_9) = [1] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [1] p(c_14) = [1] x1 + [2] p(c_15) = [1] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [1] x2 + [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [2] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [2] p(c_27) = [0] p(c_28) = [2] p(c_29) = [0] p(c_30) = [2] p(c_31) = [0] p(c_32) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [0] p(c_36) = [1] p(c_37) = [1] x1 + [0] p(c_38) = [1] p(c_39) = [2] x1 + [2] p(c_40) = [2] x1 + [1] p(c_41) = [2] p(c_42) = [2] p(c_43) = [2] x1 + [1] x2 + [0] p(c_44) = [1] x1 + [0] p(c_45) = [2] p(c_46) = [1] x1 + [0] p(c_47) = [2] p(c_48) = [2] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [2] p(c_51) = [2] x1 + [0] p(c_52) = [2] x2 + [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [1] x1 + [1] p(c_56) = [1] p(c_57) = [1] x1 + [0] Following rules are strictly oriented: #eq#(#neg(@x),#neg(@y)) = [1] @x + [1] > [1] @x + [0] = c_10(#eq#(@x,@y)) Following rules are (at-least) weakly oriented: #eq#(#pos(@x),#pos(@y)) = [1] @x + [3] >= [1] @x + [2] = c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) = [1] @x + [0] >= [1] @x + [0] = c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [1] @x'1 + [1] @x'2 + [0] >= [1] @x'1 + [1] @x'2 + [0] = c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) = [1] @x'1 + [1] @x'2 + [1] @x'3 + [0] >= [1] @x'1 + [1] @x'2 + [1] @x'3 + [0] = c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) = [1] @x + [0] >= [1] @x + [0] = c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) = [0] >= [0] = c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) = [0] >= [0] = c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [2] @x + [0] >= [1] @futurequeue + [1] @queue + [2] @x + [0] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [2] @x + [0] >= [1] @futurequeue + [1] @t + [1] @ts + [2] @x + [0] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [2] @x + [0] >= [1] @futurequeue + [2] @x + [0] = bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [2] @x + [0] >= [1] @t + [1] @ts + [2] @x + [0] = bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [2] @x + [0] >= [0] = reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [2] @x + [2] >= [1] @futurequeue + [1] @ts + [2] @x + [0] = bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] @x + [1] @y + [0] >= [1] @x + [0] = #equal#(@x,@y) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] @x + [1] @y + [0] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] @x + [0] = 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] @x + [0] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] @x + [0] = bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [1] @t + [2] @x + [3] >= [1] @t + [2] @x + [3] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [2] @x + [1] >= [1] @t' + [2] @x + [1] = dobfs#(@t',@x) dfs#(@queue,@x) = [1] @queue + [0] >= [1] @queue + [0] = dfs#1#(@queue,@x) dfs#1#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) = [1] @ts + [2] >= [1] @ts + [0] = dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] @a + [1] @t1 + [1] @t2 + [1] @ts + [0] >= [1] @a + [0] = #equal#(@a,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] @a + [1] @t1 + [1] @t2 + [1] @ts + [0] >= [1] @t1 + [1] @t2 + [1] @ts + [0] = dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [1] @t1 + [1] @t2 + [1] @ts + [0] >= [1] @t1 + [1] @t2 + [1] @ts + [0] = dfs#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) = [1] @t + [2] @x + [1] >= [1] @t + [2] @x + [0] = bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) = [0] >= [0] = c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bfs(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [2] >= [1] @futurequeue + [1] @queue + [2] = bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [2] >= [1] @futurequeue + [1] @t + [1] @ts + [2] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [2] >= [1] @futurequeue + [2] = bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) = [1] @t + [1] @ts + [2] >= [1] @t + [1] @ts + [2] = bfs(reverse(dd(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [2] >= [2] = leaf() 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 + [2] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [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 + [1] @y + [2] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [2] >= [1] @t1 + [1] @t2 + [1] @y + [0] = node(@y,@t1,@t2) dobfs(@t,@x) = [1] @t + [2] >= [1] @t + [2] = bfs(dd(@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:7: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) - Weak DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_10) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1,2}, uargs(c_32) = {1,2,3}, uargs(c_33) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_57) = {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) = [0] p(#pos) = [0] p(#s) = [1] x1 + [2] p(#true) = [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 + [3] p(bfs2) = [1] p(bfs2#1) = [1] x1 + [0] p(dd) = [1] x1 + [1] x2 + [1] p(dfs) = [0] p(dfs#1) = [1] x1 + [1] x2 + [1] p(dfs#2) = [1] x3 + [2] p(dfs#3) = [2] p(dobfs) = [2] x1 + [1] x2 + [1] p(dodfs) = [1] x2 + [0] p(leaf) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [3] p(reverse) = [1] x1 + [0] p(#and#) = [1] x2 + [0] p(#eq#) = [0] p(#equal#) = [0] p(appendreverse#) = [1] x1 + [0] p(appendreverse#1#) = [1] x1 + [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 + [1] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [2] p(bfs2#) = [2] x1 + [2] x2 + [3] p(bfs2#1#) = [1] x1 + [1] x2 + [2] p(dfs#) = [0] p(dfs#1#) = [0] p(dfs#2#) = [0] p(dfs#3#) = [1] x1 + [0] p(dobfs#) = [1] x1 + [1] x2 + [2] p(dodfs#) = [1] p(reverse#) = [1] x1 + [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [2] p(c_5) = [1] p(c_6) = [2] p(c_7) = [1] p(c_8) = [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [1] p(c_12) = [0] p(c_13) = [0] p(c_14) = [1] x1 + [0] p(c_15) = [1] p(c_16) = [1] x1 + [0] p(c_17) = [1] x1 + [1] x2 + [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [1] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [1] p(c_27) = [0] p(c_28) = [0] p(c_29) = [2] p(c_30) = [2] p(c_31) = [0] p(c_32) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [0] p(c_36) = [0] p(c_37) = [2] x1 + [1] p(c_38) = [2] x1 + [1] p(c_39) = [1] p(c_40) = [2] x1 + [2] x2 + [0] p(c_41) = [0] p(c_42) = [1] p(c_43) = [2] x2 + [2] p(c_44) = [2] x1 + [1] p(c_45) = [2] p(c_46) = [2] x1 + [2] x2 + [1] p(c_47) = [0] p(c_48) = [0] p(c_49) = [1] p(c_50) = [0] p(c_51) = [1] p(c_52) = [1] p(c_53) = [2] p(c_54) = [2] p(c_55) = [0] p(c_56) = [1] x1 + [0] p(c_57) = [1] x1 + [0] Following rules are strictly oriented: appendreverse#1#(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] > [1] @as + [0] = c_35(appendreverse#(@as,dd(@a,@sofar))) Following rules are (at-least) weakly oriented: #eq#(#neg(@x),#neg(@y)) = [0] >= [0] = c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) = [0] >= [0] = c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) = [0] >= [0] = c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) = [0] >= [0] = c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) = [0] >= [0] = c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) = [1] @toreverse + [0] >= [1] @toreverse + [0] = c_34(appendreverse#1#(@toreverse,@sofar)) bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [1] >= [1] @futurequeue + [1] @t + [1] @ts + [1] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [1] >= [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] >= [0] = #equal#(@x,@y) 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 + [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 + [2] = bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [2] @t + [2] @x + [3] >= [2] @t + [2] @x + [3] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [1] @x + [2] >= [1] @t' + [1] @x + [2] = dobfs#(@t',@x) dfs#(@queue,@x) = [0] >= [0] = dfs#1#(@queue,@x) dfs#1#(dd(@t,@ts),@x) = [0] >= [0] = dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) = [0] >= [0] = dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = #equal#(@a,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [0] >= [0] = dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [0] >= [0] = dfs#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) = [1] @t + [1] @x + [2] >= [1] @t + [1] = bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) = [1] @xs + [0] >= [1] @xs + [0] = c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [1] >= [1] @a + [1] @as + [1] @sofar + [1] = appendreverse(@as,dd(@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(dd(@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(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = bfs(reverse(dd(@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 + [3] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [3] = 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 + [3] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [3] >= [1] @t1 + [1] @t2 + [3] = node(@y,@t1,@t2) dobfs(@t,@x) = [2] @t + [1] @x + [1] >= [1] @t + [1] = bfs(dd(@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:8: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) - Weak DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,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_10) = {1}, uargs(c_14) = {1}, uargs(c_16) = {1}, uargs(c_17) = {1,2}, uargs(c_32) = {1,2,3}, uargs(c_33) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_57) = {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 + [3] p(#s) = [1] x1 + [3] p(#true) = [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 + [1] p(bfs#4) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [1] x7 + [2] p(bfs2) = [0] p(bfs2#1) = [0] p(dd) = [1] x1 + [1] x2 + [1] p(dfs) = [0] p(dfs#1) = [0] p(dfs#2) = [0] p(dfs#3) = [2] x1 + [1] x6 + [2] p(dobfs) = [1] x1 + [1] x2 + [1] p(dodfs) = [2] x1 + [0] p(leaf) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [1] p(reverse) = [1] x1 + [0] p(#and#) = [1] x1 + [1] x2 + [0] p(#eq#) = [1] x2 + [0] p(#equal#) = [1] x2 + [1] p(appendreverse#) = [0] 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 + [1] p(bfs#4#) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [1] x5 + [2] p(bfs2#) = [1] x1 + [3] x2 + [3] p(bfs2#1#) = [1] x1 + [1] x2 + [1] p(dfs#) = [1] x2 + [1] p(dfs#1#) = [1] x2 + [1] p(dfs#2#) = [1] x4 + [1] p(dfs#3#) = [1] x1 + [1] x6 + [1] p(dobfs#) = [1] x1 + [1] x2 + [1] p(dodfs#) = [1] x2 + [0] p(reverse#) = [0] p(c_1) = [2] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [2] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [2] p(c_10) = [1] x1 + [0] p(c_11) = [1] p(c_12) = [1] p(c_13) = [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [1] x1 + [3] p(c_17) = [1] x1 + [1] x2 + [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [2] p(c_23) = [2] p(c_24) = [2] p(c_25) = [1] p(c_26) = [0] p(c_27) = [1] p(c_28) = [0] p(c_29) = [1] p(c_30) = [0] p(c_31) = [1] p(c_32) = [1] x1 + [1] x2 + [1] x3 + [1] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [0] p(c_36) = [2] p(c_37) = [2] p(c_38) = [1] x1 + [1] p(c_39) = [2] p(c_40) = [0] p(c_41) = [1] p(c_42) = [1] p(c_43) = [1] x2 + [1] p(c_44) = [1] p(c_45) = [2] p(c_46) = [2] x2 + [0] p(c_47) = [1] p(c_48) = [2] x1 + [2] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [2] x1 + [1] p(c_52) = [2] x2 + [1] p(c_53) = [1] x1 + [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [1] x1 + [0] Following rules are strictly oriented: #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [1] @y'1 + [1] @y'2 + [1] > [1] @y'1 + [1] @y'2 + [0] = c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) Following rules are (at-least) weakly oriented: #eq#(#neg(@x),#neg(@y)) = [1] @y + [1] >= [1] @y + [0] = c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) = [1] @y + [3] >= [1] @y + [0] = c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) = [1] @y + [3] >= [1] @y + [3] = c_16(#eq#(@x,@y)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) = [1] @y'1 + [1] @y'2 + [1] @y'3 + [1] >= [1] @y'1 + [1] @y'2 + [1] @y'3 + [1] = c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) = [1] @y + [1] >= [1] @y + [0] = c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) = [0] >= [0] = c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) = [0] >= [0] = c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) = [1] @futurequeue + [1] @queue + [0] >= [1] @futurequeue + [1] @queue + [0] = bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [1] >= [1] @futurequeue + [1] @t + [1] @ts + [1] = bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [0] = reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [1] >= [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 + [2] >= [1] @y + [1] = #equal#(@x,@y) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [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 + [2] = bfs#(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs2#(@t,@x) = [1] @t + [3] @x + [3] >= [1] @t + [2] @x + [2] = bfs2#1#(dobfs(@t,@x),@x) bfs2#1#(@t',@x) = [1] @t' + [1] @x + [1] >= [1] @t' + [1] @x + [1] = dobfs#(@t',@x) dfs#(@queue,@x) = [1] @x + [1] >= [1] @x + [1] = dfs#1#(@queue,@x) dfs#1#(dd(@t,@ts),@x) = [1] @x + [1] >= [1] @x + [1] = dfs#2#(@t,@t,@ts,@x) dfs#2#(leaf(),@t,@ts,@x) = [1] @x + [1] >= [1] @x + [1] = dfs#(@ts,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] @x + [1] >= [1] @x + [1] = #equal#(@a,@x) dfs#2#(node(@a,@t1,@t2),@t,@ts,@x) = [1] @x + [1] >= [1] @x + [1] = dfs#3#(#equal(@a,@x),@t,@t1,@t2,@ts,@x) dfs#3#(#false(),@t,@t1,@t2,@ts,@x) = [1] @x + [1] >= [1] @x + [1] = dfs#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) = [1] @t + [1] @x + [1] >= [1] @t + [1] = bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) = [0] >= [0] = c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) = [0] >= [0] = #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),nil()) = [0] >= [0] = #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) = [0] >= [0] = #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [1] >= [1] @a + [1] @as + [1] @sofar + [1] = appendreverse(@as,dd(@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(dd(@t,@ts),@futurequeue,@x) = [1] @futurequeue + [1] @t + [1] @ts + [1] >= [1] @futurequeue + [1] @t + [1] @ts + [1] = bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) = [1] @futurequeue + [0] >= [1] @futurequeue + [0] = bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = bfs(reverse(dd(@t,@ts)),nil(),@x) bfs#2(nil(),@x) = [0] >= [0] = leaf() bfs#3(leaf(),@futurequeue,@ts,@x) = [1] @futurequeue + [1] @ts + [1] >= [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 + [2] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [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 + [1] @y + [2] >= [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [2] = bfs(@ts,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) = [1] @futurequeue + [1] @t1 + [1] @t2 + [1] @ts + [1] @y + [2] >= [1] @t1 + [1] @t2 + [1] @y + [1] = node(@y,@t1,@t2) dobfs(@t,@x) = [1] @t + [1] @x + [1] >= [1] @t + [1] = bfs(dd(@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:9: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: #eq#(#neg(@x),#neg(@y)) -> c_10(#eq#(@x,@y)) #eq#(#pos(@x),#pos(@y)) -> c_14(#eq#(@x,@y)) #eq#(#s(@x),#s(@y)) -> c_16(#eq#(@x,@y)) #eq#(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> c_17(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2)) #eq#(node(@x'1,@x'2,@x'3),node(@y'1,@y'2,@y'3)) -> c_32(#eq#(@x'1,@y'1),#eq#(@x'2,@y'2),#eq#(@x'3,@y'3)) #equal#(@x,@y) -> c_33(#eq#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_34(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(dd(@a,@as),@sofar) -> c_35(appendreverse#(@as,dd(@a,@sofar))) bfs#(@queue,@futurequeue,@x) -> bfs#1#(@queue,@futurequeue,@x) bfs#1#(dd(@t,@ts),@futurequeue,@x) -> bfs#3#(@t,@futurequeue,@ts,@x) bfs#1#(nil(),@futurequeue,@x) -> bfs#2#(@futurequeue,@x) bfs#2#(dd(@t,@ts),@x) -> bfs#(reverse(dd(@t,@ts)),nil(),@x) bfs#2#(dd(@t,@ts),@x) -> reverse#(dd(@t,@ts)) bfs#3#(leaf(),@futurequeue,@ts,@x) -> bfs#(@ts,@futurequeue,@x) bfs#3#(node(@y,@t1,@t2),@futurequeue,@ts,@x) -> #equal#(@x,@y) 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,dd(@t2,dd(@t1,@futurequeue)),@x) 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#(dd(@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) -> #equal#(@a,@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#(dd(@t1,dd(@t2,@ts)),@x) dobfs#(@t,@x) -> bfs#(dd(@t,nil()),nil(),@x) reverse#(@xs) -> c_57(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(dd(@x'1,@x'2),dd(@y'1,@y'2)) -> #and(#eq(@x'1,@y'1),#eq(@x'2,@y'2)) #eq(dd(@x'1,@x'2),leaf()) -> #false() #eq(dd(@x'1,@x'2),nil()) -> #false() #eq(dd(@x'1,@x'2),node(@y'1,@y'2,@y'3)) -> #false() #eq(leaf(),dd(@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(),dd(@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),dd(@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(dd(@a,@as),@sofar) -> appendreverse(@as,dd(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bfs(@queue,@futurequeue,@x) -> bfs#1(@queue,@futurequeue,@x) bfs#1(dd(@t,@ts),@futurequeue,@x) -> bfs#3(@t,@futurequeue,@ts,@x) bfs#1(nil(),@futurequeue,@x) -> bfs#2(@futurequeue,@x) bfs#2(dd(@t,@ts),@x) -> bfs(reverse(dd(@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,dd(@t2,dd(@t1,@futurequeue)),@x) bfs#4(#true(),@futurequeue,@t1,@t2,@ts,@x,@y) -> node(@y,@t1,@t2) dobfs(@t,@x) -> bfs(dd(@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,dd/2,leaf/0,nil/0,node/3 ,c_1/0,c_2/0,c_3/0,c_4/0,c_5/0,c_6/0,c_7/0,c_8/0,c_9/0,c_10/1,c_11/0,c_12/0,c_13/0,c_14/1,c_15/0,c_16/1 ,c_17/2,c_18/0,c_19/0,c_20/0,c_21/0,c_22/0,c_23/0,c_24/0,c_25/0,c_26/0,c_27/0,c_28/0,c_29/0,c_30/0,c_31/0 ,c_32/3,c_33/1,c_34/1,c_35/1,c_36/0,c_37/1,c_38/1,c_39/1,c_40/2,c_41/0,c_42/1,c_43/2,c_44/1,c_45/0,c_46/2 ,c_47/1,c_48/1,c_49/1,c_50/0,c_51/1,c_52/2,c_53/1,c_54/0,c_55/1,c_56/1,c_57/1} - 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,dd,leaf,nil,node} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). WORST_CASE(?,O(n^3))