* Step 1: Sum WORST_CASE(?,O(n^3))
+ 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:
Sum {left = someStrategy, right = someStrategy}
+ Details:
()
* Step 2: DependencyPairs WORST_CASE(?,O(n^3))
+ 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 3: UsableRules WORST_CASE(?,O(n^3))
+ 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:
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())
#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#(@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()))
* Step 4: PredecessorEstimation WORST_CASE(?,O(n^3))
+ 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'#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/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 5: PredecessorEstimation 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#(@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'#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/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 6: RemoveWeakSuffixes 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#(@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'#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/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 7: SimplifyRHS 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#(@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'#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/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 8: RemoveHeads 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#(@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 9: Decompose 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'#(@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:
Decompose {onSelection = all cycle independent sub-graph, withBound = RelativeAdd}
+ Details:
We analyse the complexity of following sub-problems (R) and (S).
Problem (S) is obtained from the input problem by shifting strict rules from (R) into the weak component.
Problem (R)
- Strict DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
- Weak 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'#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}
Problem (S)
- 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'#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 DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
- 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}
** Step 9.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
- Weak 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'#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:
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
2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
-->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1
4:W: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:W: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:W: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:W: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:W: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:W: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:W: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)):4
-->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20
11:W: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:W: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:W: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)):11
-->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16
14:W:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
-->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):15
15:W:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
-->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22
16:W: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:W: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:W: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:W: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:W: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:W:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11
-->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20
22:W:reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
-->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
20: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
21: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
11: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
13: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
12: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
16: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
19: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
17: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
18: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
** Step 9.a:2: SimplifyRHS WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
- Weak 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'#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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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:
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
4:W: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:W: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:W: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:W: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:W: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:W: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:W: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)):4
14:W:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
-->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):15
15:W:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
-->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22
22:W: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'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)))
** Step 9.a:3: DecomposeDG WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
- Weak 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'#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)))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
DecomposeDG {onSelection = all below first cut in WDG, onUpper = Just someStrategy, 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)))
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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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))
*** Step 9.a:3.a:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
- 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/2,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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
Consider the set of all dependency pairs
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
3: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
4: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
5: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
6: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)))
Processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{1}
These cover all (indirect) predecessors of dependency pairs
{1,2,3,4,5,6}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
**** Step 9.a:3.a:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
- 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/2,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:
NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation (containing no more than 1 non-zero interpretation-entries in the diagonal of the component-wise maxima):
The following argument positions are considered usable:
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:
{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]
[0]
p(#add) = [1 0] x1 + [0 0] x2 + [0]
[0 1] [1 0] [0]
p(#mult) = [0 0] x2 + [1]
[0 1] [1]
p(#natmult) = [0]
[0]
p(#neg) = [1 0] x1 + [0]
[0 0] [0]
p(#pos) = [1 0] x1 + [0]
[0 0] [1]
p(#pred) = [0 1] x1 + [1]
[1 0] [1]
p(#s) = [0 1] x1 + [1]
[0 0] [1]
p(#succ) = [0]
[0]
p(*) = [0 1] x1 + [0 0] x2 + [0]
[1 1] [0 1] [0]
p(+) = [1 1] x1 + [0]
[0 1] [0]
p(::) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 0] [0]
p(appendreverse) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(appendreverse#1) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(bftMult) = [0]
[0]
p(bftMult') = [0]
[0]
p(bftMult'#1) = [0]
[0]
p(bftMult'#2) = [1 0] x1 + [0]
[1 0] [0]
p(bftMult'#3) = [0]
[0]
p(bftMult'#4) = [0]
[0]
p(bftMult'#5) = [0]
[0]
p(computeLine) = [1 0] x2 + [0 1] x3 + [0]
[0 0] [0 1] [0]
p(computeLine#1) = [0]
[0]
p(computeLine#2) = [1]
[0]
p(dequeue) = [1 0] x1 + [1 1] x2 + [0]
[1 0] [0 1] [0]
p(dequeue#1) = [1 0] x1 + [1 1] x2 + [0]
[0 0] [0 0] [0]
p(dequeue#2) = [1 0] x1 + [0]
[0 0] [0]
p(enqueue) = [1 1] x1 + [1 1] x2 + [0]
[0 0] [0 0] [1]
p(enqueue#1) = [1 0] x1 + [1 1] x2 + [0]
[0 0] [0 0] [1]
p(leaf) = [0]
[1]
p(lineMult) = [0 0] x2 + [1 0] x3 + [1]
[0 1] [0 1] [0]
p(lineMult#1) = [0 0] x1 + [1]
[1 0] [0]
p(lineMult#2) = [0]
[1]
p(matrixMult) = [1]
[0]
p(matrixMult#1) = [0]
[0]
p(nil) = [0]
[0]
p(node) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 0] [0 0] [0 0] [1]
p(reverse) = [1 1] x1 + [0]
[0 1] [0]
p(tuple#2) = [1 0] x1 + [1 1] x2 + [0]
[0 0] [0 0] [0]
p(#add#) = [0]
[0]
p(#mult#) = [0]
[0]
p(#natmult#) = [0]
[0]
p(#pred#) = [0]
[0]
p(#succ#) = [0]
[0]
p(*#) = [0]
[0]
p(+#) = [0]
[0]
p(appendreverse#) = [0]
[0]
p(appendreverse#1#) = [0]
[0]
p(bftMult#) = [0]
[0]
p(bftMult'#) = [1 0] x1 + [1]
[1 1] [0]
p(bftMult'#1#) = [1 0] x1 + [0]
[1 0] [0]
p(bftMult'#2#) = [0 0] x1 + [0]
[0 1] [0]
p(bftMult'#3#) = [1 0] x1 + [1 1] x3 + [0]
[1 0] [1 1] [0]
p(bftMult'#4#) = [1 1] x1 + [1 1] x3 + [0]
[1 0] [1 1] [0]
p(bftMult'#5#) = [1 0] x1 + [1 0] x3 + [1]
[1 0] [0 0] [0]
p(computeLine#) = [0]
[0]
p(computeLine#1#) = [0]
[0]
p(computeLine#2#) = [0]
[0]
p(dequeue#) = [0]
[0]
p(dequeue#1#) = [0]
[0]
p(dequeue#2#) = [0]
[0]
p(enqueue#) = [0]
[0]
p(enqueue#1#) = [0]
[0]
p(lineMult#) = [0]
[0]
p(lineMult#1#) = [0]
[0]
p(lineMult#2#) = [0]
[0]
p(matrixMult#) = [0]
[0]
p(matrixMult#1#) = [0]
[0]
p(reverse#) = [0]
[0]
p(c_1) = [0]
[0]
p(c_2) = [0]
[0]
p(c_3) = [0]
[0]
p(c_4) = [0]
[0]
p(c_5) = [0]
[0]
p(c_6) = [0]
[0]
p(c_7) = [1 0] x1 + [0 0] x2 + [0]
[0 0] [0 1] [0]
p(c_8) = [1 0] x1 + [0]
[0 1] [0]
p(c_9) = [0]
[0]
p(c_10) = [1 0] x1 + [0]
[0 1] [0]
p(c_11) = [0]
[0]
p(c_12) = [1 0] x1 + [0]
[0 0] [0]
p(c_13) = [1 0] x1 + [0]
[0 1] [0]
p(c_14) = [1 0] x1 + [0]
[0 0] [0]
p(c_15) = [0]
[0]
p(c_16) = [0]
[0]
p(c_17) = [0]
[0]
p(c_18) = [0]
[0]
p(c_19) = [0]
[0]
p(c_20) = [0]
[0]
p(c_21) = [0]
[0]
p(c_22) = [0]
[0]
p(c_23) = [0]
[0]
p(c_24) = [0]
[0]
p(c_25) = [0]
[0]
p(c_26) = [0]
[0]
p(c_27) = [0]
[0]
p(c_28) = [0]
[0]
p(c_29) = [0]
[0]
p(c_30) = [0]
[0]
p(c_31) = [0]
[0]
p(c_32) = [0]
[0]
p(c_33) = [0]
[0]
p(c_34) = [0]
[0]
p(c_35) = [0]
[0]
p(c_36) = [0]
[0]
p(c_37) = [0]
[0]
p(c_38) = [0]
[0]
p(c_39) = [0]
[0]
p(c_40) = [0]
[0]
p(c_41) = [0]
[0]
p(c_42) = [0]
[0]
p(c_43) = [0]
[0]
p(c_44) = [0]
[0]
p(c_45) = [0]
[0]
p(c_46) = [0]
[0]
p(c_47) = [0]
[0]
p(c_48) = [0]
[0]
p(c_49) = [0]
[0]
p(c_50) = [0]
[0]
p(c_51) = [0]
[0]
p(c_52) = [0]
[0]
p(c_53) = [0]
[0]
p(c_54) = [0]
[0]
p(c_55) = [0]
[0]
p(c_56) = [0]
[0]
p(c_57) = [0]
[0]
p(c_58) = [0]
[0]
p(c_59) = [0]
[0]
Following rules are strictly oriented:
bftMult'#(@queue,@acc) = [1 0] @queue + [1]
[1 1] [0]
> [1 0] @queue + [0]
[0 1] [0]
= c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
Following rules are (at-least) weakly oriented:
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1 0] @elem + [1 1] @queue + [0]
[1 0] [1 1] [0]
>= [1 0] @elem + [1 1] @queue + [0]
[1 0] [1 1] [0]
= c_8(bftMult'#3#(@elem,@acc,@queue))
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1 0] @_@3 + [1 1] @queue + [1 1] @t + [0]
[1 0] [1 1] [1 1] [0]
>= [1 1] @queue + [1 1] @t + [0]
[1 1] [1 0] [0]
= c_10(bftMult'#4#(@t,@acc,@queue))
bftMult'#4#(leaf(),@acc,@queue) = [1 1] @queue + [1]
[1 1] [0]
>= [1 0] @queue + [1]
[0 0] [0]
= c_12(bftMult'#(@queue,@acc))
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1 1] @queue + [1 1] @t1 + [1 1] @t2 + [1 0] @y + [2]
[1 1] [1 1] [1 1] [1 0] [1]
>= [1 1] @queue + [1 1] @t1 + [1 1] @t2 + [1 0] @y + [2]
[1 1] [1 1] [1 1] [0 0] [1]
= c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [1 0] @queue' + [1 0] @y + [1]
[1 0] [0 0] [0]
>= [1 0] @queue' + [1]
[0 0] [0]
= c_14(bftMult'#(@queue',matrixMult(@acc,@y)))
appendreverse(@toreverse,@sofar) = [1 0] @sofar + [1 0] @toreverse + [0]
[0 1] [0 0] [0]
>= [1 0] @sofar + [1 0] @toreverse + [0]
[0 1] [0 0] [0]
= appendreverse#1(@toreverse,@sofar)
appendreverse#1(::(@a,@as),@sofar) = [1 1] @a + [1 0] @as + [1 0] @sofar + [0]
[0 0] [0 0] [0 1] [0]
>= [1 1] @a + [1 0] @as + [1 0] @sofar + [0]
[0 0] [0 0] [0 0] [0]
= appendreverse(@as,::(@a,@sofar))
appendreverse#1(nil(),@sofar) = [1 0] @sofar + [0]
[0 1] [0]
>= [1 0] @sofar + [0]
[0 1] [0]
= @sofar
bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1 0] @dequeue@1 + [1 1] @dequeue@2 + [0]
[1 0] [1 1] [0]
>= [1 0] @dequeue@1 + [1 1] @dequeue@2 + [0]
[1 0] [0 1] [0]
= dequeue(@dequeue@1,@dequeue@2)
dequeue(@outq,@inq) = [1 1] @inq + [1 0] @outq + [0]
[0 1] [1 0] [0]
>= [1 1] @inq + [1 0] @outq + [0]
[0 0] [0 0] [0]
= dequeue#1(@outq,@inq)
dequeue#1(::(@t,@ts),@inq) = [1 1] @inq + [1 1] @t + [1 0] @ts + [0]
[0 0] [0 0] [0 0] [0]
>= [1 1] @inq + [1 1] @t + [1 0] @ts + [0]
[0 0] [0 0] [0 0] [0]
= tuple#2(::(@t,nil()),tuple#2(@ts,@inq))
dequeue#1(nil(),@inq) = [1 1] @inq + [0]
[0 0] [0]
>= [1 1] @inq + [0]
[0 0] [0]
= dequeue#2(reverse(@inq))
dequeue#2(::(@t,@ts)) = [1 1] @t + [1 0] @ts + [0]
[0 0] [0 0] [0]
>= [1 1] @t + [1 0] @ts + [0]
[0 0] [0 0] [0]
= tuple#2(::(@t,nil()),tuple#2(@ts,nil()))
dequeue#2(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),tuple#2(nil(),nil()))
enqueue(@t,@queue) = [1 1] @queue + [1 1] @t + [0]
[0 0] [0 0] [1]
>= [1 0] @queue + [1 1] @t + [0]
[0 0] [0 0] [1]
= enqueue#1(@queue,@t)
enqueue#1(tuple#2(@outq,@inq),@t) = [1 1] @inq + [1 0] @outq + [1 1] @t + [0]
[0 0] [0 0] [0 0] [1]
>= [1 0] @inq + [1 0] @outq + [1 1] @t + [0]
[0 0] [0 0] [0 0] [0]
= tuple#2(@outq,::(@t,@inq))
reverse(@xs) = [1 1] @xs + [0]
[0 1] [0]
>= [1 0] @xs + [0]
[0 0] [0]
= appendreverse(@xs,nil())
**** Step 9.a:3.a:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak 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)))
- 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/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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
**** Step 9.a:3.a:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak 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)))
- 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/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:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W: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:W: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:W: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:W: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:W: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))):6
6:W:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)))
-->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
6: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)))
5: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
3: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
4: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
**** Step 9.a:3.a:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- 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/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 9.a:3.b:1: PredecessorEstimationCP 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)))
- 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'#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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
2: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
The strictly oriented rules are moved into the weak component.
**** Step 9.a:3.b:1.a:1: NaturalMI 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)))
- 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'#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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and 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_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) = [2] x1 + [0]
p(#mult) = [2] x1 + [1] x2 + [6]
p(#natmult) = [1]
p(#neg) = [0]
p(#pos) = [2]
p(#pred) = [0]
p(#s) = [2]
p(#succ) = [5]
p(*) = [2] x1 + [1] x2 + [1]
p(+) = [4] 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) = [1] x2 + [0]
p(bftMult') = [0]
p(bftMult'#1) = [0]
p(bftMult'#2) = [1] x1 + [0]
p(bftMult'#3) = [0]
p(bftMult'#4) = [1] x1 + [0]
p(bftMult'#5) = [0]
p(computeLine) = [4] x3 + [2]
p(computeLine#1) = [5] x1 + [0]
p(computeLine#2) = [7] x1 + [7]
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) = [3] x1 + [0]
p(lineMult#1) = [1] x1 + [1]
p(lineMult#2) = [6] x1 + [0]
p(matrixMult) = [0]
p(matrixMult#1) = [6] x1 + [1] x2 + [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(*#) = [0]
p(+#) = [0]
p(appendreverse#) = [1] x1 + [0]
p(appendreverse#1#) = [1] x1 + [0]
p(bftMult#) = [0]
p(bftMult'#) = [1] x1 + [3]
p(bftMult'#1#) = [1] x1 + [3]
p(bftMult'#2#) = [1] x1 + [0]
p(bftMult'#3#) = [1] x1 + [1] x3 + [3]
p(bftMult'#4#) = [1] x1 + [1] x3 + [4]
p(bftMult'#5#) = [1] x1 + [3]
p(computeLine#) = [0]
p(computeLine#1#) = [1] x3 + [0]
p(computeLine#2#) = [0]
p(dequeue#) = [1] x2 + [0]
p(dequeue#1#) = [1] x2 + [0]
p(dequeue#2#) = [0]
p(enqueue#) = [1] x1 + [2] x2 + [0]
p(enqueue#1#) = [0]
p(lineMult#) = [1] x3 + [1]
p(lineMult#1#) = [1] x3 + [0]
p(lineMult#2#) = [2] x3 + [0]
p(matrixMult#) = [4] x1 + [1]
p(matrixMult#1#) = [1] x2 + [1]
p(reverse#) = [1] x1 + [0]
p(c_1) = [0]
p(c_2) = [2] x1 + [1]
p(c_3) = [1] x1 + [0]
p(c_4) = [1] x1 + [0]
p(c_5) = [0]
p(c_6) = [1] x1 + [4]
p(c_7) = [1] x1 + [1] x2 + [0]
p(c_8) = [1]
p(c_9) = [1] x1 + [0]
p(c_10) = [1] x1 + [0]
p(c_11) = [1]
p(c_12) = [1] x1 + [1]
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) = [0]
p(c_18) = [1] x1 + [1] x2 + [2]
p(c_19) = [0]
p(c_20) = [1] x1 + [0]
p(c_21) = [1]
p(c_22) = [1] x1 + [0]
p(c_23) = [4]
p(c_24) = [1]
p(c_25) = [1] x1 + [0]
p(c_26) = [1]
p(c_27) = [0]
p(c_28) = [4] x1 + [0]
p(c_29) = [0]
p(c_30) = [1]
p(c_31) = [0]
p(c_32) = [0]
p(c_33) = [1] x2 + [4]
p(c_34) = [0]
p(c_35) = [1] x1 + [0]
p(c_36) = [0]
p(c_37) = [1]
p(c_38) = [1] x2 + [1]
p(c_39) = [1] x1 + [2]
p(c_40) = [1] x1 + [2] x2 + [0]
p(c_41) = [1]
p(c_42) = [4]
p(c_43) = [4]
p(c_44) = [0]
p(c_45) = [0]
p(c_46) = [0]
p(c_47) = [1]
p(c_48) = [0]
p(c_49) = [4] x1 + [0]
p(c_50) = [1]
p(c_51) = [2] x1 + [4]
p(c_52) = [0]
p(c_53) = [0]
p(c_54) = [1]
p(c_55) = [1]
p(c_56) = [0]
p(c_57) = [1]
p(c_58) = [0]
p(c_59) = [0]
Following rules are strictly oriented:
appendreverse#1#(::(@a,@as),@sofar) = [1] @a + [1] @as + [1]
> [1] @as + [0]
= c_4(appendreverse#(@as,::(@a,@sofar)))
Following rules are (at-least) weakly oriented:
appendreverse#(@toreverse,@sofar) = [1] @toreverse + [0]
>= [1] @toreverse + [0]
= c_3(appendreverse#1#(@toreverse,@sofar))
bftMult'#(@queue,@acc) = [1] @queue + [3]
>= [1] @queue + [3]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#(@queue,@acc) = [1] @queue + [3]
>= [1] @queue + [0]
= bftMult'#2#(@queue)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @elem + [1] @queue + [3]
>= [1] @elem + [1] @queue + [3]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [0]
>= [1] @dequeue@2 + [0]
= c_9(dequeue#(@dequeue@1,@dequeue@2))
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @queue + [1] @t + [4]
>= [1] @queue + [1] @t + [4]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [1] @queue + [4]
>= [1] @queue + [3]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @queue + [1] @t1 + [1] @t2 + [9]
>= [1] @queue + [1] @t1 + [1] @t2 + [5]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [3]
>= [1] @queue' + [3]
= bftMult'#(@queue',matrixMult(@acc,@y))
dequeue#(@outq,@inq) = [1] @inq + [0]
>= [1] @inq + [0]
= c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) = [1] @inq + [0]
>= [1] @inq + [0]
= c_22(reverse#(@inq))
reverse#(@xs) = [1] @xs + [0]
>= [1] @xs + [0]
= 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 9.a:3.b:1.a:2: Assumption WORST_CASE(?,O(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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
**** Step 9.a:3.b:1.b:1: PredecessorEstimationCP 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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
Consider the set of all dependency pairs
1: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
2: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
3: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
4: bftMult'#(@queue,@acc) -> bftMult'#2#(@queue)
5: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> 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) -> bftMult'#4#(@t,@acc,@queue)
8: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
9: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
10: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
11: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
12: dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
13: reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
Processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{1}
These cover all (indirect) predecessors of dependency pairs
{1,2}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
***** Step 9.a:3.b:1.b:1.a:1: 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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and 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_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) = [4]
p(#add) = [5]
p(#mult) = [1] x1 + [3]
p(#natmult) = [2] x1 + [1]
p(#neg) = [2]
p(#pos) = [5]
p(#pred) = [2] x1 + [4]
p(#s) = [4]
p(#succ) = [4]
p(*) = [1] x1 + [0]
p(+) = [4] x1 + [4]
p(::) = [1] x1 + [1] x2 + [4]
p(appendreverse) = [1] x1 + [1] x2 + [0]
p(appendreverse#1) = [1] x1 + [1] x2 + [0]
p(bftMult) = [4] x1 + [1]
p(bftMult') = [0]
p(bftMult'#1) = [0]
p(bftMult'#2) = [1] x1 + [0]
p(bftMult'#3) = [1] x1 + [4] x2 + [1]
p(bftMult'#4) = [1] x1 + [4] x2 + [0]
p(bftMult'#5) = [1] x3 + [1]
p(computeLine) = [1] x2 + [0]
p(computeLine#1) = [1] x3 + [2]
p(computeLine#2) = [3] x1 + [4] x3 + [2]
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 + [5]
p(enqueue#1) = [1] x1 + [1] x2 + [4]
p(leaf) = [0]
p(lineMult) = [2] x1 + [5] x2 + [0]
p(lineMult#1) = [4] x3 + [4]
p(lineMult#2) = [1] x1 + [1] x3 + [4]
p(matrixMult) = [4] x1 + [2] x2 + [2]
p(matrixMult#1) = [2] x1 + [1] x2 + [2]
p(nil) = [0]
p(node) = [1] x2 + [1] x3 + [7]
p(reverse) = [1] x1 + [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#add#) = [1] x1 + [2] x2 + [2]
p(#mult#) = [1] x2 + [4]
p(#natmult#) = [1] x2 + [1]
p(#pred#) = [4]
p(#succ#) = [1] x1 + [0]
p(*#) = [1] x1 + [2]
p(+#) = [1] x1 + [1] x2 + [1]
p(appendreverse#) = [1] x1 + [1]
p(appendreverse#1#) = [1] x1 + [0]
p(bftMult#) = [1] x1 + [2] x2 + [2]
p(bftMult'#) = [1] x1 + [4]
p(bftMult'#1#) = [1] x1 + [4]
p(bftMult'#2#) = [1] x1 + [4]
p(bftMult'#3#) = [1] x1 + [1] x3 + [3]
p(bftMult'#4#) = [1] x1 + [1] x3 + [7]
p(bftMult'#5#) = [1] x1 + [4]
p(computeLine#) = [1]
p(computeLine#1#) = [1] x3 + [0]
p(computeLine#2#) = [4] x4 + [0]
p(dequeue#) = [1] x2 + [4]
p(dequeue#1#) = [1] x2 + [1]
p(dequeue#2#) = [0]
p(enqueue#) = [0]
p(enqueue#1#) = [1] x1 + [1] x2 + [2]
p(lineMult#) = [1] x1 + [4] x2 + [1] x3 + [2]
p(lineMult#1#) = [4]
p(lineMult#2#) = [2] x3 + [0]
p(matrixMult#) = [0]
p(matrixMult#1#) = [1] x2 + [0]
p(reverse#) = [1] x1 + [1]
p(c_1) = [1]
p(c_2) = [1]
p(c_3) = [1] x1 + [0]
p(c_4) = [1] x1 + [3]
p(c_5) = [2]
p(c_6) = [0]
p(c_7) = [1] x1 + [4] x2 + [2]
p(c_8) = [1]
p(c_9) = [1] x1 + [0]
p(c_10) = [1]
p(c_11) = [4]
p(c_12) = [1] x1 + [4]
p(c_13) = [1]
p(c_14) = [4] x1 + [2]
p(c_15) = [1] x1 + [0]
p(c_16) = [1]
p(c_17) = [0]
p(c_18) = [1] x2 + [0]
p(c_19) = [0]
p(c_20) = [1] x1 + [0]
p(c_21) = [4]
p(c_22) = [1] x1 + [0]
p(c_23) = [1]
p(c_24) = [0]
p(c_25) = [1] x1 + [2]
p(c_26) = [1]
p(c_27) = [2]
p(c_28) = [0]
p(c_29) = [1]
p(c_30) = [4] x1 + [2]
p(c_31) = [4] x1 + [1]
p(c_32) = [4]
p(c_33) = [1] x2 + [0]
p(c_34) = [4]
p(c_35) = [1] x1 + [0]
p(c_36) = [0]
p(c_37) = [2] x1 + [0]
p(c_38) = [2] x1 + [1]
p(c_39) = [1]
p(c_40) = [1] x2 + [1]
p(c_41) = [1]
p(c_42) = [1]
p(c_43) = [0]
p(c_44) = [1]
p(c_45) = [2]
p(c_46) = [4] x1 + [4]
p(c_47) = [0]
p(c_48) = [1] x1 + [0]
p(c_49) = [1] x1 + [2]
p(c_50) = [0]
p(c_51) = [1] x2 + [0]
p(c_52) = [1]
p(c_53) = [2]
p(c_54) = [0]
p(c_55) = [0]
p(c_56) = [2]
p(c_57) = [0]
p(c_58) = [1]
p(c_59) = [0]
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 + [4]
>= [1] @as + [4]
= c_4(appendreverse#(@as,::(@a,@sofar)))
bftMult'#(@queue,@acc) = [1] @queue + [4]
>= [1] @queue + [4]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#(@queue,@acc) = [1] @queue + [4]
>= [1] @queue + [4]
= bftMult'#2#(@queue)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1] @elem + [1] @queue + [4]
>= [1] @elem + [1] @queue + [3]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) = [1] @dequeue@1 + [1] @dequeue@2 + [4]
>= [1] @dequeue@2 + [4]
= c_9(dequeue#(@dequeue@1,@dequeue@2))
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1] @_@3 + [1] @queue + [1] @t + [7]
>= [1] @queue + [1] @t + [7]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [1] @queue + [7]
>= [1] @queue + [4]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1] @queue + [1] @t1 + [1] @t2 + [14]
>= [1] @queue + [1] @t1 + [1] @t2 + [14]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [1] @queue' + [4]
>= [1] @queue' + [4]
= bftMult'#(@queue',matrixMult(@acc,@y))
dequeue#(@outq,@inq) = [1] @inq + [4]
>= [1] @inq + [1]
= c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) = [1] @inq + [1]
>= [1] @inq + [1]
= c_22(reverse#(@inq))
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 + [4]
>= [1] @a + [1] @as + [1] @sofar + [4]
= 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 + [4]
>= [1] @inq + [1] @t + [1] @ts + [4]
= 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 + [4]
>= [1] @t + [1] @ts + [4]
= 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 + [5]
>= [1] @queue + [1] @t + [4]
= enqueue#1(@queue,@t)
enqueue#1(tuple#2(@outq,@inq),@t) = [1] @inq + [1] @outq + [1] @t + [4]
>= [1] @inq + [1] @outq + [1] @t + [4]
= tuple#2(@outq,::(@t,@inq))
reverse(@xs) = [1] @xs + [0]
>= [1] @xs + [0]
= appendreverse(@xs,nil())
***** Step 9.a:3.b:1.b:1.a:2: Assumption 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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
***** Step 9.a:3.b:1.b:1.b:1: RemoveWeakSuffixes 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))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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/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:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
-->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2
2:W:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
-->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1
3:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
-->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):5
4:W:bftMult'#(@queue,@acc) -> bftMult'#2#(@queue)
-->_1 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):6
5: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):7
6:W: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)):11
7: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):9
-->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):8
8:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
-->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):4
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):3
9:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
-->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):10
10:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
-->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):4
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):3
11:W:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
-->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):12
12:W:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
-->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):13
13:W:reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
-->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
3: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
10: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
9: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
7: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue)
5: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue)
8: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
4: bftMult'#(@queue,@acc) -> bftMult'#2#(@queue)
6: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2))
11: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
12: dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
13: reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
1: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
2: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
***** Step 9.a:3.b:1.b:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- 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/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 9.b:1: PredecessorEstimation WORST_CASE(?,O(n^3))
+ 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'#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 DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
- 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:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{19}
by application of
Pre({19}) = {12}.
Here rules are labelled as follows:
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
3: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2))
4: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
5: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
6: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
7: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y))
8: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
9: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
10: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
11: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
12: dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
13: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
14: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
15: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
16: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
17: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
18: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
19: reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
20: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
21: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
** Step 9.b:2: PredecessorEstimation WORST_CASE(?,O(n^3))
+ 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'#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))
- Weak DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
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:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{12}
by application of
Pre({12}) = {11}.
Here rules are labelled as follows:
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
3: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2))
4: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
5: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
6: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
7: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y))
8: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
9: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
10: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
11: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
12: dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
13: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
14: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
15: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
16: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
17: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
18: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
19: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
20: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
21: reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
** Step 9.b:3: PredecessorEstimation WORST_CASE(?,O(n^3))
+ 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'#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))
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))
- Weak DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{11}
by application of
Pre({11}) = {3}.
Here rules are labelled as follows:
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
3: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2))
4: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
5: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
6: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
7: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y))
8: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
9: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
10: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
11: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
12: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
13: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
14: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
15: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
16: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
17: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
18: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
19: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
20: dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
21: reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
** Step 9.b:4: PredecessorEstimation WORST_CASE(?,O(n^3))
+ 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'#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))
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))
- Weak DPs:
appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
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:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{3}
by application of
Pre({3}) = {1}.
Here rules are labelled as follows:
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
3: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2))
4: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
5: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
6: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
7: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y))
8: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
9: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
10: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
11: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
12: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
13: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
14: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
15: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
16: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
17: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
18: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
19: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
20: dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
21: reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
** Step 9.b:5: RemoveWeakSuffixes WORST_CASE(?,O(n^3))
+ 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))
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()))
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
- Weak 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))
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:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1: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)):18
-->_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))
-->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):14
-->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):1
7: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)):8
8: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)):9
9: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)):10
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):7
10: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)):11
11: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())):13
-->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)):12
12: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)):10
13: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)):10
14: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)):15
15: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)):14
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):7
16:W:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
-->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):17
17:W:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
-->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):16
18:W: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)):19
19:W:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
-->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):20
20:W:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
-->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):21
21:W:reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
-->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):16
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
18: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2))
19: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq))
20: dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq))
21: reverse#(@xs) -> c_35(appendreverse#(@xs,nil()))
16: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar))
17: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar)))
** Step 9.b:6: SimplifyRHS WORST_CASE(?,O(n^3))
+ 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))
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()))
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),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: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))
-->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):14
-->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):1
7: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)):8
8: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)):9
9: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)):10
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):7
10: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)):11
11: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())):13
-->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)):12
12: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)):10
13: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)):10
14: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)):15
15: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)):14
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):7
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))
** Step 9.b:7: DecomposeDG WORST_CASE(?,O(n^3))
+ 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)),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))
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))
- 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/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 = Just someStrategy, 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'#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
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()))
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
Further, following extension rules are added to the lower component.
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)
*** Step 9.b:7.a:1: PredecessorEstimationCP 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)),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/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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
4: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
5: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
Consider the set of all dependency pairs
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
3: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
4: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
5: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
6: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y))
Processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{4,5}
These cover all (indirect) predecessors of dependency pairs
{1,2,3,4,5,6}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
**** Step 9.b:7.a:1.a:1: NaturalMI 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)),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/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 first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation:
The following argument positions are considered usable:
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:
{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) = [0]
p(#add) = [1] x2 + [3]
p(#mult) = [5] x2 + [1]
p(#natmult) = [4] x1 + [0]
p(#neg) = [1] x1 + [1]
p(#pos) = [1] x1 + [2]
p(#pred) = [0]
p(#s) = [3]
p(#succ) = [2] x1 + [4]
p(*) = [1] x2 + [0]
p(+) = [2] x1 + [4]
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] x1 + [4] x2 + [2]
p(bftMult'#1) = [1] x2 + [1]
p(bftMult'#2) = [1] x1 + [0]
p(bftMult'#3) = [2]
p(bftMult'#4) = [4] x1 + [1] x2 + [1]
p(bftMult'#5) = [2]
p(computeLine) = [2] x1 + [4] x2 + [6]
p(computeLine#1) = [3] x1 + [0]
p(computeLine#2) = [1] x2 + [4]
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 + [0]
p(leaf) = [4]
p(lineMult) = [6] x1 + [0]
p(lineMult#1) = [2] x1 + [1] x2 + [4]
p(lineMult#2) = [1] x3 + [2]
p(matrixMult) = [2]
p(matrixMult#1) = [0]
p(nil) = [0]
p(node) = [1] x2 + [1] x3 + [6]
p(reverse) = [1] x1 + [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#add#) = [1] x2 + [1]
p(#mult#) = [1] x1 + [4] x2 + [1]
p(#natmult#) = [0]
p(#pred#) = [1] x1 + [1]
p(#succ#) = [4] x1 + [0]
p(*#) = [4] x2 + [0]
p(+#) = [1] x1 + [1]
p(appendreverse#) = [2] x2 + [2]
p(appendreverse#1#) = [4] x1 + [1] x2 + [0]
p(bftMult#) = [1] x1 + [0]
p(bftMult'#) = [2] x1 + [0]
p(bftMult'#1#) = [2] x1 + [0]
p(bftMult'#2#) = [0]
p(bftMult'#3#) = [2] x1 + [2] x3 + [0]
p(bftMult'#4#) = [2] x1 + [2] x3 + [0]
p(bftMult'#5#) = [2] x1 + [0]
p(computeLine#) = [4] x1 + [0]
p(computeLine#1#) = [1] x2 + [1] x3 + [0]
p(computeLine#2#) = [1] x2 + [4] x3 + [2] x4 + [1]
p(dequeue#) = [0]
p(dequeue#1#) = [1] x1 + [4]
p(dequeue#2#) = [1]
p(enqueue#) = [0]
p(enqueue#1#) = [2] x1 + [1] x2 + [0]
p(lineMult#) = [4] x3 + [1]
p(lineMult#1#) = [2] x2 + [1] x3 + [0]
p(lineMult#2#) = [2] x1 + [1]
p(matrixMult#) = [4] x1 + [2]
p(matrixMult#1#) = [2] x2 + [1]
p(reverse#) = [1]
p(c_1) = [2] x1 + [1]
p(c_2) = [4] x1 + [1]
p(c_3) = [4]
p(c_4) = [0]
p(c_5) = [1]
p(c_6) = [1]
p(c_7) = [1] x1 + [0]
p(c_8) = [1] x1 + [0]
p(c_9) = [0]
p(c_10) = [1] x1 + [0]
p(c_11) = [0]
p(c_12) = [1] x1 + [4]
p(c_13) = [1] x1 + [7]
p(c_14) = [1] x1 + [0]
p(c_15) = [2]
p(c_16) = [4] x1 + [4]
p(c_17) = [2]
p(c_18) = [2]
p(c_19) = [1]
p(c_20) = [1] x1 + [1]
p(c_21) = [1]
p(c_22) = [0]
p(c_23) = [4]
p(c_24) = [1]
p(c_25) = [1] x1 + [4]
p(c_26) = [0]
p(c_27) = [1] x1 + [0]
p(c_28) = [4] x1 + [0]
p(c_29) = [1]
p(c_30) = [0]
p(c_31) = [1] x1 + [4]
p(c_32) = [1] x1 + [1]
p(c_33) = [1] x1 + [1]
p(c_34) = [0]
p(c_35) = [1] x1 + [4]
p(c_36) = [2]
p(c_37) = [0]
p(c_38) = [4] x1 + [1] x2 + [2]
p(c_39) = [2] x1 + [1]
p(c_40) = [2] x1 + [0]
p(c_41) = [4]
p(c_42) = [1]
p(c_43) = [0]
p(c_44) = [2]
p(c_45) = [1]
p(c_46) = [2]
p(c_47) = [1]
p(c_48) = [1]
p(c_49) = [1] x1 + [4]
p(c_50) = [2]
p(c_51) = [1] x2 + [0]
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) = [4]
p(c_59) = [1]
Following rules are strictly oriented:
bftMult'#4#(leaf(),@acc,@queue) = [2] @queue + [8]
> [2] @queue + [4]
= c_12(bftMult'#(@queue,@acc))
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [2] @queue + [2] @t1 + [2] @t2 + [12]
> [2] @queue + [2] @t1 + [2] @t2 + [11]
= c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [2] @queue + [0]
>= [2] @queue + [0]
= c_7(bftMult'#1#(bftMult'#2(@queue),@acc))
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [2] @elem + [2] @queue + [0]
>= [2] @elem + [2] @queue + [0]
= c_8(bftMult'#3#(@elem,@acc,@queue))
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [2] @_@3 + [2] @queue + [2] @t + [0]
>= [2] @queue + [2] @t + [0]
= c_10(bftMult'#4#(@t,@acc,@queue))
bftMult'#5#(@queue',@acc,@y) = [2] @queue' + [0]
>= [2] @queue' + [0]
= c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@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)
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 + [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))
reverse(@xs) = [1] @xs + [0]
>= [1] @xs + [0]
= appendreverse(@xs,nil())
**** Step 9.b:7.a:1.a:2: Assumption WORST_CASE(?,O(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'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y))
- Weak DPs:
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/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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
**** Step 9.b:7.a:1.b:1: RemoveWeakSuffixes 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)),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/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:W:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc))
-->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):2
2:W: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:W: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:W:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
-->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)):1
5:W: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:W: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)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc))
6: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y))
5: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y))
3: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue))
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue))
4: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc))
**** Step 9.b:7.a:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- 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/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).
*** Step 9.b:7.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()))
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
- 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)
- 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/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 = Just someStrategy, onLower = Nothing}
+ Details:
We decompose the input problem according to the dependency graph into the upper component
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) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
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.
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)
**** Step 9.b:7.b:1.a:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
- 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)
- 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/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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
2: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
The strictly oriented rules are moved into the weak component.
***** Step 9.b:7.b:1.a:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
- 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)
- 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/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 first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation:
The following argument positions are considered usable:
uargs(c_32) = {1},
uargs(c_33) = {2}
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) = [0]
p(#add) = [0]
p(#mult) = [0]
p(#natmult) = [0]
p(#neg) = [1]
p(#pos) = [5]
p(#pred) = [2] x1 + [0]
p(#s) = [1] x1 + [0]
p(#succ) = [3]
p(*) = [6] x2 + [0]
p(+) = [1] x1 + [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) = [2] x3 + [7]
p(computeLine#1) = [3]
p(computeLine#2) = [0]
p(dequeue) = [0]
p(dequeue#1) = [0]
p(dequeue#2) = [0]
p(enqueue) = [1] x1 + [2] x2 + [2]
p(enqueue#1) = [0]
p(leaf) = [0]
p(lineMult) = [1] x1 + [7] x2 + [4]
p(lineMult#1) = [0]
p(lineMult#2) = [0]
p(matrixMult) = [1] x1 + [0]
p(matrixMult#1) = [1] x1 + [0]
p(nil) = [4]
p(node) = [1] x1 + [1] x2 + [1] x3 + [0]
p(reverse) = [0]
p(tuple#2) = [1]
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 + [0]
p(bftMult'#1#) = [4] x2 + [0]
p(bftMult'#2#) = [0]
p(bftMult'#3#) = [4] x2 + [0]
p(bftMult'#4#) = [4] x2 + [0]
p(bftMult'#5#) = [4] x2 + [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#) = [0]
p(lineMult#1#) = [0]
p(lineMult#2#) = [0]
p(matrixMult#) = [2] x1 + [0]
p(matrixMult#1#) = [2] x1 + [0]
p(reverse#) = [0]
p(c_1) = [0]
p(c_2) = [0]
p(c_3) = [0]
p(c_4) = [0]
p(c_5) = [0]
p(c_6) = [0]
p(c_7) = [0]
p(c_8) = [0]
p(c_9) = [0]
p(c_10) = [0]
p(c_11) = [0]
p(c_12) = [0]
p(c_13) = [0]
p(c_14) = [0]
p(c_15) = [0]
p(c_16) = [0]
p(c_17) = [0]
p(c_18) = [0]
p(c_19) = [0]
p(c_20) = [0]
p(c_21) = [0]
p(c_22) = [0]
p(c_23) = [0]
p(c_24) = [0]
p(c_25) = [0]
p(c_26) = [0]
p(c_27) = [0]
p(c_28) = [0]
p(c_29) = [0]
p(c_30) = [0]
p(c_31) = [0]
p(c_32) = [1] x1 + [0]
p(c_33) = [1] x1 + [1] x2 + [7]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [0]
p(c_38) = [1] x2 + [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) = [1] x1 + [0]
p(c_46) = [0]
p(c_47) = [0]
p(c_48) = [1] x1 + [0]
p(c_49) = [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) = [2]
p(c_56) = [0]
p(c_57) = [0]
p(c_58) = [2]
p(c_59) = [1]
Following rules are strictly oriented:
matrixMult#1#(::(@l,@ls),@m2) = [2] @ls + [8]
> [2] @ls + [7]
= c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [4] @acc + [0]
>= [4] @acc + [0]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [4] @acc + [0]
>= [4] @acc + [0]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [4] @acc + [0]
>= [4] @acc + [0]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [4] @acc + [0]
>= [4] @acc + [0]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [4] @acc + [0]
>= [4] @acc + [0]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [4] @acc + [0]
>= [4] @acc + [0]
= bftMult'#(@queue',matrixMult(@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [4] @acc + [0]
>= [2] @acc + [0]
= matrixMult#(@acc,@y)
matrixMult#(@m1,@m2) = [2] @m1 + [0]
>= [2] @m1 + [0]
= c_32(matrixMult#1#(@m1,@m2))
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) = [4]
>= [4]
= nil()
***** Step 9.b:7.b:1.a:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
- 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#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),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/1,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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
***** Step 9.b:7.b:1.a:1.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
- 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#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),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/1,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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
Consider the set of all dependency pairs
1: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
2: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
3: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue)
4: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue)
5: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
6: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
7: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
8: bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
9: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
Processor NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{1}
These cover all (indirect) predecessors of dependency pairs
{1,9}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
****** Step 9.b:7.b:1.a:1.b:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
- 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#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),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/1,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 first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation:
The following argument positions are considered usable:
uargs(c_32) = {1},
uargs(c_33) = {2}
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) = [4]
p(#add) = [0]
p(#mult) = [2] x2 + [0]
p(#natmult) = [1] x2 + [2]
p(#neg) = [2]
p(#pos) = [1] x1 + [5]
p(#pred) = [2] x1 + [3]
p(#s) = [0]
p(#succ) = [3]
p(*) = [0]
p(+) = [1] x1 + [0]
p(::) = [1] x2 + [1]
p(appendreverse) = [4] x1 + [2] x2 + [0]
p(appendreverse#1) = [1] x2 + [0]
p(bftMult) = [1] x2 + [0]
p(bftMult') = [1] x1 + [1] x2 + [0]
p(bftMult'#1) = [0]
p(bftMult'#2) = [0]
p(bftMult'#3) = [1] x2 + [0]
p(bftMult'#4) = [1] x1 + [1] x3 + [0]
p(bftMult'#5) = [1] x1 + [1] x2 + [1] x3 + [0]
p(computeLine) = [2]
p(computeLine#1) = [5] x1 + [1] x3 + [4]
p(computeLine#2) = [2] x1 + [2] x3 + [0]
p(dequeue) = [0]
p(dequeue#1) = [0]
p(dequeue#2) = [2] x1 + [0]
p(enqueue) = [4]
p(enqueue#1) = [1] x2 + [1]
p(leaf) = [0]
p(lineMult) = [4] x1 + [2] x3 + [4]
p(lineMult#1) = [1] x3 + [1]
p(lineMult#2) = [4] x1 + [4] x2 + [2] x4 + [1]
p(matrixMult) = [1] x1 + [0]
p(matrixMult#1) = [1] x1 + [0]
p(nil) = [1]
p(node) = [1] x1 + [0]
p(reverse) = [4] x1 + [0]
p(tuple#2) = [0]
p(#add#) = [1] x2 + [0]
p(#mult#) = [4] x2 + [0]
p(#natmult#) = [0]
p(#pred#) = [4] x1 + [0]
p(#succ#) = [4] x1 + [0]
p(*#) = [0]
p(+#) = [1] x1 + [0]
p(appendreverse#) = [4] x1 + [4] x2 + [0]
p(appendreverse#1#) = [1] x1 + [0]
p(bftMult#) = [1] x1 + [4] x2 + [0]
p(bftMult'#) = [4] x2 + [7]
p(bftMult'#1#) = [4] x2 + [7]
p(bftMult'#2#) = [1] x1 + [0]
p(bftMult'#3#) = [4] x2 + [7]
p(bftMult'#4#) = [4] x2 + [7]
p(bftMult'#5#) = [4] x2 + [7]
p(computeLine#) = [3]
p(computeLine#1#) = [0]
p(computeLine#2#) = [2] x1 + [1] x4 + [0]
p(dequeue#) = [1] x1 + [1] x2 + [0]
p(dequeue#1#) = [1] x2 + [0]
p(dequeue#2#) = [0]
p(enqueue#) = [2] x1 + [0]
p(enqueue#1#) = [1] x1 + [0]
p(lineMult#) = [0]
p(lineMult#1#) = [2] x1 + [1] x2 + [4] x3 + [0]
p(lineMult#2#) = [2]
p(matrixMult#) = [4] x1 + [7]
p(matrixMult#1#) = [4] x1 + [6]
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) = [4] x1 + [0]
p(c_7) = [1] x1 + [0]
p(c_8) = [0]
p(c_9) = [0]
p(c_10) = [2] x1 + [0]
p(c_11) = [0]
p(c_12) = [4] x1 + [0]
p(c_13) = [0]
p(c_14) = [2] x1 + [0]
p(c_15) = [0]
p(c_16) = [0]
p(c_17) = [0]
p(c_18) = [1] x1 + [0]
p(c_19) = [0]
p(c_20) = [1] x1 + [0]
p(c_21) = [0]
p(c_22) = [0]
p(c_23) = [0]
p(c_24) = [0]
p(c_25) = [2] x1 + [2]
p(c_26) = [1]
p(c_27) = [2]
p(c_28) = [1] x1 + [1]
p(c_29) = [2]
p(c_30) = [0]
p(c_31) = [2] x1 + [0]
p(c_32) = [1] x1 + [0]
p(c_33) = [1] x1 + [1] x2 + [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [0]
p(c_38) = [2] x2 + [0]
p(c_39) = [1] x1 + [0]
p(c_40) = [1] x2 + [0]
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 + [0]
p(c_47) = [0]
p(c_48) = [4] x1 + [0]
p(c_49) = [0]
p(c_50) = [0]
p(c_51) = [2] x1 + [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:
matrixMult#(@m1,@m2) = [4] @m1 + [7]
> [4] @m1 + [6]
= c_32(matrixMult#1#(@m1,@m2))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [4] @acc + [7]
>= [4] @acc + [7]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [4] @acc + [7]
>= [4] @acc + [7]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [4] @acc + [7]
>= [4] @acc + [7]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [4] @acc + [7]
>= [4] @acc + [7]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [4] @acc + [7]
>= [4] @acc + [7]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [4] @acc + [7]
>= [4] @acc + [7]
= bftMult'#(@queue',matrixMult(@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [4] @acc + [7]
>= [4] @acc + [7]
= matrixMult#(@acc,@y)
matrixMult#1#(::(@l,@ls),@m2) = [4] @ls + [10]
>= [4] @ls + [10]
= c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
matrixMult(@m1,@m2) = [1] @m1 + [0]
>= [1] @m1 + [0]
= matrixMult#1(@m1,@m2)
matrixMult#1(::(@l,@ls),@m2) = [1] @ls + [1]
>= [1] @ls + [1]
= ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2))
matrixMult#1(nil(),@m2) = [1]
>= [1]
= nil()
****** Step 9.b:7.b:1.a:1.b:1.a:2: Assumption 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)
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),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/1,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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
****** Step 9.b:7.b:1.a:1.b:1.b:1: RemoveWeakSuffixes 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)
matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),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/1,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:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
-->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):2
2: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):3
3: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):5
-->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):4
4:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):1
5: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):7
-->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):6
6:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):1
7:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
-->_1 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):8
8:W:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
-->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):9
9:W:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):8
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
6: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
5: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
3: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue)
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue)
4: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
7: bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
8: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2))
9: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2))
****** Step 9.b:7.b:1.a:1.b:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- 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/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).
**** Step 9.b:7.b:1.b:1: PredecessorEstimationCP 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))
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)
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/1,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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
6: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
7: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
The strictly oriented rules are moved into the weak component.
***** Step 9.b:7.b:1.b:1.a:1: NaturalMI 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))
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)
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/1,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 = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation (containing no more than 1 non-zero interpretation-entries in the diagonal of the component-wise maxima):
The following argument positions are considered usable:
uargs(c_15) = {1},
uargs(c_16) = {1},
uargs(c_18) = {1,2},
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) = [1]
[0]
p(#add) = [0 1] x2 + [0]
[0 0] [0]
p(#mult) = [0 0] x1 + [0]
[0 1] [0]
p(#natmult) = [0]
[0]
p(#neg) = [0]
[0]
p(#pos) = [0]
[1]
p(#pred) = [0 0] x1 + [0]
[1 0] [0]
p(#s) = [0]
[0]
p(#succ) = [0]
[0]
p(*) = [0]
[0]
p(+) = [0]
[0]
p(::) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [1]
p(appendreverse) = [0 1] x1 + [1 1] x2 + [0]
[0 1] [0 1] [0]
p(appendreverse#1) = [0 1] x1 + [1 1] x2 + [0]
[0 1] [0 1] [0]
p(bftMult) = [0]
[0]
p(bftMult') = [0]
[0]
p(bftMult'#1) = [0]
[0]
p(bftMult'#2) = [0 0] x1 + [0]
[0 1] [0]
p(bftMult'#3) = [0]
[0]
p(bftMult'#4) = [0]
[0]
p(bftMult'#5) = [0]
[0]
p(computeLine) = [0]
[0]
p(computeLine#1) = [1]
[1]
p(computeLine#2) = [1]
[0]
p(dequeue) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(dequeue#1) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(dequeue#2) = [0 0] x1 + [0]
[0 1] [0]
p(enqueue) = [0 0] x1 + [0 1] x2 + [0]
[0 1] [0 1] [1]
p(enqueue#1) = [0 1] x1 + [0 0] x2 + [0]
[0 1] [0 1] [1]
p(leaf) = [0]
[0]
p(lineMult) = [0]
[0]
p(lineMult#1) = [0]
[0]
p(lineMult#2) = [1]
[0]
p(matrixMult) = [0]
[1]
p(matrixMult#1) = [0 0] x1 + [1]
[0 1] [0]
p(nil) = [0]
[0]
p(node) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [0]
[0 1] [0 1] [0 1] [1]
p(reverse) = [1 1] x1 + [0]
[0 1] [0]
p(tuple#2) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(#add#) = [0]
[0]
p(#mult#) = [0]
[0]
p(#natmult#) = [0]
[0]
p(#pred#) = [0]
[0]
p(#succ#) = [0]
[0]
p(*#) = [0]
[0]
p(+#) = [0]
[0]
p(appendreverse#) = [0]
[0]
p(appendreverse#1#) = [0]
[0]
p(bftMult#) = [0]
[0]
p(bftMult'#) = [0 1] x1 + [0]
[0 0] [1]
p(bftMult'#1#) = [0 1] x1 + [0]
[0 0] [1]
p(bftMult'#2#) = [0]
[0]
p(bftMult'#3#) = [0 1] x1 + [0 1] x3 + [0]
[0 0] [0 0] [1]
p(bftMult'#4#) = [0 1] x1 + [0 1] x3 + [1]
[0 0] [0 0] [1]
p(bftMult'#5#) = [0 1] x1 + [0 1] x3 + [0]
[0 0] [0 0] [1]
p(computeLine#) = [0 1] x2 + [0]
[0 0] [0]
p(computeLine#1#) = [0 1] x3 + [0]
[1 0] [0]
p(computeLine#2#) = [0 1] x1 + [0]
[0 1] [0]
p(dequeue#) = [0]
[0]
p(dequeue#1#) = [0]
[0]
p(dequeue#2#) = [0]
[0]
p(enqueue#) = [0]
[0]
p(enqueue#1#) = [0]
[0]
p(lineMult#) = [0 1] x2 + [0]
[0 0] [1]
p(lineMult#1#) = [0 1] x1 + [0]
[0 0] [1]
p(lineMult#2#) = [0 0] x1 + [0 1] x4 + [1]
[0 1] [0 1] [0]
p(matrixMult#) = [0 1] x2 + [0]
[0 0] [0]
p(matrixMult#1#) = [0 1] x2 + [0]
[0 0] [0]
p(reverse#) = [0]
[0]
p(c_1) = [0]
[0]
p(c_2) = [0]
[0]
p(c_3) = [0]
[0]
p(c_4) = [0]
[0]
p(c_5) = [0]
[0]
p(c_6) = [0]
[0]
p(c_7) = [0]
[0]
p(c_8) = [0]
[0]
p(c_9) = [0]
[0]
p(c_10) = [0]
[0]
p(c_11) = [0]
[0]
p(c_12) = [0]
[0]
p(c_13) = [0]
[0]
p(c_14) = [0]
[0]
p(c_15) = [1 0] x1 + [0]
[0 0] [0]
p(c_16) = [1 0] x1 + [0]
[0 0] [0]
p(c_17) = [0]
[0]
p(c_18) = [1 0] x1 + [1 1] x2 + [0]
[0 0] [1 0] [0]
p(c_19) = [0]
[0]
p(c_20) = [0]
[0]
p(c_21) = [0]
[0]
p(c_22) = [0]
[0]
p(c_23) = [0]
[0]
p(c_24) = [0]
[0]
p(c_25) = [0]
[0]
p(c_26) = [0]
[0]
p(c_27) = [1 0] x1 + [0]
[0 0] [0]
p(c_28) = [1 0] x1 + [0]
[0 0] [0]
p(c_29) = [0]
[0]
p(c_30) = [1 0] x1 + [0]
[0 0] [0]
p(c_31) = [1 0] x1 + [0]
[1 0] [0]
p(c_32) = [0]
[0]
p(c_33) = [0]
[0]
p(c_34) = [0]
[0]
p(c_35) = [0]
[0]
p(c_36) = [0]
[0]
p(c_37) = [0]
[0]
p(c_38) = [0]
[0]
p(c_39) = [0]
[0]
p(c_40) = [0]
[0]
p(c_41) = [0]
[0]
p(c_42) = [0]
[0]
p(c_43) = [0]
[0]
p(c_44) = [0]
[0]
p(c_45) = [0]
[0]
p(c_46) = [0]
[0]
p(c_47) = [0]
[0]
p(c_48) = [0]
[0]
p(c_49) = [0]
[0]
p(c_50) = [0]
[0]
p(c_51) = [0]
[0]
p(c_52) = [0]
[0]
p(c_53) = [0]
[0]
p(c_54) = [0]
[0]
p(c_55) = [0]
[0]
p(c_56) = [0]
[0]
p(c_57) = [0]
[0]
p(c_58) = [0]
[0]
p(c_59) = [0]
[0]
Following rules are strictly oriented:
lineMult#2#(::(@y,@ys),@n,@x,@xs) = [0 1] @xs + [0 0] @y + [0 0] @ys + [1]
[0 1] [0 1] [0 1] [1]
> [0 1] @xs + [0]
[0 0] [0]
= c_30(lineMult#(@n,@xs,@ys))
lineMult#2#(nil(),@n,@x,@xs) = [0 1] @xs + [1]
[0 1] [0]
> [0 1] @xs + [0]
[0 1] [0]
= c_31(lineMult#(@n,@xs,nil()))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [0 1] @queue + [0]
[0 0] [1]
>= [0 1] @queue + [0]
[0 0] [1]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [0 1] @elem + [0 1] @queue + [0]
[0 0] [0 0] [1]
>= [0 1] @elem + [0 1] @queue + [0]
[0 0] [0 0] [1]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [0 1] @_@3 + [0 1] @queue + [0 1] @t + [1]
[0 0] [0 0] [0 0] [1]
>= [0 1] @queue + [0 1] @t + [1]
[0 0] [0 0] [1]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [0 1] @queue + [1]
[0 0] [1]
>= [0 1] @queue + [0]
[0 0] [1]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [0 1] @queue + [0 1] @t1 + [0 1] @t2 + [0 1] @y + [2]
[0 0] [0 0] [0 0] [0 0] [1]
>= [0 1] @queue + [0 1] @t1 + [0 1] @t2 + [0 1] @y + [2]
[0 0] [0 0] [0 0] [0 0] [1]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [0 1] @queue' + [0 1] @y + [0]
[0 0] [0 0] [1]
>= [0 1] @queue' + [0]
[0 0] [1]
= bftMult'#(@queue',matrixMult(@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [0 1] @queue' + [0 1] @y + [0]
[0 0] [0 0] [1]
>= [0 1] @y + [0]
[0 0] [0]
= matrixMult#(@acc,@y)
computeLine#(@line,@m,@acc) = [0 1] @m + [0]
[0 0] [0]
>= [0 1] @m + [0]
[0 0] [0]
= c_15(computeLine#1#(@line,@acc,@m))
computeLine#1#(::(@x,@xs),@acc,@m) = [0 1] @m + [0]
[1 0] [0]
>= [0 1] @m + [0]
[0 0] [0]
= c_16(computeLine#2#(@m,@acc,@x,@xs))
computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [0 1] @l + [0 1] @ls + [1]
[0 1] [0 1] [1]
>= [0 1] @l + [0 1] @ls + [1]
[0 1] [0 0] [0]
= c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)),lineMult#(@x,@l,@acc))
lineMult#(@n,@l1,@l2) = [0 1] @l1 + [0]
[0 0] [1]
>= [0 1] @l1 + [0]
[0 0] [0]
= c_27(lineMult#1#(@l1,@l2,@n))
lineMult#1#(::(@x,@xs),@l2,@n) = [0 1] @x + [0 1] @xs + [1]
[0 0] [0 0] [1]
>= [0 1] @xs + [1]
[0 0] [0]
= c_28(lineMult#2#(@l2,@n,@x,@xs))
matrixMult#(@m1,@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= matrixMult#1#(@m1,@m2)
matrixMult#1#(::(@l,@ls),@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= computeLine#(@l,@m2,nil())
matrixMult#1#(::(@l,@ls),@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= matrixMult#(@ls,@m2)
appendreverse(@toreverse,@sofar) = [1 1] @sofar + [0 1] @toreverse + [0]
[0 1] [0 1] [0]
>= [1 1] @sofar + [0 1] @toreverse + [0]
[0 1] [0 1] [0]
= appendreverse#1(@toreverse,@sofar)
appendreverse#1(::(@a,@as),@sofar) = [0 1] @a + [0 1] @as + [1 1] @sofar + [1]
[0 1] [0 1] [0 1] [1]
>= [0 1] @a + [0 1] @as + [0 1] @sofar + [1]
[0 1] [0 1] [0 1] [1]
= appendreverse(@as,::(@a,@sofar))
appendreverse#1(nil(),@sofar) = [1 1] @sofar + [0]
[0 1] [0]
>= [1 0] @sofar + [0]
[0 1] [0]
= @sofar
bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [0 0] @dequeue@1 + [0 0] @dequeue@2 + [0]
[0 1] [0 1] [0]
>= [0 0] @dequeue@1 + [0 0] @dequeue@2 + [0]
[0 1] [0 1] [0]
= dequeue(@dequeue@1,@dequeue@2)
dequeue(@outq,@inq) = [0 0] @inq + [0 0] @outq + [0]
[0 1] [0 1] [0]
>= [0 0] @inq + [0 0] @outq + [0]
[0 1] [0 1] [0]
= dequeue#1(@outq,@inq)
dequeue#1(::(@t,@ts),@inq) = [0 0] @inq + [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [0 1] [1]
>= [0 0] @inq + [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [0 1] [1]
= tuple#2(::(@t,nil()),tuple#2(@ts,@inq))
dequeue#1(nil(),@inq) = [0 0] @inq + [0]
[0 1] [0]
>= [0 0] @inq + [0]
[0 1] [0]
= dequeue#2(reverse(@inq))
dequeue#2(::(@t,@ts)) = [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [1]
>= [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [1]
= tuple#2(::(@t,nil()),tuple#2(@ts,nil()))
dequeue#2(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),tuple#2(nil(),nil()))
enqueue(@t,@queue) = [0 1] @queue + [0 0] @t + [0]
[0 1] [0 1] [1]
>= [0 1] @queue + [0 0] @t + [0]
[0 1] [0 1] [1]
= enqueue#1(@queue,@t)
enqueue#1(tuple#2(@outq,@inq),@t) = [0 1] @inq + [0 1] @outq + [0 0] @t + [0]
[0 1] [0 1] [0 1] [1]
>= [0 0] @inq + [0 0] @outq + [0 0] @t + [0]
[0 1] [0 1] [0 1] [1]
= tuple#2(@outq,::(@t,@inq))
reverse(@xs) = [1 1] @xs + [0]
[0 1] [0]
>= [0 1] @xs + [0]
[0 1] [0]
= appendreverse(@xs,nil())
***** Step 9.b:7.b:1.b:1.a:2: Assumption WORST_CASE(?,O(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))
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))
- 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)
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/1,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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
***** Step 9.b:7.b:1.b:1.b:1: PredecessorEstimationCP 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))
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))
- 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)
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/1,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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
3: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
The strictly oriented rules are moved into the weak component.
****** Step 9.b:7.b:1.b:1.b:1.a:1: NaturalMI 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))
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))
- 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)
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/1,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 = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation (containing no more than 1 non-zero interpretation-entries in the diagonal of the component-wise maxima):
The following argument positions are considered usable:
uargs(c_15) = {1},
uargs(c_16) = {1},
uargs(c_18) = {1,2},
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) = [1]
[0]
p(#add) = [1 0] x1 + [1]
[0 0] [0]
p(#mult) = [0]
[0]
p(#natmult) = [0 0] x1 + [0]
[0 1] [1]
p(#neg) = [0]
[0]
p(#pos) = [0 1] x1 + [0]
[0 1] [0]
p(#pred) = [0 0] x1 + [0]
[1 0] [0]
p(#s) = [0 1] x1 + [0]
[0 1] [0]
p(#succ) = [0]
[1]
p(*) = [0 1] x1 + [1]
[0 0] [1]
p(+) = [0 0] x1 + [0]
[1 0] [1]
p(::) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [1]
p(appendreverse) = [0 0] x1 + [1 0] x2 + [0]
[0 1] [0 1] [0]
p(appendreverse#1) = [0 0] x1 + [1 0] x2 + [0]
[0 1] [0 1] [0]
p(bftMult) = [0]
[0]
p(bftMult') = [0]
[0]
p(bftMult'#1) = [0]
[0]
p(bftMult'#2) = [0 1] x1 + [1]
[0 1] [0]
p(bftMult'#3) = [0]
[0]
p(bftMult'#4) = [0]
[0]
p(bftMult'#5) = [0]
[0]
p(computeLine) = [0 1] x3 + [0]
[0 0] [0]
p(computeLine#1) = [0]
[0]
p(computeLine#2) = [0]
[0]
p(dequeue) = [0 0] x1 + [0 1] x2 + [1]
[0 1] [0 1] [0]
p(dequeue#1) = [0 0] x1 + [0 1] x2 + [0]
[0 1] [0 1] [0]
p(dequeue#2) = [1 0] x1 + [0]
[0 1] [0]
p(enqueue) = [1 1] x1 + [0 1] x2 + [0]
[0 1] [0 1] [1]
p(enqueue#1) = [0 1] x1 + [1 0] x2 + [0]
[0 1] [0 1] [1]
p(leaf) = [0]
[1]
p(lineMult) = [0 0] x1 + [0]
[1 0] [0]
p(lineMult#1) = [0]
[0]
p(lineMult#2) = [0]
[1]
p(matrixMult) = [0]
[0]
p(matrixMult#1) = [0 1] x1 + [1]
[0 0] [0]
p(nil) = [0]
[0]
p(node) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [0]
[0 1] [0 1] [0 1] [1]
p(reverse) = [0 1] x1 + [0]
[0 1] [0]
p(tuple#2) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(#add#) = [0]
[0]
p(#mult#) = [0]
[0]
p(#natmult#) = [0]
[0]
p(#pred#) = [0]
[0]
p(#succ#) = [0]
[0]
p(*#) = [0]
[0]
p(+#) = [0]
[0]
p(appendreverse#) = [0]
[0]
p(appendreverse#1#) = [0]
[0]
p(bftMult#) = [0]
[0]
p(bftMult'#) = [0 1] x1 + [0]
[0 1] [0]
p(bftMult'#1#) = [0 1] x1 + [0]
[0 1] [0]
p(bftMult'#2#) = [0]
[0]
p(bftMult'#3#) = [0 1] x1 + [0 1] x3 + [0]
[0 1] [0 1] [0]
p(bftMult'#4#) = [0 1] x1 + [0 1] x3 + [1]
[0 1] [0 1] [1]
p(bftMult'#5#) = [0 1] x1 + [0 1] x3 + [0]
[0 1] [0 1] [0]
p(computeLine#) = [0 1] x2 + [0]
[0 0] [0]
p(computeLine#1#) = [0 0] x1 + [0 0] x2 + [0 1] x3 + [0]
[0 1] [1 0] [0 1] [0]
p(computeLine#2#) = [0 1] x1 + [0 0] x2 + [0 0] x4 + [0]
[0 1] [1 0] [1 0] [0]
p(dequeue#) = [0]
[0]
p(dequeue#1#) = [0]
[0]
p(dequeue#2#) = [0]
[0]
p(enqueue#) = [0]
[0]
p(enqueue#1#) = [0]
[0]
p(lineMult#) = [0 0] x2 + [0]
[0 1] [0]
p(lineMult#1#) = [0 0] x1 + [0]
[0 1] [0]
p(lineMult#2#) = [0 0] x1 + [0]
[0 1] [0]
p(matrixMult#) = [0 1] x2 + [0]
[0 0] [0]
p(matrixMult#1#) = [0 1] x2 + [0]
[0 0] [0]
p(reverse#) = [0]
[0]
p(c_1) = [0]
[0]
p(c_2) = [0]
[0]
p(c_3) = [0]
[0]
p(c_4) = [0]
[0]
p(c_5) = [0]
[0]
p(c_6) = [0]
[0]
p(c_7) = [0]
[0]
p(c_8) = [0]
[0]
p(c_9) = [0]
[0]
p(c_10) = [0]
[0]
p(c_11) = [0]
[0]
p(c_12) = [0]
[0]
p(c_13) = [0]
[0]
p(c_14) = [0]
[0]
p(c_15) = [1 0] x1 + [0]
[0 0] [0]
p(c_16) = [1 0] x1 + [0]
[0 0] [0]
p(c_17) = [0]
[0]
p(c_18) = [1 0] x1 + [1 1] x2 + [0]
[0 0] [0 1] [1]
p(c_19) = [0]
[0]
p(c_20) = [0]
[0]
p(c_21) = [0]
[0]
p(c_22) = [0]
[0]
p(c_23) = [0]
[0]
p(c_24) = [0]
[0]
p(c_25) = [0]
[0]
p(c_26) = [0]
[0]
p(c_27) = [1 0] x1 + [0]
[0 1] [0]
p(c_28) = [1 0] x1 + [0]
[0 0] [0]
p(c_29) = [0]
[0]
p(c_30) = [1 0] x1 + [0]
[0 0] [0]
p(c_31) = [1 0] x1 + [0]
[0 0] [0]
p(c_32) = [0]
[0]
p(c_33) = [0]
[0]
p(c_34) = [0]
[0]
p(c_35) = [0]
[0]
p(c_36) = [0]
[0]
p(c_37) = [0]
[0]
p(c_38) = [0]
[0]
p(c_39) = [0]
[0]
p(c_40) = [0]
[0]
p(c_41) = [0]
[0]
p(c_42) = [0]
[0]
p(c_43) = [0]
[0]
p(c_44) = [0]
[0]
p(c_45) = [0]
[0]
p(c_46) = [0]
[0]
p(c_47) = [0]
[0]
p(c_48) = [0]
[0]
p(c_49) = [0]
[0]
p(c_50) = [0]
[0]
p(c_51) = [0]
[0]
p(c_52) = [0]
[0]
p(c_53) = [0]
[0]
p(c_54) = [0]
[0]
p(c_55) = [0]
[0]
p(c_56) = [0]
[0]
p(c_57) = [0]
[0]
p(c_58) = [0]
[0]
p(c_59) = [0]
[0]
Following rules are strictly oriented:
computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [0 0] @acc + [0 1] @l + [0 1] @ls + [0 0] @xs + [1]
[1 0] [0 1] [0 1] [1 0] [1]
> [0 1] @l + [0 1] @ls + [0]
[0 1] [0 0] [1]
= c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)),lineMult#(@x,@l,@acc))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [0 1] @queue + [0]
[0 1] [0]
>= [0 1] @queue + [0]
[0 1] [0]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [0 1] @elem + [0 1] @queue + [0]
[0 1] [0 1] [0]
>= [0 1] @elem + [0 1] @queue + [0]
[0 1] [0 1] [0]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [0 1] @_@3 + [0 1] @queue + [0 1] @t + [1]
[0 1] [0 1] [0 1] [1]
>= [0 1] @queue + [0 1] @t + [1]
[0 1] [0 1] [1]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [0 1] @queue + [2]
[0 1] [2]
>= [0 1] @queue + [0]
[0 1] [0]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [0 1] @queue + [0 1] @t1 + [0 1] @t2 + [0 1] @y + [2]
[0 1] [0 1] [0 1] [0 1] [2]
>= [0 1] @queue + [0 1] @t1 + [0 1] @t2 + [0 1] @y + [2]
[0 1] [0 1] [0 1] [0 1] [2]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [0 1] @queue' + [0 1] @y + [0]
[0 1] [0 1] [0]
>= [0 1] @queue' + [0]
[0 1] [0]
= bftMult'#(@queue',matrixMult(@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [0 1] @queue' + [0 1] @y + [0]
[0 1] [0 1] [0]
>= [0 1] @y + [0]
[0 0] [0]
= matrixMult#(@acc,@y)
computeLine#(@line,@m,@acc) = [0 1] @m + [0]
[0 0] [0]
>= [0 1] @m + [0]
[0 0] [0]
= c_15(computeLine#1#(@line,@acc,@m))
computeLine#1#(::(@x,@xs),@acc,@m) = [0 0] @acc + [0 1] @m + [0 0] @x + [0 0] @xs + [0]
[1 0] [0 1] [0 1] [0 1] [1]
>= [0 1] @m + [0]
[0 0] [0]
= c_16(computeLine#2#(@m,@acc,@x,@xs))
lineMult#(@n,@l1,@l2) = [0 0] @l1 + [0]
[0 1] [0]
>= [0 0] @l1 + [0]
[0 1] [0]
= c_27(lineMult#1#(@l1,@l2,@n))
lineMult#1#(::(@x,@xs),@l2,@n) = [0 0] @x + [0 0] @xs + [0]
[0 1] [0 1] [1]
>= [0]
[0]
= c_28(lineMult#2#(@l2,@n,@x,@xs))
lineMult#2#(::(@y,@ys),@n,@x,@xs) = [0 0] @y + [0 0] @ys + [0]
[0 1] [0 1] [1]
>= [0]
[0]
= c_30(lineMult#(@n,@xs,@ys))
lineMult#2#(nil(),@n,@x,@xs) = [0]
[0]
>= [0]
[0]
= c_31(lineMult#(@n,@xs,nil()))
matrixMult#(@m1,@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= matrixMult#1#(@m1,@m2)
matrixMult#1#(::(@l,@ls),@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= computeLine#(@l,@m2,nil())
matrixMult#1#(::(@l,@ls),@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= matrixMult#(@ls,@m2)
appendreverse(@toreverse,@sofar) = [1 0] @sofar + [0 0] @toreverse + [0]
[0 1] [0 1] [0]
>= [1 0] @sofar + [0 0] @toreverse + [0]
[0 1] [0 1] [0]
= appendreverse#1(@toreverse,@sofar)
appendreverse#1(::(@a,@as),@sofar) = [0 0] @a + [0 0] @as + [1 0] @sofar + [0]
[0 1] [0 1] [0 1] [1]
>= [0 0] @a + [0 0] @as + [0 0] @sofar + [0]
[0 1] [0 1] [0 1] [1]
= appendreverse(@as,::(@a,@sofar))
appendreverse#1(nil(),@sofar) = [1 0] @sofar + [0]
[0 1] [0]
>= [1 0] @sofar + [0]
[0 1] [0]
= @sofar
bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [0 1] @dequeue@1 + [0 1] @dequeue@2 + [1]
[0 1] [0 1] [0]
>= [0 0] @dequeue@1 + [0 1] @dequeue@2 + [1]
[0 1] [0 1] [0]
= dequeue(@dequeue@1,@dequeue@2)
dequeue(@outq,@inq) = [0 1] @inq + [0 0] @outq + [1]
[0 1] [0 1] [0]
>= [0 1] @inq + [0 0] @outq + [0]
[0 1] [0 1] [0]
= dequeue#1(@outq,@inq)
dequeue#1(::(@t,@ts),@inq) = [0 1] @inq + [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [0 1] [1]
>= [0 0] @inq + [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [0 1] [1]
= tuple#2(::(@t,nil()),tuple#2(@ts,@inq))
dequeue#1(nil(),@inq) = [0 1] @inq + [0]
[0 1] [0]
>= [0 1] @inq + [0]
[0 1] [0]
= dequeue#2(reverse(@inq))
dequeue#2(::(@t,@ts)) = [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [1]
>= [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [1]
= tuple#2(::(@t,nil()),tuple#2(@ts,nil()))
dequeue#2(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),tuple#2(nil(),nil()))
enqueue(@t,@queue) = [0 1] @queue + [1 1] @t + [0]
[0 1] [0 1] [1]
>= [0 1] @queue + [1 0] @t + [0]
[0 1] [0 1] [1]
= enqueue#1(@queue,@t)
enqueue#1(tuple#2(@outq,@inq),@t) = [0 1] @inq + [0 1] @outq + [1 0] @t + [0]
[0 1] [0 1] [0 1] [1]
>= [0 0] @inq + [0 0] @outq + [0 0] @t + [0]
[0 1] [0 1] [0 1] [1]
= tuple#2(@outq,::(@t,@inq))
reverse(@xs) = [0 1] @xs + [0]
[0 1] [0]
>= [0 0] @xs + [0]
[0 1] [0]
= appendreverse(@xs,nil())
****** Step 9.b:7.b:1.b:1.b:1.a:2: Assumption WORST_CASE(?,O(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))
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))
- 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))
,lineMult#(@x,@l,@acc))
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/1,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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
****** Step 9.b:7.b:1.b:1.b:1.b:1: PredecessorEstimationCP 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))
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))
- 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))
,lineMult#(@x,@l,@acc))
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/1,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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
4: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
Consider the set of all dependency pairs
1: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
2: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
3: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
4: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
5: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
6: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue)
7: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue)
8: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
9: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
10: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
11: bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
12: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
13: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
14: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
15: matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2)
16: matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil())
17: matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2)
Processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{4}
These cover all (indirect) predecessors of dependency pairs
{4,13,14}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
******* Step 9.b:7.b:1.b:1.b:1.b:1.a:1: NaturalMI 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))
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))
- 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))
,lineMult#(@x,@l,@acc))
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/1,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 = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation (containing no more than 1 non-zero interpretation-entries in the diagonal of the component-wise maxima):
The following argument positions are considered usable:
uargs(c_15) = {1},
uargs(c_16) = {1},
uargs(c_18) = {1,2},
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) = [0]
[1]
p(#add) = [1 0] x2 + [0]
[0 0] [0]
p(#mult) = [0 1] x1 + [1]
[0 1] [0]
p(#natmult) = [1]
[1]
p(#neg) = [0]
[0]
p(#pos) = [0 1] x1 + [0]
[0 1] [0]
p(#pred) = [0 0] x1 + [0]
[1 0] [0]
p(#s) = [0 0] x1 + [0]
[0 1] [0]
p(#succ) = [1]
[0]
p(*) = [0 0] x2 + [0]
[1 0] [0]
p(+) = [0 0] x1 + [0]
[0 1] [0]
p(::) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [1]
p(appendreverse) = [0 0] x1 + [1 0] x2 + [1]
[0 1] [1 1] [0]
p(appendreverse#1) = [0 0] x1 + [1 0] x2 + [1]
[0 1] [0 1] [0]
p(bftMult) = [0]
[0]
p(bftMult') = [0]
[0]
p(bftMult'#1) = [0]
[0]
p(bftMult'#2) = [0 1] x1 + [1]
[0 1] [0]
p(bftMult'#3) = [0]
[0]
p(bftMult'#4) = [0]
[0]
p(bftMult'#5) = [0]
[0]
p(computeLine) = [0]
[0]
p(computeLine#1) = [0]
[0]
p(computeLine#2) = [0 1] x1 + [0]
[0 0] [0]
p(dequeue) = [0 1] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(dequeue#1) = [0 1] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(dequeue#2) = [0 0] x1 + [0]
[0 1] [0]
p(enqueue) = [0 0] x1 + [0 0] x2 + [1]
[0 1] [0 1] [1]
p(enqueue#1) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [1]
p(leaf) = [0]
[0]
p(lineMult) = [0]
[0]
p(lineMult#1) = [1]
[0]
p(lineMult#2) = [0 0] x1 + [0]
[0 1] [0]
p(matrixMult) = [0]
[0]
p(matrixMult#1) = [1]
[0]
p(nil) = [0]
[0]
p(node) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [0]
[0 1] [0 1] [0 1] [1]
p(reverse) = [0 0] x1 + [1]
[0 1] [0]
p(tuple#2) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(#add#) = [0]
[0]
p(#mult#) = [0]
[0]
p(#natmult#) = [0]
[0]
p(#pred#) = [0]
[0]
p(#succ#) = [0]
[0]
p(*#) = [0]
[0]
p(+#) = [0]
[0]
p(appendreverse#) = [0]
[0]
p(appendreverse#1#) = [0]
[0]
p(bftMult#) = [0]
[0]
p(bftMult'#) = [0 1] x1 + [0]
[0 0] [0]
p(bftMult'#1#) = [0 1] x1 + [0]
[0 0] [0]
p(bftMult'#2#) = [0]
[0]
p(bftMult'#3#) = [0 1] x1 + [0 1] x3 + [0]
[0 0] [0 0] [0]
p(bftMult'#4#) = [0 1] x1 + [0 1] x3 + [1]
[0 0] [0 0] [0]
p(bftMult'#5#) = [0 1] x1 + [0 1] x3 + [0]
[0 0] [0 0] [0]
p(computeLine#) = [0 1] x2 + [0]
[0 0] [0]
p(computeLine#1#) = [0 0] x1 + [0 0] x2 + [0 1] x3 + [0]
[0 1] [0 1] [0 1] [1]
p(computeLine#2#) = [0 1] x1 + [0 0] x2 + [0 0] x3 + [0 0] x4 + [0]
[0 1] [0 1] [0 1] [0 1] [1]
p(dequeue#) = [0]
[0]
p(dequeue#1#) = [0]
[0]
p(dequeue#2#) = [0]
[0]
p(enqueue#) = [0]
[0]
p(enqueue#1#) = [0]
[0]
p(lineMult#) = [0 1] x2 + [0 0] x3 + [0]
[0 0] [0 1] [0]
p(lineMult#1#) = [0 1] x1 + [0]
[0 1] [0]
p(lineMult#2#) = [0 0] x1 + [0 1] x3 + [0 1] x4 + [0]
[0 1] [0 0] [0 0] [1]
p(matrixMult#) = [0 1] x2 + [0]
[0 0] [0]
p(matrixMult#1#) = [0 1] x2 + [0]
[0 0] [0]
p(reverse#) = [0]
[0]
p(c_1) = [0]
[0]
p(c_2) = [0]
[0]
p(c_3) = [0]
[0]
p(c_4) = [0]
[0]
p(c_5) = [0]
[0]
p(c_6) = [0]
[0]
p(c_7) = [0]
[0]
p(c_8) = [0]
[0]
p(c_9) = [0]
[0]
p(c_10) = [0]
[0]
p(c_11) = [0]
[0]
p(c_12) = [0]
[0]
p(c_13) = [0]
[0]
p(c_14) = [0]
[0]
p(c_15) = [1 0] x1 + [0]
[0 0] [0]
p(c_16) = [1 0] x1 + [0]
[0 1] [1]
p(c_17) = [0]
[0]
p(c_18) = [1 0] x1 + [1 0] x2 + [1]
[1 0] [0 0] [1]
p(c_19) = [0]
[0]
p(c_20) = [0]
[0]
p(c_21) = [0]
[0]
p(c_22) = [0]
[0]
p(c_23) = [0]
[0]
p(c_24) = [0]
[0]
p(c_25) = [0]
[0]
p(c_26) = [0]
[0]
p(c_27) = [1 0] x1 + [0]
[0 0] [0]
p(c_28) = [1 0] x1 + [0]
[1 0] [1]
p(c_29) = [0]
[0]
p(c_30) = [1 0] x1 + [0]
[0 1] [0]
p(c_31) = [1 0] x1 + [0]
[0 0] [1]
p(c_32) = [0]
[0]
p(c_33) = [0]
[0]
p(c_34) = [0]
[0]
p(c_35) = [0]
[0]
p(c_36) = [0]
[0]
p(c_37) = [0]
[0]
p(c_38) = [0]
[0]
p(c_39) = [0]
[0]
p(c_40) = [0]
[0]
p(c_41) = [0]
[0]
p(c_42) = [0]
[0]
p(c_43) = [0]
[0]
p(c_44) = [0]
[0]
p(c_45) = [0]
[0]
p(c_46) = [0]
[0]
p(c_47) = [0]
[0]
p(c_48) = [0]
[0]
p(c_49) = [0]
[0]
p(c_50) = [0]
[0]
p(c_51) = [0]
[0]
p(c_52) = [0]
[0]
p(c_53) = [0]
[0]
p(c_54) = [0]
[0]
p(c_55) = [0]
[0]
p(c_56) = [0]
[0]
p(c_57) = [0]
[0]
p(c_58) = [0]
[0]
p(c_59) = [0]
[0]
Following rules are strictly oriented:
lineMult#1#(::(@x,@xs),@l2,@n) = [0 1] @x + [0 1] @xs + [1]
[0 1] [0 1] [1]
> [0 1] @x + [0 1] @xs + [0]
[0 1] [0 1] [1]
= c_28(lineMult#2#(@l2,@n,@x,@xs))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [0 1] @queue + [0]
[0 0] [0]
>= [0 1] @queue + [0]
[0 0] [0]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [0 1] @elem + [0 1] @queue + [0]
[0 0] [0 0] [0]
>= [0 1] @elem + [0 1] @queue + [0]
[0 0] [0 0] [0]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [0 1] @_@3 + [0 1] @queue + [0 1] @t + [1]
[0 0] [0 0] [0 0] [0]
>= [0 1] @queue + [0 1] @t + [1]
[0 0] [0 0] [0]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [0 1] @queue + [1]
[0 0] [0]
>= [0 1] @queue + [0]
[0 0] [0]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [0 1] @queue + [0 1] @t1 + [0 1] @t2 + [0 1] @y + [2]
[0 0] [0 0] [0 0] [0 0] [0]
>= [0 1] @queue + [0 1] @t1 + [0 1] @t2 + [0 1] @y + [2]
[0 0] [0 0] [0 0] [0 0] [0]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [0 1] @queue' + [0 1] @y + [0]
[0 0] [0 0] [0]
>= [0 1] @queue' + [0]
[0 0] [0]
= bftMult'#(@queue',matrixMult(@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [0 1] @queue' + [0 1] @y + [0]
[0 0] [0 0] [0]
>= [0 1] @y + [0]
[0 0] [0]
= matrixMult#(@acc,@y)
computeLine#(@line,@m,@acc) = [0 1] @m + [0]
[0 0] [0]
>= [0 1] @m + [0]
[0 0] [0]
= c_15(computeLine#1#(@line,@acc,@m))
computeLine#1#(::(@x,@xs),@acc,@m) = [0 0] @acc + [0 1] @m + [0 0] @x + [0 0] @xs + [0]
[0 1] [0 1] [0 1] [0 1] [2]
>= [0 0] @acc + [0 1] @m + [0 0] @x + [0 0] @xs + [0]
[0 1] [0 1] [0 1] [0 1] [2]
= c_16(computeLine#2#(@m,@acc,@x,@xs))
computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [0 0] @acc + [0 1] @l + [0 1] @ls + [0 0] @x + [0 0] @xs + [1]
[0 1] [0 1] [0 1] [0 1] [0 1] [2]
>= [0 1] @l + [0 1] @ls + [1]
[0 0] [0 1] [1]
= c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)),lineMult#(@x,@l,@acc))
lineMult#(@n,@l1,@l2) = [0 1] @l1 + [0 0] @l2 + [0]
[0 0] [0 1] [0]
>= [0 1] @l1 + [0]
[0 0] [0]
= c_27(lineMult#1#(@l1,@l2,@n))
lineMult#2#(::(@y,@ys),@n,@x,@xs) = [0 1] @x + [0 1] @xs + [0 0] @y + [0 0] @ys + [0]
[0 0] [0 0] [0 1] [0 1] [2]
>= [0 1] @xs + [0 0] @ys + [0]
[0 0] [0 1] [0]
= c_30(lineMult#(@n,@xs,@ys))
lineMult#2#(nil(),@n,@x,@xs) = [0 1] @x + [0 1] @xs + [0]
[0 0] [0 0] [1]
>= [0 1] @xs + [0]
[0 0] [1]
= c_31(lineMult#(@n,@xs,nil()))
matrixMult#(@m1,@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= matrixMult#1#(@m1,@m2)
matrixMult#1#(::(@l,@ls),@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= computeLine#(@l,@m2,nil())
matrixMult#1#(::(@l,@ls),@m2) = [0 1] @m2 + [0]
[0 0] [0]
>= [0 1] @m2 + [0]
[0 0] [0]
= matrixMult#(@ls,@m2)
appendreverse(@toreverse,@sofar) = [1 0] @sofar + [0 0] @toreverse + [1]
[1 1] [0 1] [0]
>= [1 0] @sofar + [0 0] @toreverse + [1]
[0 1] [0 1] [0]
= appendreverse#1(@toreverse,@sofar)
appendreverse#1(::(@a,@as),@sofar) = [0 0] @a + [0 0] @as + [1 0] @sofar + [1]
[0 1] [0 1] [0 1] [1]
>= [0 0] @a + [0 0] @as + [0 0] @sofar + [1]
[0 1] [0 1] [0 1] [1]
= appendreverse(@as,::(@a,@sofar))
appendreverse#1(nil(),@sofar) = [1 0] @sofar + [1]
[0 1] [0]
>= [1 0] @sofar + [0]
[0 1] [0]
= @sofar
bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [0 1] @dequeue@1 + [0 1] @dequeue@2 + [1]
[0 1] [0 1] [0]
>= [0 1] @dequeue@1 + [0 0] @dequeue@2 + [0]
[0 1] [0 1] [0]
= dequeue(@dequeue@1,@dequeue@2)
dequeue(@outq,@inq) = [0 0] @inq + [0 1] @outq + [0]
[0 1] [0 1] [0]
>= [0 0] @inq + [0 1] @outq + [0]
[0 1] [0 1] [0]
= dequeue#1(@outq,@inq)
dequeue#1(::(@t,@ts),@inq) = [0 0] @inq + [0 1] @t + [0 1] @ts + [1]
[0 1] [0 1] [0 1] [1]
>= [0 0] @inq + [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [0 1] [1]
= tuple#2(::(@t,nil()),tuple#2(@ts,@inq))
dequeue#1(nil(),@inq) = [0 0] @inq + [0]
[0 1] [0]
>= [0 0] @inq + [0]
[0 1] [0]
= dequeue#2(reverse(@inq))
dequeue#2(::(@t,@ts)) = [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [1]
>= [0 0] @t + [0 0] @ts + [0]
[0 1] [0 1] [1]
= tuple#2(::(@t,nil()),tuple#2(@ts,nil()))
dequeue#2(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),tuple#2(nil(),nil()))
enqueue(@t,@queue) = [0 0] @queue + [0 0] @t + [1]
[0 1] [0 1] [1]
>= [0 0] @queue + [0 0] @t + [0]
[0 1] [0 1] [1]
= enqueue#1(@queue,@t)
enqueue#1(tuple#2(@outq,@inq),@t) = [0 0] @inq + [0 0] @outq + [0 0] @t + [0]
[0 1] [0 1] [0 1] [1]
>= [0 0] @inq + [0 0] @outq + [0 0] @t + [0]
[0 1] [0 1] [0 1] [1]
= tuple#2(@outq,::(@t,@inq))
reverse(@xs) = [0 0] @xs + [1]
[0 1] [0]
>= [0 0] @xs + [1]
[0 1] [0]
= appendreverse(@xs,nil())
******* Step 9.b:7.b:1.b:1.b:1.b:1.a:2: Assumption WORST_CASE(?,O(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))
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#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,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/1,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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******* Step 9.b:7.b:1.b:1.b:1.b:1.b:1: PredecessorEstimationCP 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))
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#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,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/1,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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
3: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
Consider the set of all dependency pairs
1: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
2: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
3: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
4: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
5: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue)
6: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue)
7: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
8: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
9: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
10: bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
11: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,lineMult#(@x,@l,@acc))
12: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
13: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
14: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
15: matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2)
16: matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil())
17: matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2)
Processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{3}
These cover all (indirect) predecessors of dependency pairs
{3,12,13,14}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
******** Step 9.b:7.b:1.b:1.b:1.b:1.b:1.a:1: NaturalMI 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))
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#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))
,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/1,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 = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation (containing no more than 1 non-zero interpretation-entries in the diagonal of the component-wise maxima):
The following argument positions are considered usable:
uargs(c_15) = {1},
uargs(c_16) = {1},
uargs(c_18) = {1,2},
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) = [0]
[1]
p(#add) = [1]
[0]
p(#mult) = [0]
[0]
p(#natmult) = [1]
[0]
p(#neg) = [0]
[0]
p(#pos) = [1 0] x1 + [0]
[0 0] [0]
p(#pred) = [1 0] x1 + [0]
[0 0] [0]
p(#s) = [0 1] x1 + [1]
[0 0] [0]
p(#succ) = [0]
[1]
p(*) = [0 1] x2 + [0]
[0 0] [1]
p(+) = [0 1] x1 + [0]
[1 0] [0]
p(::) = [1 0] x1 + [1 0] x2 + [1]
[0 0] [0 0] [0]
p(appendreverse) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(appendreverse#1) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(bftMult) = [0]
[0]
p(bftMult') = [0]
[0]
p(bftMult'#1) = [0]
[0]
p(bftMult'#2) = [1 0] x1 + [0]
[0 0] [1]
p(bftMult'#3) = [0]
[0]
p(bftMult'#4) = [0]
[0]
p(bftMult'#5) = [0]
[0]
p(computeLine) = [1 0] x2 + [0]
[0 0] [1]
p(computeLine#1) = [0]
[1]
p(computeLine#2) = [0]
[0]
p(dequeue) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [0]
p(dequeue#1) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [0]
p(dequeue#2) = [1 0] x1 + [0]
[0 0] [0]
p(enqueue) = [1 0] x1 + [1 0] x2 + [1]
[0 0] [0 0] [1]
p(enqueue#1) = [1 0] x1 + [1 0] x2 + [1]
[0 0] [0 0] [1]
p(leaf) = [0]
[0]
p(lineMult) = [0]
[1]
p(lineMult#1) = [0]
[0]
p(lineMult#2) = [0]
[0]
p(matrixMult) = [1 0] x2 + [0]
[0 0] [0]
p(matrixMult#1) = [1]
[0]
p(nil) = [0]
[0]
p(node) = [1 1] x1 + [1 0] x2 + [1 1] x3 + [1]
[0 0] [0 0] [0 0] [0]
p(reverse) = [1 0] x1 + [0]
[0 0] [0]
p(tuple#2) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [0]
p(#add#) = [0]
[0]
p(#mult#) = [0]
[0]
p(#natmult#) = [0]
[0]
p(#pred#) = [0]
[0]
p(#succ#) = [0]
[0]
p(*#) = [0]
[0]
p(+#) = [0]
[0]
p(appendreverse#) = [0]
[0]
p(appendreverse#1#) = [0]
[0]
p(bftMult#) = [0]
[0]
p(bftMult'#) = [1 0] x1 + [0]
[0 0] [0]
p(bftMult'#1#) = [1 0] x1 + [0]
[0 0] [0]
p(bftMult'#2#) = [0]
[0]
p(bftMult'#3#) = [1 0] x1 + [1 0] x3 + [0]
[0 0] [0 0] [0]
p(bftMult'#4#) = [1 0] x1 + [1 0] x3 + [1]
[0 0] [0 0] [0]
p(bftMult'#5#) = [1 0] x1 + [1 0] x3 + [0]
[0 0] [0 0] [0]
p(computeLine#) = [1 0] x2 + [0]
[0 0] [0]
p(computeLine#1#) = [1 0] x3 + [0]
[1 0] [1]
p(computeLine#2#) = [1 0] x1 + [0 0] x3 + [0]
[0 0] [0 1] [1]
p(dequeue#) = [0]
[0]
p(dequeue#1#) = [0]
[0]
p(dequeue#2#) = [0]
[0]
p(enqueue#) = [0]
[0]
p(enqueue#1#) = [0]
[0]
p(lineMult#) = [1 0] x2 + [1]
[0 1] [1]
p(lineMult#1#) = [1 0] x1 + [0]
[0 0] [0]
p(lineMult#2#) = [1 0] x4 + [1]
[1 1] [1]
p(matrixMult#) = [1 0] x2 + [0]
[0 0] [0]
p(matrixMult#1#) = [1 0] x2 + [0]
[0 0] [0]
p(reverse#) = [0]
[0]
p(c_1) = [0]
[0]
p(c_2) = [0]
[0]
p(c_3) = [0]
[0]
p(c_4) = [0]
[0]
p(c_5) = [0]
[0]
p(c_6) = [0]
[0]
p(c_7) = [0]
[0]
p(c_8) = [0]
[0]
p(c_9) = [0]
[0]
p(c_10) = [0]
[0]
p(c_11) = [0]
[0]
p(c_12) = [0]
[0]
p(c_13) = [0]
[0]
p(c_14) = [0]
[0]
p(c_15) = [1 0] x1 + [0]
[0 0] [0]
p(c_16) = [1 0] x1 + [0]
[1 0] [1]
p(c_17) = [0]
[0]
p(c_18) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [1]
p(c_19) = [0]
[0]
p(c_20) = [0]
[0]
p(c_21) = [0]
[0]
p(c_22) = [0]
[0]
p(c_23) = [0]
[0]
p(c_24) = [0]
[0]
p(c_25) = [0]
[0]
p(c_26) = [0]
[0]
p(c_27) = [1 0] x1 + [0]
[0 0] [0]
p(c_28) = [1 0] x1 + [0]
[0 0] [0]
p(c_29) = [0]
[0]
p(c_30) = [1 0] x1 + [0]
[0 1] [0]
p(c_31) = [1 0] x1 + [0]
[1 0] [0]
p(c_32) = [0]
[0]
p(c_33) = [0]
[0]
p(c_34) = [0]
[0]
p(c_35) = [0]
[0]
p(c_36) = [0]
[0]
p(c_37) = [0]
[0]
p(c_38) = [0]
[0]
p(c_39) = [0]
[0]
p(c_40) = [0]
[0]
p(c_41) = [0]
[0]
p(c_42) = [0]
[0]
p(c_43) = [0]
[0]
p(c_44) = [0]
[0]
p(c_45) = [0]
[0]
p(c_46) = [0]
[0]
p(c_47) = [0]
[0]
p(c_48) = [0]
[0]
p(c_49) = [0]
[0]
p(c_50) = [0]
[0]
p(c_51) = [0]
[0]
p(c_52) = [0]
[0]
p(c_53) = [0]
[0]
p(c_54) = [0]
[0]
p(c_55) = [0]
[0]
p(c_56) = [0]
[0]
p(c_57) = [0]
[0]
p(c_58) = [0]
[0]
p(c_59) = [0]
[0]
Following rules are strictly oriented:
lineMult#(@n,@l1,@l2) = [1 0] @l1 + [1]
[0 1] [1]
> [1 0] @l1 + [0]
[0 0] [0]
= c_27(lineMult#1#(@l1,@l2,@n))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [1 0] @queue + [0]
[0 0] [0]
>= [1 0] @queue + [0]
[0 0] [0]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1 0] @elem + [1 0] @queue + [0]
[0 0] [0 0] [0]
>= [1 0] @elem + [1 0] @queue + [0]
[0 0] [0 0] [0]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1 0] @_@3 + [1 0] @queue + [1 0] @t + [1]
[0 0] [0 0] [0 0] [0]
>= [1 0] @queue + [1 0] @t + [1]
[0 0] [0 0] [0]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [1 0] @queue + [1]
[0 0] [0]
>= [1 0] @queue + [0]
[0 0] [0]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1 0] @queue + [1 0] @t1 + [1 1] @t2 + [1 1] @y + [2]
[0 0] [0 0] [0 0] [0 0] [0]
>= [1 0] @queue + [1 0] @t1 + [1 0] @t2 + [1 0] @y + [2]
[0 0] [0 0] [0 0] [0 0] [0]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [1 0] @queue' + [1 0] @y + [0]
[0 0] [0 0] [0]
>= [1 0] @queue' + [0]
[0 0] [0]
= bftMult'#(@queue',matrixMult(@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [1 0] @queue' + [1 0] @y + [0]
[0 0] [0 0] [0]
>= [1 0] @y + [0]
[0 0] [0]
= matrixMult#(@acc,@y)
computeLine#(@line,@m,@acc) = [1 0] @m + [0]
[0 0] [0]
>= [1 0] @m + [0]
[0 0] [0]
= c_15(computeLine#1#(@line,@acc,@m))
computeLine#1#(::(@x,@xs),@acc,@m) = [1 0] @m + [0]
[1 0] [1]
>= [1 0] @m + [0]
[1 0] [1]
= c_16(computeLine#2#(@m,@acc,@x,@xs))
computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [1 0] @l + [1 0] @ls + [0 0] @x + [1]
[0 0] [0 0] [0 1] [1]
>= [1 0] @l + [1 0] @ls + [1]
[0 0] [0 0] [1]
= c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)),lineMult#(@x,@l,@acc))
lineMult#1#(::(@x,@xs),@l2,@n) = [1 0] @x + [1 0] @xs + [1]
[0 0] [0 0] [0]
>= [1 0] @xs + [1]
[0 0] [0]
= c_28(lineMult#2#(@l2,@n,@x,@xs))
lineMult#2#(::(@y,@ys),@n,@x,@xs) = [1 0] @xs + [1]
[1 1] [1]
>= [1 0] @xs + [1]
[0 1] [1]
= c_30(lineMult#(@n,@xs,@ys))
lineMult#2#(nil(),@n,@x,@xs) = [1 0] @xs + [1]
[1 1] [1]
>= [1 0] @xs + [1]
[1 0] [1]
= c_31(lineMult#(@n,@xs,nil()))
matrixMult#(@m1,@m2) = [1 0] @m2 + [0]
[0 0] [0]
>= [1 0] @m2 + [0]
[0 0] [0]
= matrixMult#1#(@m1,@m2)
matrixMult#1#(::(@l,@ls),@m2) = [1 0] @m2 + [0]
[0 0] [0]
>= [1 0] @m2 + [0]
[0 0] [0]
= computeLine#(@l,@m2,nil())
matrixMult#1#(::(@l,@ls),@m2) = [1 0] @m2 + [0]
[0 0] [0]
>= [1 0] @m2 + [0]
[0 0] [0]
= matrixMult#(@ls,@m2)
appendreverse(@toreverse,@sofar) = [1 0] @sofar + [1 0] @toreverse + [0]
[0 1] [0 0] [0]
>= [1 0] @sofar + [1 0] @toreverse + [0]
[0 1] [0 0] [0]
= appendreverse#1(@toreverse,@sofar)
appendreverse#1(::(@a,@as),@sofar) = [1 0] @a + [1 0] @as + [1 0] @sofar + [1]
[0 0] [0 0] [0 1] [0]
>= [1 0] @a + [1 0] @as + [1 0] @sofar + [1]
[0 0] [0 0] [0 0] [0]
= appendreverse(@as,::(@a,@sofar))
appendreverse#1(nil(),@sofar) = [1 0] @sofar + [0]
[0 1] [0]
>= [1 0] @sofar + [0]
[0 1] [0]
= @sofar
bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1 0] @dequeue@1 + [1 0] @dequeue@2 + [0]
[0 0] [0 0] [1]
>= [1 0] @dequeue@1 + [1 0] @dequeue@2 + [0]
[0 0] [0 0] [0]
= dequeue(@dequeue@1,@dequeue@2)
dequeue(@outq,@inq) = [1 0] @inq + [1 0] @outq + [0]
[0 0] [0 0] [0]
>= [1 0] @inq + [1 0] @outq + [0]
[0 0] [0 0] [0]
= dequeue#1(@outq,@inq)
dequeue#1(::(@t,@ts),@inq) = [1 0] @inq + [1 0] @t + [1 0] @ts + [1]
[0 0] [0 0] [0 0] [0]
>= [1 0] @inq + [1 0] @t + [1 0] @ts + [1]
[0 0] [0 0] [0 0] [0]
= tuple#2(::(@t,nil()),tuple#2(@ts,@inq))
dequeue#1(nil(),@inq) = [1 0] @inq + [0]
[0 0] [0]
>= [1 0] @inq + [0]
[0 0] [0]
= dequeue#2(reverse(@inq))
dequeue#2(::(@t,@ts)) = [1 0] @t + [1 0] @ts + [1]
[0 0] [0 0] [0]
>= [1 0] @t + [1 0] @ts + [1]
[0 0] [0 0] [0]
= tuple#2(::(@t,nil()),tuple#2(@ts,nil()))
dequeue#2(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),tuple#2(nil(),nil()))
enqueue(@t,@queue) = [1 0] @queue + [1 0] @t + [1]
[0 0] [0 0] [1]
>= [1 0] @queue + [1 0] @t + [1]
[0 0] [0 0] [1]
= enqueue#1(@queue,@t)
enqueue#1(tuple#2(@outq,@inq),@t) = [1 0] @inq + [1 0] @outq + [1 0] @t + [1]
[0 0] [0 0] [0 0] [1]
>= [1 0] @inq + [1 0] @outq + [1 0] @t + [1]
[0 0] [0 0] [0 0] [0]
= tuple#2(@outq,::(@t,@inq))
reverse(@xs) = [1 0] @xs + [0]
[0 0] [0]
>= [1 0] @xs + [0]
[0 0] [0]
= appendreverse(@xs,nil())
******** Step 9.b:7.b:1.b:1.b:1.b:1.b:1.a:2: Assumption WORST_CASE(?,O(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))
,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/1,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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******** Step 9.b:7.b:1.b:1.b:1.b:1.b:1.b: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))
- 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))
,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/1,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)):10
3:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
-->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):4
4: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):5
5: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):7
-->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):6
6:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):3
7: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):9
-->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):8
8:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):3
9:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
-->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):15
10:W: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)):11
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1
11:W: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)):12
12:W: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())):14
-->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)):13
13:W: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)):11
14:W:lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
-->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):11
15:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2)
-->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):17
-->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):16
16:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil())
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1
17:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2)
-->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):15
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
11: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n))
14: lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil()))
12: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs))
13: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys))
******** Step 9.b:7.b:1.b:1.b:1.b:1.b:1.b: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))
- 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))
,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/1,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)):10
3:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
-->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):4
4: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):5
5: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):7
-->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):6
6:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):3
7: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):9
-->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):8
8:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):3
9:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
-->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):15
10:W: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
15:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2)
-->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):17
-->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):16
16:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil())
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1
17:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2)
-->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):15
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 9.b:7.b:1.b:1.b:1.b:1.b:1.b:3: PredecessorEstimationCP 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/1,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:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
Consider the set of all dependency pairs
1: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
2: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
3: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
4: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue)
5: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue)
6: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
7: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
8: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
9: bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
10: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)))
11: matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2)
12: matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil())
13: matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2)
Processor NaturalMI {miDimension = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{1}
These cover all (indirect) predecessors of dependency pairs
{1,2,10}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
********* Step 9.b:7.b:1.b:1.b:1.b:1.b:1.b:3.a:1: NaturalMI 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/1,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 = 2, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just first alternative for predecessorEstimation on any intersect of rules of CDG leaf and strict-rules}
+ Details:
We apply a matrix interpretation of kind constructor based matrix interpretation (containing no more than 1 non-zero interpretation-entries in the diagonal of the component-wise maxima):
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) = [0]
[0]
p(#add) = [0 0] x2 + [0]
[1 0] [1]
p(#mult) = [0 1] x1 + [1]
[0 1] [1]
p(#natmult) = [1 0] x1 + [1]
[0 0] [0]
p(#neg) = [0]
[1]
p(#pos) = [0]
[0]
p(#pred) = [0]
[0]
p(#s) = [1]
[0]
p(#succ) = [0 0] x1 + [0]
[0 1] [0]
p(*) = [1 1] x1 + [0 1] x2 + [0]
[0 0] [0 1] [0]
p(+) = [1 1] x1 + [1]
[0 0] [0]
p(::) = [1 1] x1 + [1 0] x2 + [1]
[0 0] [0 0] [0]
p(appendreverse) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(appendreverse#1) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(bftMult) = [0]
[0]
p(bftMult') = [0]
[0]
p(bftMult'#1) = [0]
[0]
p(bftMult'#2) = [1 0] x1 + [0]
[0 0] [1]
p(bftMult'#3) = [0]
[0]
p(bftMult'#4) = [0]
[0]
p(bftMult'#5) = [0]
[0]
p(computeLine) = [0 0] x3 + [0]
[1 0] [0]
p(computeLine#1) = [0]
[0]
p(computeLine#2) = [0]
[0]
p(dequeue) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [1]
p(dequeue#1) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [1]
p(dequeue#2) = [1 0] x1 + [0]
[0 0] [1]
p(enqueue) = [1 1] x1 + [1 0] x2 + [1]
[0 1] [0 1] [1]
p(enqueue#1) = [1 0] x1 + [1 1] x2 + [1]
[0 0] [0 0] [0]
p(leaf) = [1]
[0]
p(lineMult) = [1 0] x1 + [0 1] x2 + [0]
[0 0] [0 0] [0]
p(lineMult#1) = [0]
[0]
p(lineMult#2) = [1]
[1]
p(matrixMult) = [0]
[0]
p(matrixMult#1) = [0]
[0]
p(nil) = [0]
[0]
p(node) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 0] [0 0] [0 0] [1]
p(reverse) = [1 0] x1 + [0]
[1 0] [1]
p(tuple#2) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [0]
p(#add#) = [0]
[0]
p(#mult#) = [0]
[0]
p(#natmult#) = [0]
[0]
p(#pred#) = [0]
[0]
p(#succ#) = [0]
[0]
p(*#) = [0]
[0]
p(+#) = [0]
[0]
p(appendreverse#) = [0]
[0]
p(appendreverse#1#) = [0]
[0]
p(bftMult#) = [0]
[0]
p(bftMult'#) = [1 0] x1 + [0]
[0 0] [0]
p(bftMult'#1#) = [1 0] x1 + [0]
[0 0] [0]
p(bftMult'#2#) = [0]
[0]
p(bftMult'#3#) = [1 0] x1 + [1 0] x3 + [0]
[0 0] [0 0] [0]
p(bftMult'#4#) = [1 1] x1 + [1 0] x3 + [1]
[0 0] [0 0] [0]
p(bftMult'#5#) = [1 0] x1 + [1 0] x3 + [1]
[0 0] [0 0] [0]
p(computeLine#) = [1 0] x2 + [1]
[0 0] [0]
p(computeLine#1#) = [1 0] x3 + [0]
[1 1] [0]
p(computeLine#2#) = [1 0] x1 + [0 0] x2 + [0]
[0 0] [1 0] [1]
p(dequeue#) = [0]
[0]
p(dequeue#1#) = [0]
[0]
p(dequeue#2#) = [0]
[0]
p(enqueue#) = [0]
[0]
p(enqueue#1#) = [0]
[0]
p(lineMult#) = [0]
[0]
p(lineMult#1#) = [0]
[0]
p(lineMult#2#) = [0]
[0]
p(matrixMult#) = [1 0] x2 + [1]
[0 0] [0]
p(matrixMult#1#) = [1 0] x2 + [1]
[0 0] [0]
p(reverse#) = [0]
[0]
p(c_1) = [0]
[0]
p(c_2) = [0]
[0]
p(c_3) = [0]
[0]
p(c_4) = [0]
[0]
p(c_5) = [0]
[0]
p(c_6) = [0]
[0]
p(c_7) = [0]
[0]
p(c_8) = [0]
[0]
p(c_9) = [0]
[0]
p(c_10) = [0]
[0]
p(c_11) = [0]
[0]
p(c_12) = [0]
[0]
p(c_13) = [0]
[0]
p(c_14) = [0]
[0]
p(c_15) = [1 0] x1 + [0]
[0 0] [0]
p(c_16) = [1 0] x1 + [0]
[1 0] [0]
p(c_17) = [0]
[0]
p(c_18) = [1 0] x1 + [0]
[0 0] [1]
p(c_19) = [0]
[0]
p(c_20) = [0]
[0]
p(c_21) = [0]
[0]
p(c_22) = [0]
[0]
p(c_23) = [0]
[0]
p(c_24) = [0]
[0]
p(c_25) = [0]
[0]
p(c_26) = [0]
[0]
p(c_27) = [0]
[0]
p(c_28) = [0]
[0]
p(c_29) = [0]
[0]
p(c_30) = [0]
[0]
p(c_31) = [0]
[0]
p(c_32) = [0]
[0]
p(c_33) = [0]
[0]
p(c_34) = [0]
[0]
p(c_35) = [0]
[0]
p(c_36) = [0]
[0]
p(c_37) = [0]
[0]
p(c_38) = [0]
[0]
p(c_39) = [0]
[0]
p(c_40) = [0]
[0]
p(c_41) = [0]
[0]
p(c_42) = [0]
[0]
p(c_43) = [0]
[0]
p(c_44) = [0]
[0]
p(c_45) = [0]
[0]
p(c_46) = [0]
[0]
p(c_47) = [0]
[0]
p(c_48) = [0]
[0]
p(c_49) = [0]
[0]
p(c_50) = [0]
[0]
p(c_51) = [0]
[0]
p(c_52) = [0]
[0]
p(c_53) = [0]
[0]
p(c_54) = [0]
[0]
p(c_55) = [0]
[0]
p(c_56) = [0]
[0]
p(c_57) = [0]
[0]
p(c_58) = [0]
[0]
p(c_59) = [0]
[0]
Following rules are strictly oriented:
computeLine#(@line,@m,@acc) = [1 0] @m + [1]
[0 0] [0]
> [1 0] @m + [0]
[0 0] [0]
= c_15(computeLine#1#(@line,@acc,@m))
Following rules are (at-least) weakly oriented:
bftMult'#(@queue,@acc) = [1 0] @queue + [0]
[0 0] [0]
>= [1 0] @queue + [0]
[0 0] [0]
= bftMult'#1#(bftMult'#2(@queue),@acc)
bftMult'#1#(tuple#2(@elem,@queue),@acc) = [1 0] @elem + [1 0] @queue + [0]
[0 0] [0 0] [0]
>= [1 0] @elem + [1 0] @queue + [0]
[0 0] [0 0] [0]
= bftMult'#3#(@elem,@acc,@queue)
bftMult'#3#(::(@t,@_@3),@acc,@queue) = [1 0] @_@3 + [1 0] @queue + [1 1] @t + [1]
[0 0] [0 0] [0 0] [0]
>= [1 0] @queue + [1 1] @t + [1]
[0 0] [0 0] [0]
= bftMult'#4#(@t,@acc,@queue)
bftMult'#4#(leaf(),@acc,@queue) = [1 0] @queue + [2]
[0 0] [0]
>= [1 0] @queue + [0]
[0 0] [0]
= bftMult'#(@queue,@acc)
bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) = [1 0] @queue + [1 1] @t1 + [1 1] @t2 + [1 0] @y + [3]
[0 0] [0 0] [0 0] [0 0] [0]
>= [1 0] @queue + [1 1] @t1 + [1 1] @t2 + [1 0] @y + [3]
[0 0] [0 0] [0 0] [0 0] [0]
= bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
bftMult'#5#(@queue',@acc,@y) = [1 0] @queue' + [1 0] @y + [1]
[0 0] [0 0] [0]
>= [1 0] @queue' + [0]
[0 0] [0]
= bftMult'#(@queue',matrixMult(@acc,@y))
bftMult'#5#(@queue',@acc,@y) = [1 0] @queue' + [1 0] @y + [1]
[0 0] [0 0] [0]
>= [1 0] @y + [1]
[0 0] [0]
= matrixMult#(@acc,@y)
computeLine#1#(::(@x,@xs),@acc,@m) = [1 0] @m + [0]
[1 1] [0]
>= [1 0] @m + [0]
[1 0] [0]
= c_16(computeLine#2#(@m,@acc,@x,@xs))
computeLine#2#(::(@l,@ls),@acc,@x,@xs) = [0 0] @acc + [1 1] @l + [1 0] @ls + [1]
[1 0] [0 0] [0 0] [1]
>= [1 0] @ls + [1]
[0 0] [1]
= c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)))
matrixMult#(@m1,@m2) = [1 0] @m2 + [1]
[0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= matrixMult#1#(@m1,@m2)
matrixMult#1#(::(@l,@ls),@m2) = [1 0] @m2 + [1]
[0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= computeLine#(@l,@m2,nil())
matrixMult#1#(::(@l,@ls),@m2) = [1 0] @m2 + [1]
[0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= matrixMult#(@ls,@m2)
appendreverse(@toreverse,@sofar) = [1 0] @sofar + [1 0] @toreverse + [0]
[0 1] [0 0] [0]
>= [1 0] @sofar + [1 0] @toreverse + [0]
[0 1] [0 0] [0]
= appendreverse#1(@toreverse,@sofar)
appendreverse#1(::(@a,@as),@sofar) = [1 1] @a + [1 0] @as + [1 0] @sofar + [1]
[0 0] [0 0] [0 1] [0]
>= [1 1] @a + [1 0] @as + [1 0] @sofar + [1]
[0 0] [0 0] [0 0] [0]
= appendreverse(@as,::(@a,@sofar))
appendreverse#1(nil(),@sofar) = [1 0] @sofar + [0]
[0 1] [0]
>= [1 0] @sofar + [0]
[0 1] [0]
= @sofar
bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) = [1 0] @dequeue@1 + [1 0] @dequeue@2 + [0]
[0 0] [0 0] [1]
>= [1 0] @dequeue@1 + [1 0] @dequeue@2 + [0]
[0 0] [0 0] [1]
= dequeue(@dequeue@1,@dequeue@2)
dequeue(@outq,@inq) = [1 0] @inq + [1 0] @outq + [0]
[0 0] [0 0] [1]
>= [1 0] @inq + [1 0] @outq + [0]
[0 0] [0 0] [1]
= dequeue#1(@outq,@inq)
dequeue#1(::(@t,@ts),@inq) = [1 0] @inq + [1 1] @t + [1 0] @ts + [1]
[0 0] [0 0] [0 0] [1]
>= [1 0] @inq + [1 1] @t + [1 0] @ts + [1]
[0 0] [0 0] [0 0] [0]
= tuple#2(::(@t,nil()),tuple#2(@ts,@inq))
dequeue#1(nil(),@inq) = [1 0] @inq + [0]
[0 0] [1]
>= [1 0] @inq + [0]
[0 0] [1]
= dequeue#2(reverse(@inq))
dequeue#2(::(@t,@ts)) = [1 1] @t + [1 0] @ts + [1]
[0 0] [0 0] [1]
>= [1 1] @t + [1 0] @ts + [1]
[0 0] [0 0] [0]
= tuple#2(::(@t,nil()),tuple#2(@ts,nil()))
dequeue#2(nil()) = [0]
[1]
>= [0]
[0]
= tuple#2(nil(),tuple#2(nil(),nil()))
enqueue(@t,@queue) = [1 0] @queue + [1 1] @t + [1]
[0 1] [0 1] [1]
>= [1 0] @queue + [1 1] @t + [1]
[0 0] [0 0] [0]
= enqueue#1(@queue,@t)
enqueue#1(tuple#2(@outq,@inq),@t) = [1 0] @inq + [1 0] @outq + [1 1] @t + [1]
[0 0] [0 0] [0 0] [0]
>= [1 0] @inq + [1 0] @outq + [1 1] @t + [1]
[0 0] [0 0] [0 0] [0]
= tuple#2(@outq,::(@t,@inq))
reverse(@xs) = [1 0] @xs + [0]
[1 0] [1]
>= [1 0] @xs + [0]
[0 0] [0]
= appendreverse(@xs,nil())
********* Step 9.b:7.b:1.b:1.b:1.b:1.b:1.b:3.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
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#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
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/1,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:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
********* Step 9.b:7.b:1.b:1.b:1.b:1.b:1.b:3.b:1: RemoveWeakSuffixes 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/1,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:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
-->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):2
2: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):3
3: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):5
-->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):4
4:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):1
5: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):7
-->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):6
6:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
-->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):1
7:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
-->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):11
8:W: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)):9
9:W: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))):10
10:W:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)))
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):8
11:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2)
-->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):13
-->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):12
12:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil())
-->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):8
13:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2)
-->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):11
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc)
6: bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y))
5: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)
3: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue)
2: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue)
4: bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc)
7: bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y)
11: matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2)
13: matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2)
12: matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil())
8: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m))
10: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)))
9: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs))
********* Step 9.b:7.b:1.b:1.b:1.b:1.b:1.b:3.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- 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/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).
WORST_CASE(?,O(n^3))