WORST_CASE(?,O(n^4)) * Step 1: DependencyPairs WORST_CASE(?,O(n^4)) + Considered Problem: - Strict TRS: *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3 ,tuple#2/2} - Obligation: innermost runtime complexity wrt. defined symbols {#add,#mult,#natmult,#pred,#succ,*,+,appendreverse ,appendreverse#1,bftMult,bftMult',bftMult'#1,bftMult'#2,bftMult'#3,bftMult'#4,bftMult'#5,computeLine ,computeLine#1,computeLine#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,lineMult,lineMult#1,lineMult#2 ,matrixMult,matrixMult#1,reverse} and constructors {#0,#neg,#pos,#s,::,leaf,nil,node,tuple#2} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_5() bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#3#(nil(),@acc,@queue) -> c_11() bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#1#(nil(),@l2,@n) -> c_29() lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) matrixMult#1#(nil(),@m2) -> c_34() reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) Weak DPs #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() and mark the set of starting terms. * Step 2: PredecessorEstimation WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_5() bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#3#(nil(),@acc,@queue) -> c_11() bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#1#(nil(),@l2,@n) -> c_29() lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) matrixMult#1#(nil(),@m2) -> c_34() reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,2,5,11,17,19,21,23,24,26,29,34} by application of Pre({1,2,5,11,17,19,21,23,24,26,29,34}) = {3,8,15,16,20,22,25,27,30,31,32}. Here rules are labelled as follows: 1: *#(@x,@y) -> c_1(#mult#(@x,@y)) 2: +#(@x,@y) -> c_2(#add#(@x,@y)) 3: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) 4: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) 5: appendreverse#1#(nil(),@sofar) -> c_5() 6: bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) 7: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) 8: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) 9: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) 10: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) 11: bftMult'#3#(nil(),@acc,@queue) -> c_11() 12: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) 13: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) 14: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) 15: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) 16: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) 17: computeLine#1#(nil(),@acc,@m) -> c_17() 18: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) 19: computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 20: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) 21: dequeue#1#(::(@t,@ts),@inq) -> c_21() 22: dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) 23: dequeue#2#(::(@t,@ts)) -> c_23() 24: dequeue#2#(nil()) -> c_24() 25: enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) 26: enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 27: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) 28: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) 29: lineMult#1#(nil(),@l2,@n) -> c_29() 30: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) 31: lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) 32: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) 33: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) 34: matrixMult#1#(nil(),@m2) -> c_34() 35: reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) 36: #add#(#0(),@y) -> c_36() 37: #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) 38: #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 39: #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) 40: #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 41: #mult#(#0(),#0()) -> c_41() 42: #mult#(#0(),#neg(@y)) -> c_42() 43: #mult#(#0(),#pos(@y)) -> c_43() 44: #mult#(#neg(@x),#0()) -> c_44() 45: #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) 46: #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) 47: #mult#(#pos(@x),#0()) -> c_47() 48: #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) 49: #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) 50: #natmult#(#0(),@y) -> c_50() 51: #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) 52: #pred#(#0()) -> c_52() 53: #pred#(#neg(#s(@x))) -> c_53() 54: #pred#(#pos(#s(#0()))) -> c_54() 55: #pred#(#pos(#s(#s(@x)))) -> c_55() 56: #succ#(#0()) -> c_56() 57: #succ#(#neg(#s(#0()))) -> c_57() 58: #succ#(#neg(#s(#s(@x)))) -> c_58() 59: #succ#(#pos(#s(@x))) -> c_59() * Step 3: PredecessorEstimation WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#1#(nil(),@sofar) -> c_5() bftMult'#3#(nil(),@acc,@queue) -> c_11() computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#1#(nil(),@l2,@n) -> c_29() matrixMult#1#(nil(),@m2) -> c_34() - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {16} by application of Pre({16}) = {9}. Here rules are labelled as follows: 1: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) 2: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) 3: bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) 4: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) 5: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) 6: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) 7: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) 8: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) 9: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) 10: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) 11: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) 12: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) 13: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) 14: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) 15: dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) 16: enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) 17: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) 18: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) 19: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) 20: lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) 21: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) 22: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) 23: reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) 24: #add#(#0(),@y) -> c_36() 25: #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) 26: #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 27: #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) 28: #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 29: #mult#(#0(),#0()) -> c_41() 30: #mult#(#0(),#neg(@y)) -> c_42() 31: #mult#(#0(),#pos(@y)) -> c_43() 32: #mult#(#neg(@x),#0()) -> c_44() 33: #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) 34: #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) 35: #mult#(#pos(@x),#0()) -> c_47() 36: #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) 37: #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) 38: #natmult#(#0(),@y) -> c_50() 39: #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) 40: #pred#(#0()) -> c_52() 41: #pred#(#neg(#s(@x))) -> c_53() 42: #pred#(#pos(#s(#0()))) -> c_54() 43: #pred#(#pos(#s(#s(@x)))) -> c_55() 44: #succ#(#0()) -> c_56() 45: #succ#(#neg(#s(#0()))) -> c_57() 46: #succ#(#neg(#s(#s(@x)))) -> c_58() 47: #succ#(#pos(#s(@x))) -> c_59() 48: *#(@x,@y) -> c_1(#mult#(@x,@y)) 49: +#(@x,@y) -> c_2(#add#(@x,@y)) 50: appendreverse#1#(nil(),@sofar) -> c_5() 51: bftMult'#3#(nil(),@acc,@queue) -> c_11() 52: computeLine#1#(nil(),@acc,@m) -> c_17() 53: computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 54: dequeue#1#(::(@t,@ts),@inq) -> c_21() 55: dequeue#2#(::(@t,@ts)) -> c_23() 56: dequeue#2#(nil()) -> c_24() 57: enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 58: lineMult#1#(nil(),@l2,@n) -> c_29() 59: matrixMult#1#(nil(),@m2) -> c_34() * Step 4: RemoveWeakSuffixes WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#1#(nil(),@sofar) -> c_5() bftMult'#3#(nil(),@acc,@queue) -> c_11() computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#1#(nil(),@l2,@n) -> c_29() matrixMult#1#(nil(),@m2) -> c_34() - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 -->_1 appendreverse#1#(nil(),@sofar) -> c_5():49 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 4:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_2 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):6 -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):5 5:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):7 -->_1 bftMult'#3#(nil(),@acc,@queue) -> c_11():50 6:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):14 7:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)):9 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):8 8:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 9:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) -->_3 enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)):56 -->_2 enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)):56 -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)):10 10:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 11:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):12 -->_1 computeLine#1#(nil(),@acc,@m) -> c_17():51 12:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):13 -->_1 computeLine#2#(nil(),@acc,@x,@xs) -> c_19():52 13:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 14:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)):15 -->_1 dequeue#1#(::(@t,@ts),@inq) -> c_21():53 15:S:dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) -->_2 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22 -->_1 dequeue#2#(nil()) -> c_24():55 -->_1 dequeue#2#(::(@t,@ts)) -> c_23():54 16:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):17 -->_1 lineMult#1#(nil(),@l2,@n) -> c_29():58 17:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())):19 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)):18 18:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) -->_1 +#(@x,@y) -> c_2(#add#(@x,@y)):48 -->_2 *#(@x,@y) -> c_1(#mult#(@x,@y)):47 -->_3 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 19:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) -->_1 *#(@x,@y) -> c_1(#mult#(@x,@y)):47 -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 20:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):21 -->_1 matrixMult#1#(nil(),@m2) -> c_34():59 21:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 22:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 23:W:#add#(#0(),@y) -> c_36() 24:W:#add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) -->_1 #pred#(#pos(#s(#s(@x)))) -> c_55():42 -->_1 #pred#(#pos(#s(#0()))) -> c_54():41 -->_1 #pred#(#neg(#s(@x))) -> c_53():40 -->_1 #pred#(#0()) -> c_52():39 25:W:#add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) -->_2 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_2 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 -->_1 #pred#(#pos(#s(#s(@x)))) -> c_55():42 -->_1 #pred#(#pos(#s(#0()))) -> c_54():41 -->_1 #pred#(#neg(#s(@x))) -> c_53():40 -->_1 #pred#(#0()) -> c_52():39 26:W:#add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) -->_1 #succ#(#pos(#s(@x))) -> c_59():46 -->_1 #succ#(#neg(#s(#s(@x)))) -> c_58():45 -->_1 #succ#(#neg(#s(#0()))) -> c_57():44 -->_1 #succ#(#0()) -> c_56():43 27:W:#add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) -->_1 #succ#(#pos(#s(@x))) -> c_59():46 -->_1 #succ#(#neg(#s(#s(@x)))) -> c_58():45 -->_1 #succ#(#neg(#s(#0()))) -> c_57():44 -->_1 #succ#(#0()) -> c_56():43 -->_2 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_2 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 28:W:#mult#(#0(),#0()) -> c_41() 29:W:#mult#(#0(),#neg(@y)) -> c_42() 30:W:#mult#(#0(),#pos(@y)) -> c_43() 31:W:#mult#(#neg(@x),#0()) -> c_44() 32:W:#mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 33:W:#mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 34:W:#mult#(#pos(@x),#0()) -> c_47() 35:W:#mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 36:W:#mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 37:W:#natmult#(#0(),@y) -> c_50() 38:W:#natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) -->_2 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_2 #natmult#(#0(),@y) -> c_50():37 -->_1 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_1 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 39:W:#pred#(#0()) -> c_52() 40:W:#pred#(#neg(#s(@x))) -> c_53() 41:W:#pred#(#pos(#s(#0()))) -> c_54() 42:W:#pred#(#pos(#s(#s(@x)))) -> c_55() 43:W:#succ#(#0()) -> c_56() 44:W:#succ#(#neg(#s(#0()))) -> c_57() 45:W:#succ#(#neg(#s(#s(@x)))) -> c_58() 46:W:#succ#(#pos(#s(@x))) -> c_59() 47:W:*#(@x,@y) -> c_1(#mult#(@x,@y)) -->_1 #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)):36 -->_1 #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)):35 -->_1 #mult#(#pos(@x),#0()) -> c_47():34 -->_1 #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)):33 -->_1 #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)):32 -->_1 #mult#(#neg(@x),#0()) -> c_44():31 -->_1 #mult#(#0(),#pos(@y)) -> c_43():30 -->_1 #mult#(#0(),#neg(@y)) -> c_42():29 -->_1 #mult#(#0(),#0()) -> c_41():28 48:W:+#(@x,@y) -> c_2(#add#(@x,@y)) -->_1 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_1 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 -->_1 #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):25 -->_1 #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)):24 -->_1 #add#(#0(),@y) -> c_36():23 49:W:appendreverse#1#(nil(),@sofar) -> c_5() 50:W:bftMult'#3#(nil(),@acc,@queue) -> c_11() 51:W:computeLine#1#(nil(),@acc,@m) -> c_17() 52:W:computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 53:W:dequeue#1#(::(@t,@ts),@inq) -> c_21() 54:W:dequeue#2#(::(@t,@ts)) -> c_23() 55:W:dequeue#2#(nil()) -> c_24() 56:W:enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) -->_1 enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26():57 57:W:enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 58:W:lineMult#1#(nil(),@l2,@n) -> c_29() 59:W:matrixMult#1#(nil(),@m2) -> c_34() The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 50: bftMult'#3#(nil(),@acc,@queue) -> c_11() 59: matrixMult#1#(nil(),@m2) -> c_34() 51: computeLine#1#(nil(),@acc,@m) -> c_17() 52: computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 58: lineMult#1#(nil(),@l2,@n) -> c_29() 48: +#(@x,@y) -> c_2(#add#(@x,@y)) 23: #add#(#0(),@y) -> c_36() 24: #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) 25: #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 39: #pred#(#0()) -> c_52() 40: #pred#(#neg(#s(@x))) -> c_53() 41: #pred#(#pos(#s(#0()))) -> c_54() 42: #pred#(#pos(#s(#s(@x)))) -> c_55() 47: *#(@x,@y) -> c_1(#mult#(@x,@y)) 28: #mult#(#0(),#0()) -> c_41() 29: #mult#(#0(),#neg(@y)) -> c_42() 30: #mult#(#0(),#pos(@y)) -> c_43() 31: #mult#(#neg(@x),#0()) -> c_44() 32: #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) 33: #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) 34: #mult#(#pos(@x),#0()) -> c_47() 35: #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) 36: #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) 38: #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) 27: #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 26: #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) 43: #succ#(#0()) -> c_56() 44: #succ#(#neg(#s(#0()))) -> c_57() 45: #succ#(#neg(#s(#s(@x)))) -> c_58() 46: #succ#(#pos(#s(@x))) -> c_59() 37: #natmult#(#0(),@y) -> c_50() 56: enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) 57: enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 53: dequeue#1#(::(@t,@ts),@inq) -> c_21() 54: dequeue#2#(::(@t,@ts)) -> c_23() 55: dequeue#2#(nil()) -> c_24() 49: appendreverse#1#(nil(),@sofar) -> c_5() * Step 5: SimplifyRHS WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 4:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_2 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):6 -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):5 5:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):7 6:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):14 7:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)):9 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):8 8:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 9:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)) ,matrixMult#(@acc,@y)):10 10:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 11:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):12 12:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):13 13:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 14:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)):15 15:S:dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) -->_2 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22 16:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):17 17:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())):19 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)):18 18:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) -->_3 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 19:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 20:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):21 21:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 22:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) * Step 6: UsableRules WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) * Step 7: RemoveHeads WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 4:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_2 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):6 -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):5 5:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):7 6:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):14 7:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y)):9 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):8 8:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 9:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)) ,matrixMult#(@acc,@y)):10 10:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 11:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):12 12:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):13 13:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 14:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):15 15:S:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) -->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22 16:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):17 17:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())):19 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)):18 18:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 19:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 20:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):21 21:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 22:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(3,bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)))] * Step 8: DecomposeDG WORST_CASE(?,O(n^4)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) and a lower component appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) Further, following extension rules are added to the lower component. bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) ** Step 8.a:1: SimplifyRHS WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):2 2:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):3 3:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y)):5 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):4 4:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):1 5:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)):6 6:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) ** Step 8.a:2: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [1] x2 + [1] p(bftMult') = [2] x1 + [0] p(bftMult'#1) = [2] x2 + [1] p(bftMult'#2) = [1] x1 + [7] p(bftMult'#3) = [4] x1 + [1] x2 + [0] p(bftMult'#4) = [1] x2 + [4] x3 + [0] p(bftMult'#5) = [2] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [7] p(dequeue#1) = [1] x1 + [1] x2 + [7] p(dequeue#2) = [1] x1 + [6] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [1] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [1] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [2] x2 + [0] p(#mult#) = [4] x1 + [1] x2 + [0] p(#natmult#) = [4] x1 + [0] p(#pred#) = [2] x1 + [1] p(#succ#) = [2] p(*#) = [4] x1 + [2] p(+#) = [0] p(appendreverse#) = [2] x1 + [1] x2 + [4] p(appendreverse#1#) = [1] x2 + [2] p(bftMult#) = [4] x1 + [1] x2 + [0] p(bftMult'#) = [1] x1 + [1] x2 + [5] p(bftMult'#1#) = [1] x1 + [1] x2 + [3] p(bftMult'#2#) = [2] x1 + [1] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [1] p(bftMult'#5#) = [1] x1 + [1] x2 + [2] p(computeLine#) = [2] x1 + [1] x2 + [4] x3 + [2] p(computeLine#1#) = [1] x1 + [4] x2 + [1] x3 + [0] p(computeLine#2#) = [2] x1 + [2] x2 + [1] x3 + [2] p(dequeue#) = [2] x1 + [1] x2 + [4] p(dequeue#1#) = [1] x1 + [1] x2 + [1] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [4] x1 + [2] x2 + [1] p(lineMult#) = [4] x1 + [2] p(lineMult#1#) = [1] x2 + [4] x3 + [1] p(lineMult#2#) = [1] x3 + [0] p(matrixMult#) = [2] x2 + [0] p(matrixMult#1#) = [1] x1 + [0] p(reverse#) = [4] x1 + [2] p(c_1) = [4] p(c_2) = [1] x1 + [1] p(c_3) = [2] x1 + [0] p(c_4) = [1] x1 + [0] p(c_5) = [0] p(c_6) = [1] x1 + [4] p(c_7) = [1] x1 + [4] p(c_8) = [1] x1 + [0] p(c_9) = [4] x1 + [1] p(c_10) = [1] x1 + [2] p(c_11) = [4] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [0] p(c_15) = [1] x1 + [2] p(c_16) = [2] p(c_17) = [2] p(c_18) = [0] p(c_19) = [1] p(c_20) = [4] x1 + [1] p(c_21) = [4] p(c_22) = [1] p(c_23) = [1] p(c_24) = [1] p(c_25) = [2] p(c_26) = [1] p(c_27) = [1] x1 + [1] p(c_28) = [1] x1 + [0] p(c_29) = [2] p(c_30) = [1] x1 + [1] p(c_31) = [4] x1 + [1] p(c_32) = [4] x1 + [1] p(c_33) = [1] x1 + [1] p(c_34) = [0] p(c_35) = [4] x1 + [2] p(c_36) = [0] p(c_37) = [1] p(c_38) = [1] x2 + [0] p(c_39) = [0] p(c_40) = [4] x2 + [0] p(c_41) = [1] p(c_42) = [0] p(c_43) = [4] p(c_44) = [1] p(c_45) = [0] p(c_46) = [1] p(c_47) = [0] p(c_48) = [1] x1 + [2] p(c_49) = [2] x1 + [0] p(c_50) = [1] p(c_51) = [2] x1 + [2] x2 + [0] p(c_52) = [1] p(c_53) = [1] p(c_54) = [0] p(c_55) = [1] p(c_56) = [0] p(c_57) = [1] p(c_58) = [0] p(c_59) = [4] Following rules are strictly oriented: bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [3] > [1] @acc + [1] @elem + [1] @queue + [0] = c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [3] > [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [2] = c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [5] >= [1] @acc + [1] @queue + [14] = c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [3] = c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [2] >= [1] @acc + [1] @queue + [5] = c_12(bftMult'#(@queue,@acc)) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [2] >= [1] @queue' + [5] = c_14(bftMult'#(@queue',matrixMult(@acc,@y))) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [7] >= [1] @dequeue@1 + [1] @dequeue@2 + [7] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [7] >= [1] @inq + [1] @outq + [7] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [7] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [7] >= [1] @inq + [7] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [6] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [6] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() reverse(@xs) = [1] @xs + [1] >= [1] @xs + [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 8.a:3: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak DPs: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [3] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [2] p(dequeue#1) = [1] x1 + [1] x2 + [1] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [0] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [3] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [1] x2 + [0] p(#mult#) = [0] p(#natmult#) = [1] x2 + [1] p(#pred#) = [1] x1 + [1] p(#succ#) = [0] p(*#) = [1] x1 + [1] x2 + [0] p(+#) = [1] x2 + [2] p(appendreverse#) = [1] p(appendreverse#1#) = [2] x1 + [0] p(bftMult#) = [1] x1 + [2] x2 + [2] p(bftMult'#) = [1] x1 + [1] x2 + [4] p(bftMult'#1#) = [1] x1 + [1] x2 + [4] p(bftMult'#2#) = [1] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [4] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [6] p(bftMult'#5#) = [1] x1 + [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [2] x1 + [2] x2 + [4] x3 + [0] p(lineMult#1#) = [1] x1 + [0] p(lineMult#2#) = [1] x1 + [1] x3 + [4] x4 + [0] p(matrixMult#) = [1] x2 + [2] p(matrixMult#1#) = [4] x2 + [4] p(reverse#) = [1] p(c_1) = [1] x1 + [0] p(c_2) = [0] p(c_3) = [1] x1 + [0] p(c_4) = [1] p(c_5) = [4] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [1] p(c_11) = [0] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [7] p(c_15) = [1] p(c_16) = [1] x1 + [1] p(c_17) = [4] p(c_18) = [4] p(c_19) = [0] p(c_20) = [2] x1 + [0] p(c_21) = [0] p(c_22) = [1] x1 + [0] p(c_23) = [2] p(c_24) = [1] p(c_25) = [1] p(c_26) = [0] p(c_27) = [2] p(c_28) = [1] x1 + [1] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [1] x1 + [1] p(c_34) = [1] p(c_35) = [2] x1 + [4] p(c_36) = [1] p(c_37) = [1] x1 + [0] p(c_38) = [1] x1 + [4] x2 + [1] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [1] p(c_41) = [4] p(c_42) = [4] p(c_43) = [1] p(c_44) = [4] p(c_45) = [1] p(c_46) = [2] x1 + [1] p(c_47) = [0] p(c_48) = [1] p(c_49) = [1] p(c_50) = [1] p(c_51) = [1] x2 + [1] p(c_52) = [2] p(c_53) = [1] p(c_54) = [1] p(c_55) = [1] p(c_56) = [1] p(c_57) = [1] p(c_58) = [0] p(c_59) = [2] Following rules are strictly oriented: bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [6] > [1] @acc + [1] @queue + [4] = c_12(bftMult'#(@queue,@acc)) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [4] >= [1] @acc + [1] @queue + [7] = c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [4] >= [1] @acc + [1] @elem + [1] @queue + [4] = c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [4] >= [1] @acc + [1] @queue + [1] @t + [7] = c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [9] >= [1] @queue + [1] @t1 + [1] @t2 + [0] = c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [0] >= [1] @queue' + [11] = c_14(bftMult'#(@queue',matrixMult(@acc,@y))) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [3] >= [1] @dequeue@1 + [1] @dequeue@2 + [2] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [2] >= [1] @inq + [1] @outq + [1] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [1] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [1] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.a:4: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak DPs: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [1] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [4] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [5] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [1] x1 + [1] x2 + [1] p(+#) = [2] p(appendreverse#) = [1] x2 + [1] p(appendreverse#1#) = [1] x1 + [4] x2 + [0] p(bftMult#) = [2] x1 + [1] p(bftMult'#) = [1] x1 + [1] x2 + [0] p(bftMult'#1#) = [1] x1 + [1] x2 + [5] p(bftMult'#2#) = [1] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [3] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [0] p(computeLine#) = [1] x2 + [1] x3 + [0] p(computeLine#1#) = [4] x1 + [1] p(computeLine#2#) = [2] x1 + [4] x3 + [1] x4 + [1] p(dequeue#) = [4] p(dequeue#1#) = [2] x1 + [2] x2 + [2] p(dequeue#2#) = [2] x1 + [1] p(enqueue#) = [1] x1 + [1] p(enqueue#1#) = [2] p(lineMult#) = [2] x3 + [0] p(lineMult#1#) = [1] x1 + [1] x2 + [2] x3 + [1] p(lineMult#2#) = [2] x3 + [0] p(matrixMult#) = [1] x2 + [0] p(matrixMult#1#) = [1] x2 + [1] p(reverse#) = [2] p(c_1) = [0] p(c_2) = [0] p(c_3) = [1] p(c_4) = [0] p(c_5) = [0] p(c_6) = [1] x1 + [1] p(c_7) = [1] x1 + [3] p(c_8) = [1] x1 + [2] p(c_9) = [1] p(c_10) = [1] x1 + [2] p(c_11) = [0] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [1] p(c_17) = [1] p(c_18) = [1] x1 + [2] x2 + [2] p(c_19) = [4] p(c_20) = [0] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [1] p(c_24) = [1] p(c_25) = [4] p(c_26) = [1] p(c_27) = [1] x1 + [1] p(c_28) = [1] p(c_29) = [1] p(c_30) = [1] x1 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] p(c_33) = [4] x1 + [4] x2 + [1] p(c_34) = [0] p(c_35) = [1] x1 + [0] p(c_36) = [0] p(c_37) = [1] x1 + [0] p(c_38) = [1] x2 + [1] p(c_39) = [2] x1 + [0] p(c_40) = [4] x2 + [0] p(c_41) = [4] p(c_42) = [0] p(c_43) = [2] p(c_44) = [0] p(c_45) = [1] x1 + [0] p(c_46) = [1] p(c_47) = [0] p(c_48) = [2] x1 + [1] p(c_49) = [1] x1 + [0] p(c_50) = [4] p(c_51) = [4] x1 + [1] x2 + [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [1] p(c_55) = [1] p(c_56) = [2] p(c_57) = [1] p(c_58) = [0] p(c_59) = [1] Following rules are strictly oriented: bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [3] > [1] @acc + [1] @queue + [1] @t + [2] = c_10(bftMult'#4#(@t,@acc,@queue)) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [0] >= [1] @acc + [1] @queue + [9] = c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [5] >= [1] @acc + [1] @elem + [1] @queue + [5] = c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [4] >= [1] @acc + [1] @queue + [0] = c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [5] >= [1] @queue + [1] @t1 + [1] @t2 + [0] = c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [0] >= [1] @queue' + [0] = c_14(bftMult'#(@queue',matrixMult(@acc,@y))) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [1] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.a:5: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak DPs: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [1] x1 + [1] p(bftMult') = [1] x1 + [0] p(bftMult'#1) = [1] p(bftMult'#2) = [1] x1 + [5] p(bftMult'#3) = [2] x1 + [4] p(bftMult'#4) = [1] x1 + [4] x3 + [0] p(bftMult'#5) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [1] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [4] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [2] x1 + [1] x2 + [2] p(#mult#) = [0] p(#natmult#) = [1] x1 + [1] x2 + [1] p(#pred#) = [1] x1 + [1] p(#succ#) = [0] p(*#) = [1] x1 + [1] x2 + [1] p(+#) = [4] x1 + [0] p(appendreverse#) = [2] x1 + [0] p(appendreverse#1#) = [1] x1 + [1] x2 + [1] p(bftMult#) = [1] x1 + [4] x2 + [0] p(bftMult'#) = [1] x1 + [1] x2 + [0] p(bftMult'#1#) = [1] x1 + [1] x2 + [3] p(bftMult'#2#) = [1] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [2] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [3] p(computeLine#) = [1] x2 + [1] p(computeLine#1#) = [1] x1 + [1] p(computeLine#2#) = [1] x1 + [2] x3 + [4] p(dequeue#) = [4] x2 + [1] p(dequeue#1#) = [1] x1 + [4] x2 + [1] p(dequeue#2#) = [1] x1 + [0] p(enqueue#) = [0] p(enqueue#1#) = [2] x1 + [0] p(lineMult#) = [1] x1 + [1] x2 + [1] x3 + [4] p(lineMult#1#) = [4] x1 + [2] x3 + [1] p(lineMult#2#) = [1] x1 + [4] x2 + [4] x3 + [0] p(matrixMult#) = [1] x1 + [1] x2 + [4] p(matrixMult#1#) = [1] x1 + [0] p(reverse#) = [1] x1 + [1] p(c_1) = [2] x1 + [1] p(c_2) = [1] x1 + [0] p(c_3) = [1] x1 + [0] p(c_4) = [1] p(c_5) = [2] p(c_6) = [1] p(c_7) = [1] x1 + [6] p(c_8) = [1] x1 + [0] p(c_9) = [1] x1 + [0] p(c_10) = [1] x1 + [2] p(c_11) = [1] p(c_12) = [1] x1 + [1] p(c_13) = [1] x1 + [1] p(c_14) = [1] x1 + [2] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] p(c_18) = [1] x1 + [1] x2 + [1] p(c_19) = [1] p(c_20) = [1] x1 + [1] p(c_21) = [4] p(c_22) = [2] x1 + [1] p(c_23) = [1] p(c_24) = [1] p(c_25) = [0] p(c_26) = [4] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [1] p(c_29) = [0] p(c_30) = [2] x1 + [2] p(c_31) = [1] x1 + [1] p(c_32) = [1] x1 + [0] p(c_33) = [2] x2 + [0] p(c_34) = [0] p(c_35) = [2] x1 + [1] p(c_36) = [4] p(c_37) = [1] x1 + [2] p(c_38) = [1] p(c_39) = [2] p(c_40) = [1] p(c_41) = [2] p(c_42) = [1] p(c_43) = [1] p(c_44) = [0] p(c_45) = [2] x1 + [0] p(c_46) = [1] p(c_47) = [1] p(c_48) = [2] x1 + [0] p(c_49) = [2] x1 + [0] p(c_50) = [4] p(c_51) = [1] x2 + [0] p(c_52) = [0] p(c_53) = [1] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [1] p(c_58) = [1] p(c_59) = [0] Following rules are strictly oriented: bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [3] > [1] @queue' + [2] = c_14(bftMult'#(@queue',matrixMult(@acc,@y))) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [0] >= [1] @acc + [1] @queue + [14] = c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [3] >= [1] @acc + [1] @elem + [1] @queue + [2] = c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [2] >= [1] @acc + [1] @queue + [1] @t + [2] = c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [1] >= [1] @acc + [1] @queue + [1] = c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [4] >= [1] @queue + [1] @t1 + [1] @t2 + [4] = c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [5] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.a:6: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) - Weak DPs: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [1] p(bftMult') = [1] x2 + [2] p(bftMult'#1) = [4] x1 + [2] x2 + [1] p(bftMult'#2) = [1] x1 + [6] p(bftMult'#3) = [4] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4) = [1] x2 + [1] x3 + [0] p(bftMult'#5) = [1] x1 + [1] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [7] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [7] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x2 + [0] p(#mult#) = [1] x2 + [0] p(#natmult#) = [1] x2 + [0] p(#pred#) = [1] p(#succ#) = [2] p(*#) = [1] x1 + [0] p(+#) = [4] x2 + [1] p(appendreverse#) = [4] x2 + [4] p(appendreverse#1#) = [1] x1 + [1] x2 + [0] p(bftMult#) = [1] x1 + [0] p(bftMult'#) = [1] x1 + [1] x2 + [7] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [2] x1 + [4] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] x3 + [7] p(computeLine#) = [1] x1 + [1] x2 + [1] x3 + [4] p(computeLine#1#) = [1] x1 + [1] x3 + [0] p(computeLine#2#) = [1] x2 + [2] x4 + [2] p(dequeue#) = [1] x1 + [1] x2 + [1] p(dequeue#1#) = [1] x1 + [0] p(dequeue#2#) = [0] p(enqueue#) = [2] x1 + [2] x2 + [0] p(enqueue#1#) = [2] x1 + [4] x2 + [0] p(lineMult#) = [4] x1 + [1] x2 + [1] p(lineMult#1#) = [1] x1 + [2] x2 + [1] x3 + [1] p(lineMult#2#) = [4] x1 + [0] p(matrixMult#) = [4] x1 + [4] x2 + [1] p(matrixMult#1#) = [2] x2 + [1] p(reverse#) = [1] x1 + [2] p(c_1) = [1] p(c_2) = [1] p(c_3) = [2] p(c_4) = [1] x1 + [0] p(c_5) = [0] p(c_6) = [1] x1 + [4] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [1] x1 + [1] p(c_10) = [1] x1 + [0] p(c_11) = [4] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [2] p(c_17) = [0] p(c_18) = [4] x1 + [1] x2 + [0] p(c_19) = [0] p(c_20) = [4] x1 + [0] p(c_21) = [0] p(c_22) = [1] p(c_23) = [4] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] p(c_28) = [1] x1 + [2] p(c_29) = [1] p(c_30) = [0] p(c_31) = [2] p(c_32) = [2] x1 + [1] p(c_33) = [1] p(c_34) = [1] p(c_35) = [1] p(c_36) = [4] p(c_37) = [4] x1 + [0] p(c_38) = [2] x1 + [0] p(c_39) = [2] x1 + [0] p(c_40) = [4] x2 + [1] p(c_41) = [1] p(c_42) = [0] p(c_43) = [0] p(c_44) = [1] p(c_45) = [1] x1 + [1] p(c_46) = [0] p(c_47) = [0] p(c_48) = [1] x1 + [1] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x2 + [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [1] p(c_55) = [1] p(c_56) = [0] p(c_57) = [0] p(c_58) = [2] p(c_59) = [1] Following rules are strictly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [7] > [1] @acc + [1] @queue + [6] = c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) Following rules are (at-least) weakly oriented: bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [7] >= [1] @acc + [1] @queue + [7] = c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [7] >= [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [7] = c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [1] @y + [7] >= [1] @queue' + [7] = c_14(bftMult'#(@queue',matrixMult(@acc,@y))) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [6] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.a:7: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). ** Step 8.b:1: DecomposeDG WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) and a lower component computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) Further, following extension rules are added to the lower component. appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) *** Step 8.b:1.a:1: SimplifyRHS WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):4 4:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):5 5:S:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) -->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):8 6:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):7 7:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):6 8:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 9:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):11 10:W:bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) -->_1 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):3 11:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):12 12:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):14 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):13 13:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):10 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):9 14:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):16 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):15 15:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):10 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):9 16:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):6 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) *** Step 8.b:1.a:2: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_32) = {1}, uargs(c_33) = {1}, uargs(c_35) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [4] x1 + [1] x2 + [1] p(bftMult') = [4] x1 + [4] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [1] p(bftMult'#3) = [1] x1 + [0] p(bftMult'#4) = [2] p(bftMult'#5) = [1] x2 + [1] x3 + [1] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [2] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [4] x1 + [2] x2 + [0] p(#mult#) = [1] x2 + [1] p(#natmult#) = [1] x1 + [1] p(#pred#) = [1] x1 + [0] p(#succ#) = [1] x1 + [0] p(*#) = [2] x1 + [1] p(+#) = [1] x2 + [2] p(appendreverse#) = [2] p(appendreverse#1#) = [7] p(bftMult#) = [1] x1 + [1] p(bftMult'#) = [1] x1 + [1] x2 + [1] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [1] x1 + [1] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [2] p(computeLine#) = [1] x1 + [1] x3 + [0] p(computeLine#1#) = [1] x1 + [0] p(computeLine#2#) = [2] x2 + [2] x3 + [1] x4 + [1] p(dequeue#) = [1] x1 + [1] x2 + [1] p(dequeue#1#) = [1] x1 + [3] p(dequeue#2#) = [4] x1 + [2] p(enqueue#) = [1] x2 + [4] p(enqueue#1#) = [1] x1 + [4] p(lineMult#) = [1] x1 + [4] x2 + [1] x3 + [0] p(lineMult#1#) = [1] x1 + [1] x2 + [4] x3 + [0] p(lineMult#2#) = [1] x4 + [0] p(matrixMult#) = [2] p(matrixMult#1#) = [2] p(reverse#) = [4] p(c_1) = [0] p(c_2) = [1] x1 + [1] p(c_3) = [1] x1 + [1] p(c_4) = [1] x1 + [6] p(c_5) = [0] p(c_6) = [2] x1 + [1] p(c_7) = [1] x1 + [0] p(c_8) = [4] x1 + [2] p(c_9) = [1] x1 + [3] p(c_10) = [1] x1 + [0] p(c_11) = [2] p(c_12) = [2] p(c_13) = [2] x1 + [1] p(c_14) = [1] p(c_15) = [0] p(c_16) = [1] p(c_17) = [0] p(c_18) = [4] x1 + [1] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [4] p(c_22) = [1] x1 + [4] p(c_23) = [0] p(c_24) = [0] p(c_25) = [1] p(c_26) = [1] p(c_27) = [2] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [1] x1 + [1] p(c_31) = [1] p(c_32) = [1] x1 + [1] p(c_33) = [1] x1 + [6] p(c_34) = [4] p(c_35) = [1] x1 + [1] p(c_36) = [1] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [1] p(c_44) = [2] p(c_45) = [2] x1 + [1] p(c_46) = [4] p(c_47) = [1] p(c_48) = [2] x1 + [1] p(c_49) = [1] x1 + [0] p(c_50) = [2] p(c_51) = [2] x1 + [1] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [4] p(c_58) = [0] p(c_59) = [0] Following rules are strictly oriented: reverse#(@xs) = [4] > [3] = c_35(appendreverse#(@xs,nil())) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [2] >= [8] = c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) = [7] >= [8] = c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [1] >= [1] @acc + [1] @queue + [1] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [1] >= [1] @queue + [1] = bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [1] >= [1] @dequeue@1 + [1] @dequeue@2 + [4] = c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [2] >= [1] @acc + [1] @queue + [1] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [2] >= [1] @queue + [1] @t1 + [1] @t2 + [2] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [2] >= [1] @queue' + [1] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [2] >= [2] = matrixMult#(@acc,@y) dequeue#(@outq,@inq) = [1] @inq + [1] @outq + [1] >= [1] @outq + [3] = c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) = [3] >= [8] = c_22(reverse#(@inq)) matrixMult#(@m1,@m2) = [2] >= [3] = c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) = [2] >= [8] = c_33(matrixMult#(@ls,@m2)) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [1] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.a:3: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_32) = {1}, uargs(c_33) = {1}, uargs(c_35) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [1] x1 + [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [2] x1 + [1] x2 + [0] p(bftMult'#4) = [2] x2 + [0] p(bftMult'#5) = [1] x1 + [2] x3 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [3] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [4] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [1] p(#mult#) = [1] x1 + [0] p(#natmult#) = [1] x2 + [0] p(#pred#) = [0] p(#succ#) = [1] x1 + [2] p(*#) = [1] x2 + [0] p(+#) = [1] x1 + [1] x2 + [2] p(appendreverse#) = [2] p(appendreverse#1#) = [2] p(bftMult#) = [0] p(bftMult'#) = [1] x1 + [1] x2 + [1] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [1] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] x2 + [4] p(computeLine#) = [4] x1 + [1] x2 + [1] x3 + [1] p(computeLine#1#) = [1] x3 + [2] p(computeLine#2#) = [4] x3 + [2] p(dequeue#) = [0] p(dequeue#1#) = [6] p(dequeue#2#) = [0] p(enqueue#) = [2] p(enqueue#1#) = [1] x1 + [0] p(lineMult#) = [1] x3 + [0] p(lineMult#1#) = [2] x1 + [2] x2 + [1] x3 + [1] p(lineMult#2#) = [4] x3 + [4] p(matrixMult#) = [1] p(matrixMult#1#) = [0] p(reverse#) = [6] p(c_1) = [0] p(c_2) = [1] x1 + [4] p(c_3) = [1] x1 + [6] p(c_4) = [1] x1 + [7] p(c_5) = [4] p(c_6) = [0] p(c_7) = [1] x1 + [1] p(c_8) = [1] x1 + [0] p(c_9) = [1] x1 + [4] p(c_10) = [0] p(c_11) = [0] p(c_12) = [1] x1 + [1] p(c_13) = [1] x1 + [4] p(c_14) = [4] x2 + [0] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [1] p(c_17) = [0] p(c_18) = [2] p(c_19) = [0] p(c_20) = [1] x1 + [2] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [1] p(c_24) = [1] p(c_25) = [1] p(c_26) = [2] p(c_27) = [1] p(c_28) = [4] p(c_29) = [2] p(c_30) = [1] x1 + [2] p(c_31) = [0] p(c_32) = [1] x1 + [0] p(c_33) = [1] x1 + [7] p(c_34) = [4] p(c_35) = [1] x1 + [4] p(c_36) = [0] p(c_37) = [1] x1 + [0] p(c_38) = [1] x2 + [0] p(c_39) = [1] x1 + [2] p(c_40) = [1] p(c_41) = [1] p(c_42) = [0] p(c_43) = [2] p(c_44) = [0] p(c_45) = [0] p(c_46) = [1] x1 + [1] p(c_47) = [0] p(c_48) = [1] p(c_49) = [2] p(c_50) = [2] p(c_51) = [1] x2 + [1] p(c_52) = [0] p(c_53) = [1] p(c_54) = [0] p(c_55) = [1] p(c_56) = [1] p(c_57) = [2] p(c_58) = [4] p(c_59) = [1] Following rules are strictly oriented: matrixMult#(@m1,@m2) = [1] > [0] = c_32(matrixMult#1#(@m1,@m2)) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [2] >= [8] = c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) = [2] >= [9] = c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [1] >= [1] @acc + [1] @queue + [0] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [1] >= [1] = bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] >= [4] = c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [3] >= [1] @acc + [1] @queue + [1] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [4] >= [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [4] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [4] >= [1] @queue' + [1] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [4] >= [1] = matrixMult#(@acc,@y) dequeue#(@outq,@inq) = [0] >= [8] = c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) = [6] >= [6] = c_22(reverse#(@inq)) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [8] = c_33(matrixMult#(@ls,@m2)) reverse#(@xs) = [6] >= [6] = c_35(appendreverse#(@xs,nil())) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.a:4: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_32) = {1}, uargs(c_33) = {1}, uargs(c_35) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [2] p(bftMult'#5) = [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [3] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [0] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [1] x1 + [1] x2 + [0] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [1] x1 + [0] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] x2 + [1] x3 + [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [1] x1 + [1] x2 + [0] p(dequeue#1#) = [1] x1 + [1] x2 + [5] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(lineMult#2#) = [1] x4 + [0] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [1] x1 + [1] p(c_1) = [0] p(c_2) = [1] x1 + [1] p(c_3) = [1] x1 + [6] p(c_4) = [1] x1 + [1] p(c_5) = [0] p(c_6) = [1] x1 + [0] p(c_7) = [0] p(c_8) = [4] x1 + [2] p(c_9) = [1] x1 + [2] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [4] p(c_13) = [2] p(c_14) = [1] x1 + [0] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [0] p(c_17) = [0] p(c_18) = [1] x1 + [1] x2 + [1] p(c_19) = [1] p(c_20) = [1] x1 + [3] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [2] p(c_24) = [1] p(c_25) = [2] x1 + [0] p(c_26) = [2] p(c_27) = [2] x1 + [0] p(c_28) = [4] p(c_29) = [0] p(c_30) = [1] x1 + [0] p(c_31) = [4] x1 + [1] p(c_32) = [1] x1 + [0] p(c_33) = [1] x1 + [2] p(c_34) = [1] p(c_35) = [1] x1 + [0] p(c_36) = [0] p(c_37) = [4] x1 + [0] p(c_38) = [2] x1 + [4] x2 + [1] p(c_39) = [4] p(c_40) = [1] x2 + [0] p(c_41) = [2] p(c_42) = [1] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [4] p(c_48) = [1] x1 + [0] p(c_49) = [0] p(c_50) = [4] p(c_51) = [1] x1 + [4] p(c_52) = [1] p(c_53) = [0] p(c_54) = [4] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] Following rules are strictly oriented: dequeue#1#(nil(),@inq) = [1] @inq + [5] > [1] @inq + [1] = c_22(reverse#(@inq)) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [0] >= [6] = c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) = [0] >= [1] = c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [0] >= [1] @acc + [1] @queue + [0] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [0] >= [1] @queue + [0] = bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [2] = c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [3] >= [1] @acc + [1] @queue + [0] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [0] >= [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [0] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [1] @y + [0] >= [1] @queue' + [0] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [1] @y + [0] >= [0] = matrixMult#(@acc,@y) dequeue#(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [8] = c_20(dequeue#1#(@outq,@inq)) matrixMult#(@m1,@m2) = [0] >= [0] = c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [2] = c_33(matrixMult#(@ls,@m2)) reverse#(@xs) = [1] @xs + [1] >= [0] = c_35(appendreverse#(@xs,nil())) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.a:5: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_32) = {1}, uargs(c_33) = {1}, uargs(c_35) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [1] x2 + [0] p(bftMult'#2) = [1] x1 + [1] p(bftMult'#3) = [1] x1 + [1] x3 + [0] p(bftMult'#4) = [4] x2 + [1] x3 + [1] p(bftMult'#5) = [1] x1 + [2] x3 + [1] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [1] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [1] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [4] x2 + [0] p(#mult#) = [2] x1 + [4] x2 + [0] p(#natmult#) = [1] p(#pred#) = [4] x1 + [0] p(#succ#) = [4] x1 + [4] p(*#) = [1] x2 + [4] p(+#) = [4] x2 + [1] p(appendreverse#) = [0] p(appendreverse#1#) = [1] p(bftMult#) = [1] p(bftMult'#) = [1] x1 + [1] x2 + [1] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [1] x1 + [0] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] x2 + [1] p(computeLine#) = [1] x1 + [0] p(computeLine#1#) = [1] p(computeLine#2#) = [1] x2 + [2] x3 + [1] x4 + [1] p(dequeue#) = [7] p(dequeue#1#) = [2] p(dequeue#2#) = [1] x1 + [1] p(enqueue#) = [1] x2 + [0] p(enqueue#1#) = [1] x1 + [1] p(lineMult#) = [2] x2 + [1] x3 + [0] p(lineMult#1#) = [1] x1 + [1] x2 + [1] x3 + [2] p(lineMult#2#) = [1] x1 + [1] x3 + [4] x4 + [0] p(matrixMult#) = [1] p(matrixMult#1#) = [0] p(reverse#) = [0] p(c_1) = [1] x1 + [0] p(c_2) = [2] x1 + [0] p(c_3) = [1] x1 + [7] p(c_4) = [1] x1 + [0] p(c_5) = [0] p(c_6) = [1] p(c_7) = [1] x1 + [1] x2 + [0] p(c_8) = [1] x1 + [1] p(c_9) = [1] x1 + [0] p(c_10) = [2] x1 + [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [4] p(c_14) = [1] x2 + [0] p(c_15) = [1] p(c_16) = [2] x1 + [4] p(c_17) = [4] p(c_18) = [1] x2 + [1] p(c_19) = [0] p(c_20) = [1] x1 + [4] p(c_21) = [0] p(c_22) = [1] x1 + [2] p(c_23) = [0] p(c_24) = [1] p(c_25) = [1] x1 + [0] p(c_26) = [1] p(c_27) = [1] x1 + [0] p(c_28) = [4] x1 + [0] p(c_29) = [0] p(c_30) = [4] x1 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [1] p(c_33) = [1] x1 + [0] p(c_34) = [0] p(c_35) = [1] x1 + [0] p(c_36) = [0] p(c_37) = [2] x1 + [4] p(c_38) = [1] x1 + [1] x2 + [0] p(c_39) = [2] p(c_40) = [1] p(c_41) = [0] p(c_42) = [0] p(c_43) = [2] p(c_44) = [0] p(c_45) = [0] p(c_46) = [1] x1 + [2] p(c_47) = [1] p(c_48) = [1] p(c_49) = [1] p(c_50) = [2] p(c_51) = [1] x1 + [4] x2 + [0] p(c_52) = [1] p(c_53) = [1] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [1] p(c_59) = [1] Following rules are strictly oriented: appendreverse#1#(::(@a,@as),@sofar) = [1] > [0] = c_4(appendreverse#(@as,::(@a,@sofar))) dequeue#(@outq,@inq) = [7] > [6] = c_20(dequeue#1#(@outq,@inq)) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [0] >= [8] = c_3(appendreverse#1#(@toreverse,@sofar)) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [1] >= [1] @acc + [1] @queue + [1] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [1] >= [1] @queue + [0] = bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [7] = c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [1] >= [1] @acc + [1] @queue + [1] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] >= [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [1] >= [1] @queue' + [1] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [1] >= [1] = matrixMult#(@acc,@y) dequeue#1#(nil(),@inq) = [2] >= [2] = c_22(reverse#(@inq)) matrixMult#(@m1,@m2) = [1] >= [1] = c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [1] = c_33(matrixMult#(@ls,@m2)) reverse#(@xs) = [0] >= [0] = c_35(appendreverse#(@xs,nil())) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [1] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.a:6: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) - Weak DPs: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_32) = {1}, uargs(c_33) = {1}, uargs(c_35) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [2] x2 + [0] p(bftMult') = [1] p(bftMult'#1) = [4] x1 + [1] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [4] x1 + [1] x3 + [0] p(bftMult'#4) = [4] x1 + [1] x2 + [1] x3 + [1] p(bftMult'#5) = [1] x1 + [1] x3 + [4] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [3] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [3] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [4] x2 + [0] p(#mult#) = [1] x2 + [0] p(#natmult#) = [2] x1 + [1] x2 + [4] p(#pred#) = [1] x1 + [0] p(#succ#) = [1] p(*#) = [0] p(+#) = [4] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [4] p(bftMult'#) = [1] x1 + [1] x2 + [2] p(bftMult'#1#) = [1] x1 + [1] x2 + [2] p(bftMult'#2#) = [1] x1 + [2] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [3] p(computeLine#) = [2] x1 + [2] x3 + [0] p(computeLine#1#) = [2] x2 + [1] p(computeLine#2#) = [2] x1 + [1] x2 + [1] x3 + [2] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [4] p(enqueue#) = [0] p(enqueue#1#) = [4] x1 + [4] p(lineMult#) = [1] x1 + [1] x2 + [1] p(lineMult#1#) = [1] x1 + [1] x2 + [4] x3 + [2] p(lineMult#2#) = [4] x3 + [1] x4 + [0] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [0] p(c_1) = [1] x1 + [1] p(c_2) = [4] x1 + [0] p(c_3) = [1] x1 + [7] p(c_4) = [1] x1 + [0] p(c_5) = [2] p(c_6) = [1] x1 + [0] p(c_7) = [2] x1 + [1] x2 + [1] p(c_8) = [1] x1 + [0] p(c_9) = [1] x1 + [1] p(c_10) = [0] p(c_11) = [2] p(c_12) = [0] p(c_13) = [0] p(c_14) = [2] x1 + [1] x2 + [0] p(c_15) = [4] x1 + [1] p(c_16) = [2] p(c_17) = [1] p(c_18) = [4] x1 + [4] x2 + [4] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [1] p(c_24) = [0] p(c_25) = [1] p(c_26) = [1] p(c_27) = [2] x1 + [4] p(c_28) = [1] p(c_29) = [0] p(c_30) = [1] x1 + [1] p(c_31) = [4] x1 + [1] p(c_32) = [1] x1 + [0] p(c_33) = [1] x1 + [3] p(c_34) = [2] p(c_35) = [1] x1 + [0] p(c_36) = [1] p(c_37) = [1] p(c_38) = [0] p(c_39) = [0] p(c_40) = [1] x1 + [2] x2 + [0] p(c_41) = [0] p(c_42) = [4] p(c_43) = [1] p(c_44) = [0] p(c_45) = [1] x1 + [0] p(c_46) = [0] p(c_47) = [4] p(c_48) = [1] x1 + [4] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [1] p(c_52) = [2] p(c_53) = [4] p(c_54) = [1] p(c_55) = [0] p(c_56) = [1] p(c_57) = [0] p(c_58) = [0] p(c_59) = [1] Following rules are strictly oriented: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [2] > [1] = c_9(dequeue#(@dequeue@1,@dequeue@2)) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [0] >= [7] = c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) = [0] >= [0] = c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [2] >= [1] @acc + [1] @queue + [2] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [2] >= [1] @queue + [2] = bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [2] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [3] >= [1] @acc + [1] @queue + [2] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [3] >= [1] @queue + [1] @t1 + [1] @t2 + [3] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [3] >= [1] @queue' + [2] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [3] >= [0] = matrixMult#(@acc,@y) dequeue#(@outq,@inq) = [0] >= [0] = c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) = [0] >= [0] = c_22(reverse#(@inq)) matrixMult#(@m1,@m2) = [0] >= [0] = c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [3] = c_33(matrixMult#(@ls,@m2)) reverse#(@xs) = [0] >= [0] = c_35(appendreverse#(@xs,nil())) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.a:7: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) - Weak DPs: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_32) = {1}, uargs(c_33) = {1}, uargs(c_35) = {1} Following symbols are considered usable: {matrixMult,matrixMult#1,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse#,appendreverse#1# ,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1# ,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2# ,matrixMult#,matrixMult#1#,reverse#} TcT has computed the following interpretation: p(#0) = [5] p(#add) = [1] x1 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [0] p(#pos) = [1] x1 + [0] p(#pred) = [2] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [0] p(*) = [0] p(+) = [0] p(::) = [1] x2 + [4] p(appendreverse) = [0] p(appendreverse#1) = [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(computeLine) = [0] p(computeLine#1) = [0] p(computeLine#2) = [0] p(dequeue) = [0] p(dequeue#1) = [0] p(dequeue#2) = [1] p(enqueue) = [1] x1 + [0] p(enqueue#1) = [0] p(leaf) = [0] p(lineMult) = [1] x1 + [0] p(lineMult#1) = [0] p(lineMult#2) = [1] x2 + [1] x4 + [3] p(matrixMult) = [1] x1 + [0] p(matrixMult#1) = [1] x1 + [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [0] p(reverse) = [0] p(tuple#2) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [4] x2 + [4] p(bftMult'#1#) = [4] x2 + [4] p(bftMult'#2#) = [4] p(bftMult'#3#) = [4] x2 + [4] p(bftMult'#4#) = [4] x2 + [4] p(bftMult'#5#) = [4] x2 + [4] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [3] p(dequeue#1#) = [3] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [2] p(lineMult#) = [1] x2 + [1] x3 + [1] p(lineMult#1#) = [1] x2 + [1] x3 + [0] p(lineMult#2#) = [1] x3 + [1] p(matrixMult#) = [2] x1 + [1] p(matrixMult#1#) = [2] x1 + [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [4] x1 + [0] p(c_4) = [4] x1 + [0] p(c_5) = [0] p(c_6) = [4] p(c_7) = [1] x1 + [0] p(c_8) = [0] p(c_9) = [1] x1 + [1] p(c_10) = [1] x1 + [0] p(c_11) = [2] p(c_12) = [4] x1 + [1] p(c_13) = [2] p(c_14) = [0] p(c_15) = [0] p(c_16) = [1] p(c_17) = [1] p(c_18) = [1] x2 + [1] p(c_19) = [1] p(c_20) = [1] x1 + [0] p(c_21) = [0] p(c_22) = [2] x1 + [2] p(c_23) = [2] p(c_24) = [0] p(c_25) = [1] p(c_26) = [0] p(c_27) = [0] p(c_28) = [1] p(c_29) = [1] p(c_30) = [2] x1 + [1] p(c_31) = [0] p(c_32) = [1] x1 + [1] p(c_33) = [1] x1 + [3] p(c_34) = [0] p(c_35) = [2] x1 + [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [4] x1 + [0] p(c_39) = [2] x1 + [1] p(c_40) = [0] p(c_41) = [0] p(c_42) = [2] p(c_43) = [2] p(c_44) = [1] p(c_45) = [2] p(c_46) = [1] p(c_47) = [1] p(c_48) = [4] x1 + [0] p(c_49) = [1] x1 + [4] p(c_50) = [1] p(c_51) = [1] x1 + [1] x2 + [0] p(c_52) = [0] p(c_53) = [1] p(c_54) = [1] p(c_55) = [4] p(c_56) = [1] p(c_57) = [4] p(c_58) = [2] p(c_59) = [0] Following rules are strictly oriented: matrixMult#1#(::(@l,@ls),@m2) = [2] @ls + [8] > [2] @ls + [4] = c_33(matrixMult#(@ls,@m2)) Following rules are (at-least) weakly oriented: appendreverse#(@toreverse,@sofar) = [0] >= [0] = c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) = [0] >= [0] = c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) = [4] @acc + [4] >= [4] @acc + [4] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) = [4] @acc + [4] >= [4] = bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [4] @acc + [4] >= [4] @acc + [4] = bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [4] >= [4] = c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [4] @acc + [4] >= [4] @acc + [4] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [4] @acc + [4] >= [4] @acc + [4] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [4] @acc + [4] >= [4] @acc + [4] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [4] @acc + [4] >= [4] @acc + [4] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [4] @acc + [4] >= [2] @acc + [1] = matrixMult#(@acc,@y) dequeue#(@outq,@inq) = [3] >= [3] = c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) = [3] >= [2] = c_22(reverse#(@inq)) matrixMult#(@m1,@m2) = [2] @m1 + [1] >= [2] @m1 + [1] = c_32(matrixMult#1#(@m1,@m2)) reverse#(@xs) = [0] >= [0] = c_35(appendreverse#(@xs,nil())) matrixMult(@m1,@m2) = [1] @m1 + [0] >= [1] @m1 + [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [1] @ls + [4] >= [1] @ls + [4] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() *** Step 8.b:1.a:8: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) - Weak DPs: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_32) = {1}, uargs(c_33) = {1}, uargs(c_35) = {1} Following symbols are considered usable: {appendreverse,appendreverse#1,bftMult'#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,reverse,#add# ,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1# ,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue# ,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1# ,reverse#} TcT has computed the following interpretation: p(#0) = [1] p(#add) = [3] x1 + [2] x2 + [0] p(#mult) = [1] x1 + [4] x2 + [5] p(#natmult) = [4] x1 + [2] p(#neg) = [1] x1 + [2] p(#pos) = [1] p(#pred) = [2] x1 + [2] p(#s) = [2] p(#succ) = [0] p(*) = [4] x1 + [1] x2 + [0] p(+) = [1] x1 + [1] p(::) = [1] x1 + [1] x2 + [1] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [2] x1 + [0] p(bftMult'#4) = [1] x2 + [0] p(bftMult'#5) = [1] x1 + [1] p(computeLine) = [4] x1 + [1] x2 + [4] x3 + [7] p(computeLine#1) = [1] x3 + [3] p(computeLine#2) = [4] x4 + [3] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [1] p(enqueue#1) = [1] x1 + [1] x2 + [1] p(leaf) = [0] p(lineMult) = [1] x1 + [1] x2 + [2] x3 + [2] p(lineMult#1) = [3] x1 + [6] p(lineMult#2) = [1] x1 + [2] x2 + [4] x3 + [6] p(matrixMult) = [1] x1 + [6] x2 + [2] p(matrixMult#1) = [1] x2 + [2] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [4] x2 + [1] p(#mult#) = [1] p(#natmult#) = [4] x1 + [1] p(#pred#) = [0] p(#succ#) = [1] x1 + [4] p(*#) = [1] x1 + [4] p(+#) = [1] x1 + [4] p(appendreverse#) = [1] x1 + [1] p(appendreverse#1#) = [1] x1 + [0] p(bftMult#) = [1] x1 + [2] x2 + [2] p(bftMult'#) = [4] x1 + [1] p(bftMult'#1#) = [4] x1 + [0] p(bftMult'#2#) = [1] x1 + [1] p(bftMult'#3#) = [4] x1 + [4] x3 + [0] p(bftMult'#4#) = [4] x1 + [4] x3 + [1] p(bftMult'#5#) = [4] x1 + [1] p(computeLine#) = [1] p(computeLine#1#) = [1] x2 + [0] p(computeLine#2#) = [1] x3 + [2] x4 + [4] p(dequeue#) = [1] x2 + [1] p(dequeue#1#) = [1] x2 + [1] p(dequeue#2#) = [1] p(enqueue#) = [4] x1 + [1] x2 + [4] p(enqueue#1#) = [1] x1 + [1] p(lineMult#) = [1] x2 + [4] p(lineMult#1#) = [0] p(lineMult#2#) = [1] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [1] x1 + [1] p(c_1) = [1] x1 + [0] p(c_2) = [4] p(c_3) = [1] x1 + [0] p(c_4) = [1] x1 + [0] p(c_5) = [2] p(c_6) = [1] p(c_7) = [2] x2 + [1] p(c_8) = [0] p(c_9) = [1] x1 + [0] p(c_10) = [0] p(c_11) = [1] p(c_12) = [1] p(c_13) = [1] x1 + [4] p(c_14) = [2] p(c_15) = [1] p(c_16) = [0] p(c_17) = [2] p(c_18) = [4] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [0] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [2] p(c_25) = [2] p(c_26) = [0] p(c_27) = [0] p(c_28) = [4] p(c_29) = [0] p(c_30) = [1] x1 + [1] p(c_31) = [1] p(c_32) = [4] x1 + [0] p(c_33) = [1] x1 + [0] p(c_34) = [1] p(c_35) = [1] x1 + [0] p(c_36) = [1] p(c_37) = [1] p(c_38) = [1] x2 + [0] p(c_39) = [1] x1 + [1] p(c_40) = [4] x2 + [4] p(c_41) = [1] p(c_42) = [1] p(c_43) = [4] p(c_44) = [1] p(c_45) = [0] p(c_46) = [1] p(c_47) = [0] p(c_48) = [4] x1 + [0] p(c_49) = [1] x1 + [4] p(c_50) = [0] p(c_51) = [4] p(c_52) = [0] p(c_53) = [1] p(c_54) = [1] p(c_55) = [0] p(c_56) = [0] p(c_57) = [2] p(c_58) = [1] p(c_59) = [2] Following rules are strictly oriented: appendreverse#(@toreverse,@sofar) = [1] @toreverse + [1] > [1] @toreverse + [0] = c_3(appendreverse#1#(@toreverse,@sofar)) Following rules are (at-least) weakly oriented: appendreverse#1#(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] >= [1] @as + [1] = c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) = [4] @queue + [1] >= [4] @queue + [0] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) = [4] @queue + [1] >= [1] @queue + [1] = bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [4] @elem + [4] @queue + [0] >= [4] @elem + [4] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [1] >= [1] @dequeue@2 + [1] = c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [4] @_@3 + [4] @queue + [4] @t + [4] >= [4] @queue + [4] @t + [1] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [4] @queue + [1] >= [4] @queue + [1] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [4] @queue + [4] @t1 + [4] @t2 + [9] >= [4] @queue + [4] @t1 + [4] @t2 + [9] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [4] @queue' + [1] >= [4] @queue' + [1] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [4] @queue' + [1] >= [0] = matrixMult#(@acc,@y) dequeue#(@outq,@inq) = [1] @inq + [1] >= [1] @inq + [1] = c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) = [1] @inq + [1] >= [1] @inq + [1] = c_22(reverse#(@inq)) matrixMult#(@m1,@m2) = [0] >= [0] = c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = c_33(matrixMult#(@ls,@m2)) reverse#(@xs) = [1] @xs + [1] >= [1] @xs + [1] = c_35(appendreverse#(@xs,nil())) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [1] >= [1] @a + [1] @as + [1] @sofar + [1] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [1] >= [1] @inq + [1] @t + [1] @ts + [1] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [1] >= [1] @queue + [1] @t + [1] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [1] >= [1] @inq + [1] @outq + [1] @t + [1] = tuple#2(@outq,::(@t,@inq)) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) *** Step 8.b:1.a:9: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). *** Step 8.b:1.b:1: DecomposeDG WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) - Weak DPs: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) and a lower component lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) Further, following extension rules are added to the lower component. appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) **** Step 8.b:1.b:1.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) - Weak DPs: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):2 2:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):3 3:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 4:W:appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)):5 5:W:appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):4 6:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):8 7:W:bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) -->_1 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2):9 8:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):10 9:W:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) -->_1 dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq):15 10:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):12 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):11 11:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):7 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 12:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):14 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):13 13:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):7 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 14:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 15:W:dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) -->_1 dequeue#1#(nil(),@inq) -> reverse#(@inq):16 16:W:dequeue#1#(nil(),@inq) -> reverse#(@inq) -->_1 reverse#(@xs) -> appendreverse#(@xs,nil()):20 17:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):19 -->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):18 18:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 19:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 20:W:reverse#(@xs) -> appendreverse#(@xs,nil()) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):4 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 7: bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) 9: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) 15: dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) 16: dequeue#1#(nil(),@inq) -> reverse#(@inq) 20: reverse#(@xs) -> appendreverse#(@xs,nil()) 4: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) 5: appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) **** Step 8.b:1.b:1.a:2: SimplifyRHS WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):2 2:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):3 3:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 6:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):8 8:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):10 10:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):12 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):11 11:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 12:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):14 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):13 13:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 14:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 17:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):19 -->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):18 18:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 19:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) **** Step 8.b:1.b:1.a:3: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(computeLine#) = {3}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [1] x1 + [0] p(bftMult') = [2] x1 + [2] x2 + [2] p(bftMult'#1) = [4] x2 + [1] p(bftMult'#2) = [1] x1 + [1] p(bftMult'#3) = [4] x2 + [1] p(bftMult'#4) = [1] x2 + [1] x3 + [0] p(bftMult'#5) = [2] x1 + [1] x2 + [4] x3 + [2] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [1] p(dequeue#1) = [1] x1 + [1] x2 + [1] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [4] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [1] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [1] p(#mult#) = [1] x2 + [1] p(#natmult#) = [2] p(#pred#) = [2] x1 + [0] p(#succ#) = [1] p(*#) = [1] x1 + [0] p(+#) = [0] p(appendreverse#) = [1] x1 + [2] x2 + [2] p(appendreverse#1#) = [1] x1 + [0] p(bftMult#) = [1] x2 + [1] p(bftMult'#) = [1] x1 + [1] x2 + [2] p(bftMult'#1#) = [1] x1 + [1] x2 + [1] p(bftMult'#2#) = [4] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] x2 + [2] p(computeLine#) = [1] x3 + [0] p(computeLine#1#) = [1] x2 + [1] p(computeLine#2#) = [1] x2 + [1] p(dequeue#) = [2] x2 + [4] p(dequeue#1#) = [1] x1 + [1] p(dequeue#2#) = [1] x1 + [0] p(enqueue#) = [1] x1 + [1] x2 + [1] p(enqueue#1#) = [1] x2 + [1] p(lineMult#) = [4] x3 + [1] p(lineMult#1#) = [1] x1 + [0] p(lineMult#2#) = [1] x1 + [0] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [4] x1 + [0] p(c_1) = [0] p(c_2) = [1] p(c_3) = [1] x1 + [1] p(c_4) = [2] x1 + [4] p(c_5) = [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x2 + [4] p(c_8) = [1] x1 + [1] p(c_9) = [1] x1 + [1] p(c_10) = [1] x1 + [1] p(c_11) = [0] p(c_12) = [1] x1 + [1] p(c_13) = [2] x1 + [0] p(c_14) = [2] x1 + [1] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [0] p(c_17) = [1] p(c_18) = [1] x1 + [0] p(c_19) = [2] p(c_20) = [0] p(c_21) = [0] p(c_22) = [4] x1 + [1] p(c_23) = [0] p(c_24) = [0] p(c_25) = [4] x1 + [1] p(c_26) = [0] p(c_27) = [2] x1 + [0] p(c_28) = [1] x1 + [4] p(c_29) = [4] p(c_30) = [1] x1 + [1] p(c_31) = [1] x1 + [2] p(c_32) = [1] x1 + [0] p(c_33) = [1] x2 + [1] p(c_34) = [2] p(c_35) = [1] x1 + [1] p(c_36) = [1] p(c_37) = [0] p(c_38) = [1] x1 + [1] p(c_39) = [1] x1 + [1] p(c_40) = [1] x1 + [2] x2 + [1] p(c_41) = [1] p(c_42) = [0] p(c_43) = [2] p(c_44) = [1] p(c_45) = [2] x1 + [1] p(c_46) = [1] x1 + [4] p(c_47) = [1] p(c_48) = [0] p(c_49) = [4] x1 + [4] p(c_50) = [1] p(c_51) = [1] x1 + [0] p(c_52) = [4] p(c_53) = [0] p(c_54) = [1] p(c_55) = [1] p(c_56) = [4] p(c_57) = [0] p(c_58) = [0] p(c_59) = [1] Following rules are strictly oriented: computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [1] > [1] @acc + [0] = c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [2] >= [1] @acc + [1] @queue + [2] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [1] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [4] >= [1] @acc + [1] @queue + [2] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [2] >= [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [2] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [2] >= [1] @queue' + [2] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [2] >= [0] = matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [2] = c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) = [1] @acc + [1] >= [1] @acc + [1] = c_16(computeLine#2#(@m,@acc,@x,@xs)) matrixMult#(@m1,@m2) = [0] >= [0] = matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = matrixMult#(@ls,@m2) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [1] >= [1] @dequeue@1 + [1] @dequeue@2 + [1] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [1] >= [1] @inq + [1] @outq + [1] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [1] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [1] >= [1] @inq + [1] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() reverse(@xs) = [1] @xs + [1] >= [1] @xs + [0] = appendreverse(@xs,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. **** Step 8.b:1.b:1.a:4: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(computeLine#) = {3}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [4] x2 + [4] p(bftMult') = [1] x1 + [1] x2 + [0] p(bftMult'#1) = [1] x1 + [1] p(bftMult'#2) = [1] x1 + [5] p(bftMult'#3) = [1] x1 + [1] x2 + [1] p(bftMult'#4) = [1] x2 + [0] p(bftMult'#5) = [1] x1 + [1] x2 + [1] x3 + [1] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [4] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [1] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [5] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [7] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [4] x2 + [2] p(#mult#) = [1] x1 + [2] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [4] x1 + [4] x2 + [4] p(+#) = [2] x1 + [1] p(appendreverse#) = [1] x1 + [4] p(appendreverse#1#) = [1] x1 + [2] x2 + [0] p(bftMult#) = [1] x1 + [4] x2 + [0] p(bftMult'#) = [1] x1 + [1] x2 + [5] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [4] x1 + [4] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] x2 + [5] p(computeLine#) = [1] x3 + [0] p(computeLine#1#) = [1] x2 + [5] p(computeLine#2#) = [1] x2 + [2] p(dequeue#) = [0] p(dequeue#1#) = [1] x1 + [1] x2 + [1] p(dequeue#2#) = [1] p(enqueue#) = [4] x1 + [4] p(enqueue#1#) = [1] x1 + [1] x2 + [2] p(lineMult#) = [1] x3 + [0] p(lineMult#1#) = [1] x2 + [0] p(lineMult#2#) = [2] x1 + [2] x3 + [1] x4 + [1] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [1] p(c_1) = [2] p(c_2) = [1] x1 + [4] p(c_3) = [4] p(c_4) = [1] x1 + [4] p(c_5) = [4] p(c_6) = [4] x1 + [0] p(c_7) = [4] x2 + [2] p(c_8) = [0] p(c_9) = [0] p(c_10) = [2] x1 + [0] p(c_11) = [1] p(c_12) = [0] p(c_13) = [1] x1 + [2] p(c_14) = [1] x1 + [0] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [1] p(c_17) = [1] p(c_18) = [1] x1 + [2] p(c_19) = [4] p(c_20) = [1] x1 + [1] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [1] p(c_24) = [0] p(c_25) = [4] x1 + [4] p(c_26) = [0] p(c_27) = [1] x1 + [2] p(c_28) = [2] x1 + [0] p(c_29) = [2] p(c_30) = [2] x1 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [2] x1 + [4] p(c_33) = [1] x1 + [1] x2 + [1] p(c_34) = [0] p(c_35) = [1] p(c_36) = [1] p(c_37) = [2] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] p(c_40) = [1] x2 + [0] p(c_41) = [1] p(c_42) = [4] p(c_43) = [2] p(c_44) = [1] p(c_45) = [2] p(c_46) = [2] x1 + [0] p(c_47) = [4] p(c_48) = [1] x1 + [4] p(c_49) = [2] p(c_50) = [4] p(c_51) = [1] x2 + [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [4] p(c_55) = [0] p(c_56) = [4] p(c_57) = [0] p(c_58) = [2] p(c_59) = [0] Following rules are strictly oriented: computeLine#1#(::(@x,@xs),@acc,@m) = [1] @acc + [5] > [1] @acc + [3] = c_16(computeLine#2#(@m,@acc,@x,@xs)) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [5] >= [1] @acc + [1] @queue + [5] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [5] >= [1] @acc + [1] @queue + [5] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [7] >= [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [7] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [5] >= [1] @queue' + [5] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [5] >= [0] = matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [5] = c_15(computeLine#1#(@line,@acc,@m)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [2] >= [1] @acc + [2] = c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) matrixMult#(@m1,@m2) = [0] >= [0] = matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = matrixMult#(@ls,@m2) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [5] >= [1] @dequeue@1 + [1] @dequeue@2 + [4] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [4] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [1] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.b:1.a:5: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1} Following symbols are considered usable: {appendreverse,appendreverse#1,bftMult'#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,reverse,#add# ,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1# ,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue# ,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1# ,reverse#} TcT has computed the following interpretation: p(#0) = [3] p(#add) = [4] x1 + [0] p(#mult) = [3] x2 + [0] p(#natmult) = [0] p(#neg) = [0] p(#pos) = [1] p(#pred) = [0] p(#s) = [0] p(#succ) = [2] x1 + [6] p(*) = [4] p(+) = [2] x1 + [5] p(::) = [1] x1 + [1] x2 + [1] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [1] x1 + [2] p(bftMult'#2) = [1] x1 + [3] p(bftMult'#3) = [1] x3 + [0] p(bftMult'#4) = [1] x1 + [0] p(bftMult'#5) = [0] p(computeLine) = [2] p(computeLine#1) = [1] x1 + [4] p(computeLine#2) = [1] x2 + [2] x3 + [4] p(dequeue) = [1] x1 + [1] x2 + [3] p(dequeue#1) = [1] x1 + [1] x2 + [3] p(dequeue#2) = [1] x1 + [2] p(enqueue) = [1] x1 + [1] x2 + [1] p(enqueue#1) = [1] x1 + [1] x2 + [1] p(leaf) = [4] p(lineMult) = [7] x1 + [0] p(lineMult#1) = [0] p(lineMult#2) = [1] x2 + [2] x3 + [2] p(matrixMult) = [1] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [5] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [1] x2 + [2] p(#mult#) = [0] p(#natmult#) = [1] x1 + [0] p(#pred#) = [4] x1 + [1] p(#succ#) = [2] x1 + [1] p(*#) = [4] p(+#) = [1] x1 + [1] x2 + [1] p(appendreverse#) = [4] x1 + [0] p(appendreverse#1#) = [0] p(bftMult#) = [2] x1 + [1] x2 + [2] p(bftMult'#) = [1] x1 + [3] p(bftMult'#1#) = [1] x1 + [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [1] x1 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x3 + [1] p(bftMult'#5#) = [1] x1 + [1] x3 + [3] p(computeLine#) = [1] x2 + [2] p(computeLine#1#) = [1] x3 + [1] p(computeLine#2#) = [1] x1 + [1] p(dequeue#) = [1] x1 + [1] p(dequeue#1#) = [1] x1 + [2] p(dequeue#2#) = [1] p(enqueue#) = [4] p(enqueue#1#) = [1] x1 + [1] x2 + [1] p(lineMult#) = [0] p(lineMult#1#) = [1] x2 + [1] p(lineMult#2#) = [1] x1 + [4] x2 + [1] x3 + [0] p(matrixMult#) = [1] x2 + [2] p(matrixMult#1#) = [1] x2 + [2] p(reverse#) = [4] x1 + [1] p(c_1) = [1] x1 + [0] p(c_2) = [0] p(c_3) = [2] x1 + [0] p(c_4) = [4] x1 + [1] p(c_5) = [0] p(c_6) = [1] x1 + [1] p(c_7) = [1] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [4] p(c_11) = [0] p(c_12) = [1] x1 + [1] p(c_13) = [1] p(c_14) = [1] x2 + [0] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [0] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] p(c_21) = [0] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [1] p(c_25) = [4] p(c_26) = [0] p(c_27) = [1] p(c_28) = [1] x1 + [1] p(c_29) = [2] p(c_30) = [1] p(c_31) = [1] p(c_32) = [0] p(c_33) = [1] x1 + [2] x2 + [1] p(c_34) = [4] p(c_35) = [0] p(c_36) = [1] p(c_37) = [1] p(c_38) = [1] x1 + [0] p(c_39) = [2] p(c_40) = [1] x1 + [4] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [1] p(c_45) = [1] x1 + [4] p(c_46) = [0] p(c_47) = [0] p(c_48) = [1] p(c_49) = [4] p(c_50) = [0] p(c_51) = [1] p(c_52) = [2] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [1] p(c_58) = [4] p(c_59) = [2] Following rules are strictly oriented: computeLine#(@line,@m,@acc) = [1] @m + [2] > [1] @m + [1] = c_15(computeLine#1#(@line,@acc,@m)) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @queue + [3] >= [1] @queue + [3] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @elem + [1] @queue + [0] >= [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @queue + [1] @t + [1] >= [1] @queue + [1] @t + [1] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @queue + [5] >= [1] @queue + [3] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [6] >= [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [5] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [1] @y + [3] >= [1] @queue' + [3] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [1] @y + [3] >= [1] @y + [2] = matrixMult#(@acc,@y) computeLine#1#(::(@x,@xs),@acc,@m) = [1] @m + [1] >= [1] @m + [1] = c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1] @l + [1] @ls + [2] >= [1] @ls + [2] = c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) matrixMult#(@m1,@m2) = [1] @m2 + [2] >= [1] @m2 + [2] = matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) = [1] @m2 + [2] >= [1] @m2 + [2] = computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) = [1] @m2 + [2] >= [1] @m2 + [2] = matrixMult#(@ls,@m2) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [1] >= [1] @a + [1] @as + [1] @sofar + [1] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [3] >= [1] @dequeue@1 + [1] @dequeue@2 + [3] = dequeue(@dequeue@1,@dequeue@2) dequeue(@outq,@inq) = [1] @inq + [1] @outq + [3] >= [1] @inq + [1] @outq + [3] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [4] >= [1] @inq + [1] @t + [1] @ts + [1] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [3] >= [1] @inq + [2] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [3] >= [1] @t + [1] @ts + [1] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [2] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [1] >= [1] @queue + [1] @t + [1] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [1] >= [1] @inq + [1] @outq + [1] @t + [1] = tuple#2(@outq,::(@t,@inq)) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) **** Step 8.b:1.b:1.a:6: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). **** Step 8.b:1.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) - Weak DPs: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):2 2:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())):4 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)):3 3:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):1 4:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):1 5:W:appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)):6 6:W:appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):5 7:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):9 8:W:bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) -->_1 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2):10 9:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):11 10:W:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) -->_1 dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq):20 11:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):13 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):12 12:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):8 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):7 13:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):15 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):14 14:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):8 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):7 15:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):22 16:W:computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs):17 17:W:computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc):19 -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)):18 18:W:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) -->_1 computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m):16 19:W:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):1 20:W:dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) -->_1 dequeue#1#(nil(),@inq) -> reverse#(@inq):21 21:W:dequeue#1#(nil(),@inq) -> reverse#(@inq) -->_1 reverse#(@xs) -> appendreverse#(@xs,nil()):25 22:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):24 -->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):23 23:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) -->_1 computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m):16 24:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):22 25:W:reverse#(@xs) -> appendreverse#(@xs,nil()) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):5 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 8: bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) 10: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) 20: dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) 21: dequeue#1#(nil(),@inq) -> reverse#(@inq) 25: reverse#(@xs) -> appendreverse#(@xs,nil()) 5: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) 6: appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) **** Step 8.b:1.b:1.b:2: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(computeLine#) = {3}, uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_30) = {1}, uargs(c_31) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [2] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [3] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [1] x1 + [1] x2 + [1] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [2] p(computeLine#) = [1] x3 + [0] p(computeLine#1#) = [1] x2 + [0] p(computeLine#2#) = [1] x2 + [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [1] x3 + [0] p(lineMult#1#) = [1] x2 + [2] p(lineMult#2#) = [1] x1 + [0] p(matrixMult#) = [0] p(matrixMult#1#) = [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) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [1] x1 + [0] p(c_31) = [1] x1 + [2] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] Following rules are strictly oriented: lineMult#1#(::(@x,@xs),@l2,@n) = [1] @l2 + [2] > [1] @l2 + [0] = c_28(lineMult#2#(@l2,@n,@x,@xs)) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [1] >= [1] @acc + [1] @queue + [0] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [2] >= [1] @acc + [1] @queue + [1] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [1] @y + [3] >= [1] @queue + [1] @t1 + [1] @t2 + [2] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [2] >= [1] @queue' + [1] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [2] >= [0] = matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = lineMult#(@x,@l,@acc) lineMult#(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [2] = c_27(lineMult#1#(@l1,@l2,@n)) lineMult#2#(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @ys + [0] = c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) = [0] >= [2] = c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) = [0] >= [0] = matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = matrixMult#(@ls,@m2) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.b:1.b:3: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + 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(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(bftMult'#) = {2}, uargs(bftMult'#1#) = {1}, uargs(bftMult'#5#) = {1}, uargs(computeLine#) = {3}, uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_30) = {1}, uargs(c_31) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [1] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [2] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [0] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [1] x2 + [1] p(appendreverse#) = [1] x2 + [0] p(appendreverse#1#) = [2] p(bftMult#) = [0] p(bftMult'#) = [1] x1 + [1] x2 + [0] p(bftMult'#1#) = [1] x1 + [1] x2 + [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] x2 + [0] p(computeLine#) = [1] x3 + [0] p(computeLine#1#) = [1] x2 + [0] p(computeLine#2#) = [1] x2 + [0] p(dequeue#) = [1] x1 + [0] p(dequeue#1#) = [1] x2 + [0] p(dequeue#2#) = [1] x1 + [0] p(enqueue#) = [1] x2 + [0] p(enqueue#1#) = [2] x1 + [0] p(lineMult#) = [0] p(lineMult#1#) = [2] p(lineMult#2#) = [2] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [2] x1 + [2] p(c_1) = [0] p(c_2) = [1] x1 + [0] p(c_3) = [1] x1 + [0] p(c_4) = [2] p(c_5) = [2] p(c_6) = [1] x1 + [1] p(c_7) = [2] p(c_8) = [1] x1 + [1] p(c_9) = [2] x1 + [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [2] x1 + [0] p(c_13) = [2] x1 + [1] p(c_14) = [1] x2 + [0] p(c_15) = [2] p(c_16) = [2] p(c_17) = [2] p(c_18) = [1] x1 + [2] x2 + [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [1] x1 + [0] p(c_23) = [2] p(c_24) = [0] p(c_25) = [1] p(c_26) = [2] p(c_27) = [1] x1 + [2] p(c_28) = [1] x1 + [0] p(c_29) = [1] p(c_30) = [1] x1 + [1] p(c_31) = [1] x1 + [1] p(c_32) = [0] p(c_33) = [2] x2 + [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [1] x1 + [1] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [2] p(c_40) = [2] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [1] x1 + [2] p(c_47) = [2] p(c_48) = [2] x1 + [0] p(c_49) = [2] x1 + [0] p(c_50) = [0] p(c_51) = [2] x1 + [0] p(c_52) = [1] p(c_53) = [0] p(c_54) = [0] p(c_55) = [2] p(c_56) = [0] p(c_57) = [1] p(c_58) = [0] p(c_59) = [0] Following rules are strictly oriented: lineMult#2#(::(@y,@ys),@n,@x,@xs) = [2] > [1] = c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) = [2] > [1] = c_31(lineMult#(@n,@xs,nil())) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [1] @acc + [1] @queue + [0] >= [1] @acc + [1] @queue + [0] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @acc + [1] @elem + [1] @queue + [0] >= [1] @acc + [1] @elem + [1] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @acc + [1] @queue + [1] @t + [0] >= [1] @acc + [1] @queue + [1] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [1] @acc + [1] @queue + [2] >= [1] @acc + [1] @queue + [0] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [0] >= [1] @acc + [1] @queue + [1] @t1 + [1] @t2 + [0] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [0] >= [1] @queue' + [0] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [1] @acc + [1] @queue' + [0] >= [0] = matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [0] = lineMult#(@x,@l,@acc) lineMult#(@n,@l1,@l2) = [0] >= [4] = c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) = [2] >= [2] = c_28(lineMult#2#(@l2,@n,@x,@xs)) matrixMult#(@m1,@m2) = [0] >= [0] = matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) = [0] >= [0] = matrixMult#(@ls,@m2) #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [0] >= [1] @a + [1] @as + [1] @sofar + [0] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) = [1] @acc + [0] >= [1] @acc + [0] = @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) = [1] @acc + [0] >= [1] @acc + [0] = computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) = [1] @acc + [0] >= [0] = nil() dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [0] >= [1] @inq + [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [0] >= [1] @t + [1] @ts + [0] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [0] >= [1] @queue + [1] @t + [0] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [0] >= [1] @inq + [1] @outq + [1] @t + [0] = tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) = [1] @l2 + [0] >= [1] @l2 + [0] = lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) = [1] @l2 + [0] >= [0] = nil() lineMult#2(::(@y,@ys),@n,@x,@xs) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) = [0] >= [0] = ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) = [0] >= [0] = matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) = [0] >= [0] = ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) = [0] >= [0] = nil() 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 8.b:1.b:1.b:4: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_30) = {1}, uargs(c_31) = {1} Following symbols are considered usable: {appendreverse,appendreverse#1,bftMult'#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,reverse,#add# ,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1# ,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue# ,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1# ,reverse#} TcT has computed the following interpretation: p(#0) = [3] p(#add) = [2] p(#mult) = [3] x1 + [0] p(#natmult) = [0] p(#neg) = [2] p(#pos) = [0] p(#pred) = [4] x1 + [3] p(#s) = [0] p(#succ) = [0] p(*) = [3] x2 + [3] p(+) = [4] x1 + [0] p(::) = [1] x1 + [1] x2 + [1] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [2] x1 + [0] p(bftMult'#1) = [1] x2 + [1] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [1] x2 + [1] x3 + [1] p(bftMult'#4) = [4] x1 + [4] p(bftMult'#5) = [2] x2 + [4] p(computeLine) = [5] p(computeLine#1) = [4] x1 + [2] x3 + [0] p(computeLine#2) = [1] x1 + [1] x3 + [3] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [1] p(enqueue#1) = [1] x1 + [1] x2 + [1] p(leaf) = [2] p(lineMult) = [0] p(lineMult#1) = [3] x1 + [5] p(lineMult#2) = [1] x2 + [2] x3 + [0] p(matrixMult) = [0] p(matrixMult#1) = [4] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [3] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#add#) = [1] x1 + [4] x2 + [0] p(#mult#) = [1] p(#natmult#) = [4] x2 + [2] p(#pred#) = [1] x1 + [2] p(#succ#) = [1] x1 + [2] p(*#) = [4] x1 + [1] x2 + [0] p(+#) = [2] x1 + [0] p(appendreverse#) = [4] x1 + [4] x2 + [0] p(appendreverse#1#) = [1] x2 + [0] p(bftMult#) = [1] x1 + [1] p(bftMult'#) = [4] x1 + [2] p(bftMult'#1#) = [4] x1 + [0] p(bftMult'#2#) = [4] x1 + [2] p(bftMult'#3#) = [4] x1 + [4] x3 + [0] p(bftMult'#4#) = [4] x1 + [4] x3 + [0] p(bftMult'#5#) = [4] x1 + [4] x3 + [2] p(computeLine#) = [2] x2 + [2] p(computeLine#1#) = [2] x3 + [1] p(computeLine#2#) = [2] x1 + [0] p(dequeue#) = [1] p(dequeue#1#) = [2] x2 + [0] p(dequeue#2#) = [1] p(enqueue#) = [1] x2 + [1] p(enqueue#1#) = [1] x1 + [4] p(lineMult#) = [2] x2 + [1] p(lineMult#1#) = [2] x1 + [0] p(lineMult#2#) = [1] x3 + [2] x4 + [1] p(matrixMult#) = [4] x2 + [2] p(matrixMult#1#) = [4] x2 + [2] p(reverse#) = [1] x1 + [1] p(c_1) = [2] x1 + [1] p(c_2) = [1] x1 + [4] p(c_3) = [0] p(c_4) = [4] x1 + [1] p(c_5) = [2] p(c_6) = [4] p(c_7) = [1] x2 + [0] p(c_8) = [2] x1 + [0] p(c_9) = [4] x1 + [0] p(c_10) = [1] x1 + [1] p(c_11) = [1] p(c_12) = [1] p(c_13) = [0] p(c_14) = [2] x1 + [0] p(c_15) = [1] x1 + [0] p(c_16) = [2] p(c_17) = [0] p(c_18) = [1] x2 + [0] p(c_19) = [0] p(c_20) = [2] x1 + [1] p(c_21) = [1] p(c_22) = [4] x1 + [2] p(c_23) = [0] p(c_24) = [1] p(c_25) = [4] p(c_26) = [1] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [1] x1 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] p(c_33) = [1] x1 + [1] x2 + [0] p(c_34) = [0] p(c_35) = [4] x1 + [2] p(c_36) = [1] p(c_37) = [0] p(c_38) = [2] p(c_39) = [4] x1 + [0] p(c_40) = [2] x2 + [1] p(c_41) = [0] p(c_42) = [0] p(c_43) = [1] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [1] p(c_48) = [1] x1 + [1] p(c_49) = [4] p(c_50) = [0] p(c_51) = [2] x1 + [4] x2 + [0] p(c_52) = [1] p(c_53) = [2] p(c_54) = [0] p(c_55) = [1] p(c_56) = [0] p(c_57) = [0] p(c_58) = [4] p(c_59) = [1] Following rules are strictly oriented: lineMult#(@n,@l1,@l2) = [2] @l1 + [1] > [2] @l1 + [0] = c_27(lineMult#1#(@l1,@l2,@n)) Following rules are (at-least) weakly oriented: bftMult'#(@queue,@acc) = [4] @queue + [2] >= [4] @queue + [0] = bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) = [4] @elem + [4] @queue + [0] >= [4] @elem + [4] @queue + [0] = bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) = [4] @_@3 + [4] @queue + [4] @t + [4] >= [4] @queue + [4] @t + [0] = bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) = [4] @queue + [8] >= [4] @queue + [2] = bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [4] @queue + [4] @t1 + [4] @t2 + [4] @y + [12] >= [4] @queue + [4] @t1 + [4] @t2 + [4] @y + [10] = bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) = [4] @queue' + [4] @y + [2] >= [4] @queue' + [2] = bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) = [4] @queue' + [4] @y + [2] >= [4] @y + [2] = matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) = [2] @m + [2] >= [2] @m + [1] = computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) = [2] @m + [1] >= [2] @m + [0] = computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [2] @l + [2] @ls + [2] >= [2] @ls + [2] = computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [2] @l + [2] @ls + [2] >= [2] @l + [1] = lineMult#(@x,@l,@acc) lineMult#1#(::(@x,@xs),@l2,@n) = [2] @x + [2] @xs + [2] >= [1] @x + [2] @xs + [1] = c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) = [1] @x + [2] @xs + [1] >= [2] @xs + [1] = c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) = [1] @x + [2] @xs + [1] >= [2] @xs + [1] = c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) = [4] @m2 + [2] >= [4] @m2 + [2] = matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) = [4] @m2 + [2] >= [2] @m2 + [2] = computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) = [4] @m2 + [2] >= [4] @m2 + [2] = matrixMult#(@ls,@m2) appendreverse(@toreverse,@sofar) = [1] @sofar + [1] @toreverse + [0] >= [1] @sofar + [1] @toreverse + [0] = appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) = [1] @a + [1] @as + [1] @sofar + [1] >= [1] @a + [1] @as + [1] @sofar + [1] = appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) = [1] @sofar + [0] >= [1] @sofar + [0] = @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0] >= [1] @dequeue@1 + [1] @dequeue@2 + [0] = dequeue(@dequeue@1,@dequeue@2) dequeue(@outq,@inq) = [1] @inq + [1] @outq + [0] >= [1] @inq + [1] @outq + [0] = dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) = [1] @inq + [1] @t + [1] @ts + [1] >= [1] @inq + [1] @t + [1] @ts + [1] = tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) = [1] @inq + [0] >= [1] @inq + [0] = dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) = [1] @t + [1] @ts + [1] >= [1] @t + [1] @ts + [1] = tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) = [1] @queue + [1] @t + [1] >= [1] @queue + [1] @t + [1] = enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [1] >= [1] @inq + [1] @outq + [1] @t + [1] = tuple#2(@outq,::(@t,@inq)) reverse(@xs) = [1] @xs + [0] >= [1] @xs + [0] = appendreverse(@xs,nil()) **** Step 8.b:1.b:1.b:5: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). WORST_CASE(?,O(n^4))