* Step 1: Sum WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict TRS:
#abs(#0()) -> #0()
#abs(#neg(@x)) -> #pos(@x)
#abs(#pos(@x)) -> #pos(@x)
#abs(#s(@x)) -> #pos(#s(@x))
*(@x,@y) -> #mult(@x,@y)
+(@x,@y) -> #add(@x,@y)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
m1(@x) -> ::(::(#abs(#pos(#s(#0()))),::(#abs(#pos(#s(#s(#0())))),::(#abs(#pos(#s(#s(#s(#0()))))),nil())))
,::(::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0()))))),::(#abs(#pos(#s(#s(#s(#s(#0())))))),nil())))
,nil()))
m2(@x) -> ::(::(#abs(#pos(#s(#0()))),::(#abs(#pos(#s(#s(#0())))),nil()))
,::(::(#abs(#pos(#s(#s(#0())))),::(#abs(#pos(#s(#s(#s(#0()))))),nil()))
,::(::(#abs(#pos(#s(#s(#s(#s(#0())))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))
,nil())))
m3(@x) -> ::(::(#abs(#pos(#s(#0())))
,::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0()))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))))
,::(::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0())))))
,::(#abs(#pos(#s(#s(#s(#s(#0())))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))))
,nil()))
m4(@x) -> ::(::(#abs(#pos(#s(#0()))),nil())
,::(::(#abs(#pos(#s(#s(#0())))),nil())
,::(::(#abs(#pos(#s(#s(#s(#0()))))),nil())
,::(::(#abs(#pos(#s(#s(#s(#s(#0())))))),nil()),nil()))))
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
matrixMult3(@m1,@m2,@m3) -> matrixMult(matrixMult(@m1,@m2),@m3)
matrixMultList(@acc,@mm) -> matrixMultList#1(@mm,@acc)
matrixMultList#1(::(@m,@ms),@acc) -> matrixMultList(matrixMult(@acc,@m),@ms)
matrixMultList#1(nil(),@acc) -> @acc
matrixMultOld(@m1,@m2) -> matrixMult'(@m1,transpose(@m2))
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
transpose'(@m) -> transAcc(@m,makeBase(@m))
- 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:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs,#add,#mult,#natmult,#pred,#succ,*,+,attach,attach#1
,attach#2,lineMult,lineMult#1,m1,m2,m3,m4,makeBase,makeBase#1,matrixMult,matrixMult',matrixMult'#1
,matrixMult3,matrixMultList,matrixMultList#1,matrixMultOld,mkBase,mkBase#1,mult,mult#1,mult#2,split,split#1
,split#2,split#3,transAcc,transAcc#1,transpose,transpose#1,transpose#2,transpose#3
,transpose'} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Sum {left = someStrategy, right = someStrategy}
+ Details:
()
* Step 2: DependencyPairs WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict TRS:
#abs(#0()) -> #0()
#abs(#neg(@x)) -> #pos(@x)
#abs(#pos(@x)) -> #pos(@x)
#abs(#s(@x)) -> #pos(#s(@x))
*(@x,@y) -> #mult(@x,@y)
+(@x,@y) -> #add(@x,@y)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
m1(@x) -> ::(::(#abs(#pos(#s(#0()))),::(#abs(#pos(#s(#s(#0())))),::(#abs(#pos(#s(#s(#s(#0()))))),nil())))
,::(::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0()))))),::(#abs(#pos(#s(#s(#s(#s(#0())))))),nil())))
,nil()))
m2(@x) -> ::(::(#abs(#pos(#s(#0()))),::(#abs(#pos(#s(#s(#0())))),nil()))
,::(::(#abs(#pos(#s(#s(#0())))),::(#abs(#pos(#s(#s(#s(#0()))))),nil()))
,::(::(#abs(#pos(#s(#s(#s(#s(#0())))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))
,nil())))
m3(@x) -> ::(::(#abs(#pos(#s(#0())))
,::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0()))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))))
,::(::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0())))))
,::(#abs(#pos(#s(#s(#s(#s(#0())))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))))
,nil()))
m4(@x) -> ::(::(#abs(#pos(#s(#0()))),nil())
,::(::(#abs(#pos(#s(#s(#0())))),nil())
,::(::(#abs(#pos(#s(#s(#s(#0()))))),nil())
,::(::(#abs(#pos(#s(#s(#s(#s(#0())))))),nil()),nil()))))
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
matrixMult3(@m1,@m2,@m3) -> matrixMult(matrixMult(@m1,@m2),@m3)
matrixMultList(@acc,@mm) -> matrixMultList#1(@mm,@acc)
matrixMultList#1(::(@m,@ms),@acc) -> matrixMultList(matrixMult(@acc,@m),@ms)
matrixMultList#1(nil(),@acc) -> @acc
matrixMultOld(@m1,@m2) -> matrixMult'(@m1,transpose(@m2))
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
transpose'(@m) -> transAcc(@m,makeBase(@m))
- 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:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs,#add,#mult,#natmult,#pred,#succ,*,+,attach,attach#1
,attach#2,lineMult,lineMult#1,m1,m2,m3,m4,makeBase,makeBase#1,matrixMult,matrixMult',matrixMult'#1
,matrixMult3,matrixMultList,matrixMultList#1,matrixMultOld,mkBase,mkBase#1,mult,mult#1,mult#2,split,split#1
,split#2,split#3,transAcc,transAcc#1,transpose,transpose#1,transpose#2,transpose#3
,transpose'} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
DependencyPairs {dpKind_ = DT}
+ Details:
We add the following dependency tuples:
Strict DPs
#abs#(#0()) -> c_1()
#abs#(#neg(@x)) -> c_2()
#abs#(#pos(@x)) -> c_3()
#abs#(#s(@x)) -> c_4()
*#(@x,@y) -> c_5(#mult#(@x,@y))
+#(@x,@y) -> c_6(#add#(@x,@y))
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#1#(nil(),@m) -> c_9()
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
attach#2#(nil(),@x,@xs) -> c_11()
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
lineMult#1#(nil(),@l) -> c_14()
m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
makeBase#1#(nil()) -> c_21()
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult'#1#(nil(),@m2) -> c_25()
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultList#1#(nil(),@acc) -> c_29()
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mkBase#1#(nil()) -> c_33()
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#1#(nil()) -> c_41()
split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
split#2#(nil(),@ls) -> c_43()
split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transAcc#1#(nil(),@base) -> c_47()
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#1#(nil(),@m) -> c_50()
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose#3#(nil(),@l) -> c_53()
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
Weak DPs
#add#(#0(),@y) -> c_55()
#add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
#add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
#add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#mult#(#0(),#0()) -> c_60()
#mult#(#0(),#neg(@y)) -> c_61()
#mult#(#0(),#pos(@y)) -> c_62()
#mult#(#neg(@x),#0()) -> c_63()
#mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
#mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
#mult#(#pos(@x),#0()) -> c_66()
#mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
#mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
#natmult#(#0(),@y) -> c_69()
#natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
#pred#(#0()) -> c_71()
#pred#(#neg(#s(@x))) -> c_72()
#pred#(#pos(#s(#0()))) -> c_73()
#pred#(#pos(#s(#s(@x)))) -> c_74()
#succ#(#0()) -> c_75()
#succ#(#neg(#s(#0()))) -> c_76()
#succ#(#neg(#s(#s(@x)))) -> c_77()
#succ#(#pos(#s(@x))) -> c_78()
and mark the set of starting terms.
* Step 3: UsableRules WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
#abs#(#0()) -> c_1()
#abs#(#neg(@x)) -> c_2()
#abs#(#pos(@x)) -> c_3()
#abs#(#s(@x)) -> c_4()
*#(@x,@y) -> c_5(#mult#(@x,@y))
+#(@x,@y) -> c_6(#add#(@x,@y))
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#1#(nil(),@m) -> c_9()
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
attach#2#(nil(),@x,@xs) -> c_11()
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
lineMult#1#(nil(),@l) -> c_14()
m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
makeBase#1#(nil()) -> c_21()
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult'#1#(nil(),@m2) -> c_25()
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultList#1#(nil(),@acc) -> c_29()
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mkBase#1#(nil()) -> c_33()
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#1#(nil()) -> c_41()
split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
split#2#(nil(),@ls) -> c_43()
split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transAcc#1#(nil(),@base) -> c_47()
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#1#(nil(),@m) -> c_50()
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose#3#(nil(),@l) -> c_53()
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
#add#(#0(),@y) -> c_55()
#add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
#add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
#add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#mult#(#0(),#0()) -> c_60()
#mult#(#0(),#neg(@y)) -> c_61()
#mult#(#0(),#pos(@y)) -> c_62()
#mult#(#neg(@x),#0()) -> c_63()
#mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
#mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
#mult#(#pos(@x),#0()) -> c_66()
#mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
#mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
#natmult#(#0(),@y) -> c_69()
#natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
#pred#(#0()) -> c_71()
#pred#(#neg(#s(@x))) -> c_72()
#pred#(#pos(#s(#0()))) -> c_73()
#pred#(#pos(#s(#s(@x)))) -> c_74()
#succ#(#0()) -> c_75()
#succ#(#neg(#s(#0()))) -> c_76()
#succ#(#neg(#s(#s(@x)))) -> c_77()
#succ#(#pos(#s(@x))) -> c_78()
- Weak TRS:
#abs(#0()) -> #0()
#abs(#neg(@x)) -> #pos(@x)
#abs(#pos(@x)) -> #pos(@x)
#abs(#s(@x)) -> #pos(#s(@x))
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
m1(@x) -> ::(::(#abs(#pos(#s(#0()))),::(#abs(#pos(#s(#s(#0())))),::(#abs(#pos(#s(#s(#s(#0()))))),nil())))
,::(::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0()))))),::(#abs(#pos(#s(#s(#s(#s(#0())))))),nil())))
,nil()))
m2(@x) -> ::(::(#abs(#pos(#s(#0()))),::(#abs(#pos(#s(#s(#0())))),nil()))
,::(::(#abs(#pos(#s(#s(#0())))),::(#abs(#pos(#s(#s(#s(#0()))))),nil()))
,::(::(#abs(#pos(#s(#s(#s(#s(#0())))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))
,nil())))
m3(@x) -> ::(::(#abs(#pos(#s(#0())))
,::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0()))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))))
,::(::(#abs(#pos(#s(#s(#0()))))
,::(#abs(#pos(#s(#s(#s(#0())))))
,::(#abs(#pos(#s(#s(#s(#s(#0())))))),::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))),nil()))))
,nil()))
m4(@x) -> ::(::(#abs(#pos(#s(#0()))),nil())
,::(::(#abs(#pos(#s(#s(#0())))),nil())
,::(::(#abs(#pos(#s(#s(#s(#0()))))),nil())
,::(::(#abs(#pos(#s(#s(#s(#s(#0())))))),nil()),nil()))))
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
matrixMult3(@m1,@m2,@m3) -> matrixMult(matrixMult(@m1,@m2),@m3)
matrixMultList(@acc,@mm) -> matrixMultList#1(@mm,@acc)
matrixMultList#1(::(@m,@ms),@acc) -> matrixMultList(matrixMult(@acc,@m),@ms)
matrixMultList#1(nil(),@acc) -> @acc
matrixMultOld(@m1,@m2) -> matrixMult'(@m1,transpose(@m2))
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
transpose'(@m) -> transAcc(@m,makeBase(@m))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/3
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/2,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
#abs#(#0()) -> c_1()
#abs#(#neg(@x)) -> c_2()
#abs#(#pos(@x)) -> c_3()
#abs#(#s(@x)) -> c_4()
#add#(#0(),@y) -> c_55()
#add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
#add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
#add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#mult#(#0(),#0()) -> c_60()
#mult#(#0(),#neg(@y)) -> c_61()
#mult#(#0(),#pos(@y)) -> c_62()
#mult#(#neg(@x),#0()) -> c_63()
#mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
#mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
#mult#(#pos(@x),#0()) -> c_66()
#mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
#mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
#natmult#(#0(),@y) -> c_69()
#natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
#pred#(#0()) -> c_71()
#pred#(#neg(#s(@x))) -> c_72()
#pred#(#pos(#s(#0()))) -> c_73()
#pred#(#pos(#s(#s(@x)))) -> c_74()
#succ#(#0()) -> c_75()
#succ#(#neg(#s(#0()))) -> c_76()
#succ#(#neg(#s(#s(@x)))) -> c_77()
#succ#(#pos(#s(@x))) -> c_78()
*#(@x,@y) -> c_5(#mult#(@x,@y))
+#(@x,@y) -> c_6(#add#(@x,@y))
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#1#(nil(),@m) -> c_9()
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
attach#2#(nil(),@x,@xs) -> c_11()
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
lineMult#1#(nil(),@l) -> c_14()
m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
makeBase#1#(nil()) -> c_21()
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult'#1#(nil(),@m2) -> c_25()
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultList#1#(nil(),@acc) -> c_29()
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mkBase#1#(nil()) -> c_33()
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#1#(nil()) -> c_41()
split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
split#2#(nil(),@ls) -> c_43()
split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transAcc#1#(nil(),@base) -> c_47()
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#1#(nil(),@m) -> c_50()
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose#3#(nil(),@l) -> c_53()
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
* Step 4: PredecessorEstimation WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
#abs#(#0()) -> c_1()
#abs#(#neg(@x)) -> c_2()
#abs#(#pos(@x)) -> c_3()
#abs#(#s(@x)) -> c_4()
*#(@x,@y) -> c_5(#mult#(@x,@y))
+#(@x,@y) -> c_6(#add#(@x,@y))
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#1#(nil(),@m) -> c_9()
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
attach#2#(nil(),@x,@xs) -> c_11()
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
lineMult#1#(nil(),@l) -> c_14()
m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
makeBase#1#(nil()) -> c_21()
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult'#1#(nil(),@m2) -> c_25()
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultList#1#(nil(),@acc) -> c_29()
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mkBase#1#(nil()) -> c_33()
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#1#(nil()) -> c_41()
split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
split#2#(nil(),@ls) -> c_43()
split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transAcc#1#(nil(),@base) -> c_47()
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#1#(nil(),@m) -> c_50()
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose#3#(nil(),@l) -> c_53()
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
#add#(#0(),@y) -> c_55()
#add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
#add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
#add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#mult#(#0(),#0()) -> c_60()
#mult#(#0(),#neg(@y)) -> c_61()
#mult#(#0(),#pos(@y)) -> c_62()
#mult#(#neg(@x),#0()) -> c_63()
#mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
#mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
#mult#(#pos(@x),#0()) -> c_66()
#mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
#mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
#natmult#(#0(),@y) -> c_69()
#natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
#pred#(#0()) -> c_71()
#pred#(#neg(#s(@x))) -> c_72()
#pred#(#pos(#s(#0()))) -> c_73()
#pred#(#pos(#s(#s(@x)))) -> c_74()
#succ#(#0()) -> c_75()
#succ#(#neg(#s(#0()))) -> c_76()
#succ#(#neg(#s(#s(@x)))) -> c_77()
#succ#(#pos(#s(@x))) -> c_78()
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/3
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/2,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{1,2,3,4,5,6,9,11,14,21,25,29,33,41,43,44,47,50,53}
by application of
Pre({1,2,3,4,5,6,9,11,14,21,25,29,33,41,43,44,47,50,53}) = {7,8,12,15,16,17,18,19,23,27,31,36,37,38,39,40
,42,45,48,51}.
Here rules are labelled as follows:
1: #abs#(#0()) -> c_1()
2: #abs#(#neg(@x)) -> c_2()
3: #abs#(#pos(@x)) -> c_3()
4: #abs#(#s(@x)) -> c_4()
5: *#(@x,@y) -> c_5(#mult#(@x,@y))
6: +#(@x,@y) -> c_6(#add#(@x,@y))
7: attach#(@line,@m) -> c_7(attach#1#(@line,@m))
8: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
9: attach#1#(nil(),@m) -> c_9()
10: attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
11: attach#2#(nil(),@x,@xs) -> c_11()
12: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
13: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
14: lineMult#1#(nil(),@l) -> c_14()
15: m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
16: m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
17: m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
18: m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
19: makeBase#(@m) -> c_19(makeBase#1#(@m))
20: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
21: makeBase#1#(nil()) -> c_21()
22: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
23: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
24: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
25: matrixMult'#1#(nil(),@m2) -> c_25()
26: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
27: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
28: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
29: matrixMultList#1#(nil(),@acc) -> c_29()
30: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
31: mkBase#(@m) -> c_31(mkBase#1#(@m))
32: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
33: mkBase#1#(nil()) -> c_33()
34: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
35: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
36: mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
37: mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
38: mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
39: split#(@m) -> c_39(split#1#(@m))
40: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
41: split#1#(nil()) -> c_41()
42: split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
43: split#2#(nil(),@ls) -> c_43()
44: split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
45: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
46: transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
47: transAcc#1#(nil(),@base) -> c_47()
48: transpose#(@m) -> c_48(transpose#1#(@m,@m))
49: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
50: transpose#1#(nil(),@m) -> c_50()
51: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
52: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
53: transpose#3#(nil(),@l) -> c_53()
54: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
55: #add#(#0(),@y) -> c_55()
56: #add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
57: #add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
58: #add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
59: #add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
60: #mult#(#0(),#0()) -> c_60()
61: #mult#(#0(),#neg(@y)) -> c_61()
62: #mult#(#0(),#pos(@y)) -> c_62()
63: #mult#(#neg(@x),#0()) -> c_63()
64: #mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
65: #mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
66: #mult#(#pos(@x),#0()) -> c_66()
67: #mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
68: #mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
69: #natmult#(#0(),@y) -> c_69()
70: #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
71: #pred#(#0()) -> c_71()
72: #pred#(#neg(#s(@x))) -> c_72()
73: #pred#(#pos(#s(#0()))) -> c_73()
74: #pred#(#pos(#s(#s(@x)))) -> c_74()
75: #succ#(#0()) -> c_75()
76: #succ#(#neg(#s(#0()))) -> c_76()
77: #succ#(#neg(#s(#s(@x)))) -> c_77()
78: #succ#(#pos(#s(@x))) -> c_78()
* Step 5: PredecessorEstimation WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
#abs#(#0()) -> c_1()
#abs#(#neg(@x)) -> c_2()
#abs#(#pos(@x)) -> c_3()
#abs#(#s(@x)) -> c_4()
#add#(#0(),@y) -> c_55()
#add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
#add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
#add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#mult#(#0(),#0()) -> c_60()
#mult#(#0(),#neg(@y)) -> c_61()
#mult#(#0(),#pos(@y)) -> c_62()
#mult#(#neg(@x),#0()) -> c_63()
#mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
#mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
#mult#(#pos(@x),#0()) -> c_66()
#mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
#mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
#natmult#(#0(),@y) -> c_69()
#natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
#pred#(#0()) -> c_71()
#pred#(#neg(#s(@x))) -> c_72()
#pred#(#pos(#s(#0()))) -> c_73()
#pred#(#pos(#s(#s(@x)))) -> c_74()
#succ#(#0()) -> c_75()
#succ#(#neg(#s(#0()))) -> c_76()
#succ#(#neg(#s(#s(@x)))) -> c_77()
#succ#(#pos(#s(@x))) -> c_78()
*#(@x,@y) -> c_5(#mult#(@x,@y))
+#(@x,@y) -> c_6(#add#(@x,@y))
attach#1#(nil(),@m) -> c_9()
attach#2#(nil(),@x,@xs) -> c_11()
lineMult#1#(nil(),@l) -> c_14()
makeBase#1#(nil()) -> c_21()
matrixMult'#1#(nil(),@m2) -> c_25()
matrixMultList#1#(nil(),@acc) -> c_29()
mkBase#1#(nil()) -> c_33()
split#1#(nil()) -> c_41()
split#2#(nil(),@ls) -> c_43()
split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
transAcc#1#(nil(),@base) -> c_47()
transpose#1#(nil(),@m) -> c_50()
transpose#3#(nil(),@l) -> c_53()
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/3
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/2,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{6,7,8,9,23,25}
by application of
Pre({6,7,8,9,23,25}) = {21,22}.
Here rules are labelled as follows:
1: attach#(@line,@m) -> c_7(attach#1#(@line,@m))
2: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
3: attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
4: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
5: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
6: m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
7: m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
8: m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
9: m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
10: makeBase#(@m) -> c_19(makeBase#1#(@m))
11: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
12: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
13: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
14: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
15: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
16: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
17: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
18: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
19: mkBase#(@m) -> c_31(mkBase#1#(@m))
20: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
21: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
22: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
23: mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
24: mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
25: mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
26: split#(@m) -> c_39(split#1#(@m))
27: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
28: split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
29: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
30: transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
31: transpose#(@m) -> c_48(transpose#1#(@m,@m))
32: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
33: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
34: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
35: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
36: #abs#(#0()) -> c_1()
37: #abs#(#neg(@x)) -> c_2()
38: #abs#(#pos(@x)) -> c_3()
39: #abs#(#s(@x)) -> c_4()
40: #add#(#0(),@y) -> c_55()
41: #add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
42: #add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
43: #add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
44: #add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
45: #mult#(#0(),#0()) -> c_60()
46: #mult#(#0(),#neg(@y)) -> c_61()
47: #mult#(#0(),#pos(@y)) -> c_62()
48: #mult#(#neg(@x),#0()) -> c_63()
49: #mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
50: #mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
51: #mult#(#pos(@x),#0()) -> c_66()
52: #mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
53: #mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
54: #natmult#(#0(),@y) -> c_69()
55: #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
56: #pred#(#0()) -> c_71()
57: #pred#(#neg(#s(@x))) -> c_72()
58: #pred#(#pos(#s(#0()))) -> c_73()
59: #pred#(#pos(#s(#s(@x)))) -> c_74()
60: #succ#(#0()) -> c_75()
61: #succ#(#neg(#s(#0()))) -> c_76()
62: #succ#(#neg(#s(#s(@x)))) -> c_77()
63: #succ#(#pos(#s(@x))) -> c_78()
64: *#(@x,@y) -> c_5(#mult#(@x,@y))
65: +#(@x,@y) -> c_6(#add#(@x,@y))
66: attach#1#(nil(),@m) -> c_9()
67: attach#2#(nil(),@x,@xs) -> c_11()
68: lineMult#1#(nil(),@l) -> c_14()
69: makeBase#1#(nil()) -> c_21()
70: matrixMult'#1#(nil(),@m2) -> c_25()
71: matrixMultList#1#(nil(),@acc) -> c_29()
72: mkBase#1#(nil()) -> c_33()
73: split#1#(nil()) -> c_41()
74: split#2#(nil(),@ls) -> c_43()
75: split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
76: transAcc#1#(nil(),@base) -> c_47()
77: transpose#1#(nil(),@m) -> c_50()
78: transpose#3#(nil(),@l) -> c_53()
* Step 6: RemoveWeakSuffixes WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
#abs#(#0()) -> c_1()
#abs#(#neg(@x)) -> c_2()
#abs#(#pos(@x)) -> c_3()
#abs#(#s(@x)) -> c_4()
#add#(#0(),@y) -> c_55()
#add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
#add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
#add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
#mult#(#0(),#0()) -> c_60()
#mult#(#0(),#neg(@y)) -> c_61()
#mult#(#0(),#pos(@y)) -> c_62()
#mult#(#neg(@x),#0()) -> c_63()
#mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
#mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
#mult#(#pos(@x),#0()) -> c_66()
#mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
#mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
#natmult#(#0(),@y) -> c_69()
#natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
#pred#(#0()) -> c_71()
#pred#(#neg(#s(@x))) -> c_72()
#pred#(#pos(#s(#0()))) -> c_73()
#pred#(#pos(#s(#s(@x)))) -> c_74()
#succ#(#0()) -> c_75()
#succ#(#neg(#s(#0()))) -> c_76()
#succ#(#neg(#s(#s(@x)))) -> c_77()
#succ#(#pos(#s(@x))) -> c_78()
*#(@x,@y) -> c_5(#mult#(@x,@y))
+#(@x,@y) -> c_6(#add#(@x,@y))
attach#1#(nil(),@m) -> c_9()
attach#2#(nil(),@x,@xs) -> c_11()
lineMult#1#(nil(),@l) -> c_14()
m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
makeBase#1#(nil()) -> c_21()
matrixMult'#1#(nil(),@m2) -> c_25()
matrixMultList#1#(nil(),@acc) -> c_29()
mkBase#1#(nil()) -> c_33()
mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
split#1#(nil()) -> c_41()
split#2#(nil(),@ls) -> c_43()
split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
transAcc#1#(nil(),@base) -> c_47()
transpose#1#(nil(),@m) -> c_50()
transpose#3#(nil(),@l) -> c_53()
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/3
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/2,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:attach#(@line,@m) -> c_7(attach#1#(@line,@m))
-->_1 attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)):2
-->_1 attach#1#(nil(),@m) -> c_9():60
2:S:attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
-->_1 attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls)):3
-->_1 attach#2#(nil(),@x,@xs) -> c_11():61
3:S:attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
4:S:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):5
-->_1 lineMult#1#(nil(),@l) -> c_14():62
5:S:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):17
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4
6:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):7
-->_1 makeBase#1#(nil()) -> c_21():67
7:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):15
8:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):6
9:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):10
-->_1 matrixMult'#1#(nil(),@m2) -> c_25():68
10:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4
11:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
12:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):13
-->_1 matrixMultList#1#(nil(),@acc) -> c_29():69
13:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):12
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
14:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):25
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
15:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):16
-->_1 mkBase#1#(nil()) -> c_33():70
16:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):15
17:S:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(nil(),@l2) -> c_36(#abs#(#0())):71
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):18
18:S:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0())):72
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys)):19
19:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
-->_1 +#(@x,@y) -> c_6(#add#(@x,@y)):59
-->_2 *#(@x,@y) -> c_5(#mult#(@x,@y)):58
-->_3 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):17
20:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):21
-->_1 split#1#(nil()) -> c_41():73
21:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls)):22
-->_1 split#2#(nil(),@ls) -> c_43():74
22:S:split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
-->_1 split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44():75
-->_2 split#(@m) -> c_39(split#1#(@m)):20
23:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):24
-->_1 transAcc#1#(nil(),@base) -> c_47():76
24:S:transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
25:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):26
-->_1 transpose#1#(nil(),@m) -> c_50():77
26:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):27
-->_2 split#(@m) -> c_39(split#1#(@m)):20
27:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):28
-->_1 transpose#3#(nil(),@l) -> c_53():78
28:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):25
29:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):6
30:W:#abs#(#0()) -> c_1()
31:W:#abs#(#neg(@x)) -> c_2()
32:W:#abs#(#pos(@x)) -> c_3()
33:W:#abs#(#s(@x)) -> c_4()
34:W:#add#(#0(),@y) -> c_55()
35:W:#add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
-->_1 #pred#(#pos(#s(#s(@x)))) -> c_74():53
-->_1 #pred#(#pos(#s(#0()))) -> c_73():52
-->_1 #pred#(#neg(#s(@x))) -> c_72():51
-->_1 #pred#(#0()) -> c_71():50
36:W:#add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
-->_2 #add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):38
-->_2 #add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y)):37
-->_1 #pred#(#pos(#s(#s(@x)))) -> c_74():53
-->_1 #pred#(#pos(#s(#0()))) -> c_73():52
-->_1 #pred#(#neg(#s(@x))) -> c_72():51
-->_1 #pred#(#0()) -> c_71():50
37:W:#add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
-->_1 #succ#(#pos(#s(@x))) -> c_78():57
-->_1 #succ#(#neg(#s(#s(@x)))) -> c_77():56
-->_1 #succ#(#neg(#s(#0()))) -> c_76():55
-->_1 #succ#(#0()) -> c_75():54
38:W:#add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
-->_1 #succ#(#pos(#s(@x))) -> c_78():57
-->_1 #succ#(#neg(#s(#s(@x)))) -> c_77():56
-->_1 #succ#(#neg(#s(#0()))) -> c_76():55
-->_1 #succ#(#0()) -> c_75():54
-->_2 #add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):38
-->_2 #add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y)):37
39:W:#mult#(#0(),#0()) -> c_60()
40:W:#mult#(#0(),#neg(@y)) -> c_61()
41:W:#mult#(#0(),#pos(@y)) -> c_62()
42:W:#mult#(#neg(@x),#0()) -> c_63()
43:W:#mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
-->_1 #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):49
-->_1 #natmult#(#0(),@y) -> c_69():48
44:W:#mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
-->_1 #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):49
-->_1 #natmult#(#0(),@y) -> c_69():48
45:W:#mult#(#pos(@x),#0()) -> c_66()
46:W:#mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
-->_1 #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):49
-->_1 #natmult#(#0(),@y) -> c_69():48
47:W:#mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
-->_1 #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):49
-->_1 #natmult#(#0(),@y) -> c_69():48
48:W:#natmult#(#0(),@y) -> c_69()
49:W:#natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
-->_2 #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):49
-->_2 #natmult#(#0(),@y) -> c_69():48
-->_1 #add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):38
-->_1 #add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y)):37
50:W:#pred#(#0()) -> c_71()
51:W:#pred#(#neg(#s(@x))) -> c_72()
52:W:#pred#(#pos(#s(#0()))) -> c_73()
53:W:#pred#(#pos(#s(#s(@x)))) -> c_74()
54:W:#succ#(#0()) -> c_75()
55:W:#succ#(#neg(#s(#0()))) -> c_76()
56:W:#succ#(#neg(#s(#s(@x)))) -> c_77()
57:W:#succ#(#pos(#s(@x))) -> c_78()
58:W:*#(@x,@y) -> c_5(#mult#(@x,@y))
-->_1 #mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y)):47
-->_1 #mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y)):46
-->_1 #mult#(#pos(@x),#0()) -> c_66():45
-->_1 #mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y)):44
-->_1 #mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y)):43
-->_1 #mult#(#neg(@x),#0()) -> c_63():42
-->_1 #mult#(#0(),#pos(@y)) -> c_62():41
-->_1 #mult#(#0(),#neg(@y)) -> c_61():40
-->_1 #mult#(#0(),#0()) -> c_60():39
59:W:+#(@x,@y) -> c_6(#add#(@x,@y))
-->_1 #add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):38
-->_1 #add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y)):37
-->_1 #add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):36
-->_1 #add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y)):35
-->_1 #add#(#0(),@y) -> c_55():34
60:W:attach#1#(nil(),@m) -> c_9()
61:W:attach#2#(nil(),@x,@xs) -> c_11()
62:W:lineMult#1#(nil(),@l) -> c_14()
63:W:m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
-->_6 #abs#(#pos(@x)) -> c_3():32
-->_5 #abs#(#pos(@x)) -> c_3():32
-->_4 #abs#(#pos(@x)) -> c_3():32
-->_3 #abs#(#pos(@x)) -> c_3():32
-->_2 #abs#(#pos(@x)) -> c_3():32
-->_1 #abs#(#pos(@x)) -> c_3():32
64:W:m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
-->_6 #abs#(#pos(@x)) -> c_3():32
-->_5 #abs#(#pos(@x)) -> c_3():32
-->_4 #abs#(#pos(@x)) -> c_3():32
-->_3 #abs#(#pos(@x)) -> c_3():32
-->_2 #abs#(#pos(@x)) -> c_3():32
-->_1 #abs#(#pos(@x)) -> c_3():32
65:W:m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
-->_8 #abs#(#pos(@x)) -> c_3():32
-->_7 #abs#(#pos(@x)) -> c_3():32
-->_6 #abs#(#pos(@x)) -> c_3():32
-->_5 #abs#(#pos(@x)) -> c_3():32
-->_4 #abs#(#pos(@x)) -> c_3():32
-->_3 #abs#(#pos(@x)) -> c_3():32
-->_2 #abs#(#pos(@x)) -> c_3():32
-->_1 #abs#(#pos(@x)) -> c_3():32
66:W:m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
-->_4 #abs#(#pos(@x)) -> c_3():32
-->_3 #abs#(#pos(@x)) -> c_3():32
-->_2 #abs#(#pos(@x)) -> c_3():32
-->_1 #abs#(#pos(@x)) -> c_3():32
67:W:makeBase#1#(nil()) -> c_21()
68:W:matrixMult'#1#(nil(),@m2) -> c_25()
69:W:matrixMultList#1#(nil(),@acc) -> c_29()
70:W:mkBase#1#(nil()) -> c_33()
71:W:mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
-->_1 #abs#(#0()) -> c_1():30
72:W:mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
-->_1 #abs#(#0()) -> c_1():30
73:W:split#1#(nil()) -> c_41()
74:W:split#2#(nil(),@ls) -> c_43()
75:W:split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
76:W:transAcc#1#(nil(),@base) -> c_47()
77:W:transpose#1#(nil(),@m) -> c_50()
78:W:transpose#3#(nil(),@l) -> c_53()
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
66: m4#(@x) -> c_18(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
65: m3#(@x) -> c_17(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0())))))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
64: m2#(@x) -> c_16(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0()))))))
,#abs#(#pos(#s(#s(#s(#s(#s(#0()))))))))
63: m1#(@x) -> c_15(#abs#(#pos(#s(#0())))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#0()))))
,#abs#(#pos(#s(#s(#s(#0())))))
,#abs#(#pos(#s(#s(#s(#s(#0())))))))
33: #abs#(#s(@x)) -> c_4()
32: #abs#(#pos(@x)) -> c_3()
31: #abs#(#neg(@x)) -> c_2()
77: transpose#1#(nil(),@m) -> c_50()
73: split#1#(nil()) -> c_41()
74: split#2#(nil(),@ls) -> c_43()
75: split#3#(tuple#2(@ys,@m'),@x,@xs) -> c_44()
78: transpose#3#(nil(),@l) -> c_53()
69: matrixMultList#1#(nil(),@acc) -> c_29()
68: matrixMult'#1#(nil(),@m2) -> c_25()
76: transAcc#1#(nil(),@base) -> c_47()
67: makeBase#1#(nil()) -> c_21()
70: mkBase#1#(nil()) -> c_33()
62: lineMult#1#(nil(),@l) -> c_14()
58: *#(@x,@y) -> c_5(#mult#(@x,@y))
39: #mult#(#0(),#0()) -> c_60()
40: #mult#(#0(),#neg(@y)) -> c_61()
41: #mult#(#0(),#pos(@y)) -> c_62()
42: #mult#(#neg(@x),#0()) -> c_63()
43: #mult#(#neg(@x),#neg(@y)) -> c_64(#natmult#(@x,@y))
44: #mult#(#neg(@x),#pos(@y)) -> c_65(#natmult#(@x,@y))
45: #mult#(#pos(@x),#0()) -> c_66()
46: #mult#(#pos(@x),#neg(@y)) -> c_67(#natmult#(@x,@y))
47: #mult#(#pos(@x),#pos(@y)) -> c_68(#natmult#(@x,@y))
49: #natmult#(#s(@x),@y) -> c_70(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y))
48: #natmult#(#0(),@y) -> c_69()
59: +#(@x,@y) -> c_6(#add#(@x,@y))
34: #add#(#0(),@y) -> c_55()
35: #add#(#neg(#s(#0())),@y) -> c_56(#pred#(@y))
36: #add#(#neg(#s(#s(@x))),@y) -> c_57(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
50: #pred#(#0()) -> c_71()
51: #pred#(#neg(#s(@x))) -> c_72()
52: #pred#(#pos(#s(#0()))) -> c_73()
53: #pred#(#pos(#s(#s(@x)))) -> c_74()
38: #add#(#pos(#s(#s(@x))),@y) -> c_59(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y))
37: #add#(#pos(#s(#0())),@y) -> c_58(#succ#(@y))
54: #succ#(#0()) -> c_75()
55: #succ#(#neg(#s(#0()))) -> c_76()
56: #succ#(#neg(#s(#s(@x)))) -> c_77()
57: #succ#(#pos(#s(@x))) -> c_78()
72: mult#2#(nil(),@x,@xs) -> c_38(#abs#(#0()))
71: mult#1#(nil(),@l2) -> c_36(#abs#(#0()))
30: #abs#(#0()) -> c_1()
60: attach#1#(nil(),@m) -> c_9()
61: attach#2#(nil(),@x,@xs) -> c_11()
* Step 7: SimplifyRHS WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/3
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/2,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:attach#(@line,@m) -> c_7(attach#1#(@line,@m))
-->_1 attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)):2
2:S:attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
-->_1 attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls)):3
3:S:attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
4:S:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):5
5:S:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):17
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4
6:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):7
7:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):15
8:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):6
9:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):10
10:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4
11:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
12:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):13
13:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):12
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
14:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):25
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
15:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):16
16:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):15
17:S:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):18
18:S:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys)):19
19:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(+#(*(@x,@y),mult(@xs,@ys)),*#(@x,@y),mult#(@xs,@ys))
-->_3 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):17
20:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):21
21:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls)):22
22:S:split#2#(::(@x,@xs),@ls) -> c_42(split#3#(split(@ls),@x,@xs),split#(@ls))
-->_2 split#(@m) -> c_39(split#1#(@m)):20
23:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):24
24:S:transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
25:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):26
26:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):27
-->_2 split#(@m) -> c_39(split#1#(@m)):20
27:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):28
28:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):25
29:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):6
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
* Step 8: Decompose WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/3,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
Problem (S)
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/3,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
** Step 8.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:attach#(@line,@m) -> c_7(attach#1#(@line,@m))
-->_1 attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)):2
2:S:attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
-->_1 attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls)):3
3:S:attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
4:W:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):5
5:W:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):17
6:W:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):7
7:W:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):15
8:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):6
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
9:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):10
10:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
11:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
12:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):13
13:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):12
14:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):9
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):25
15:W:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):16
16:W:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):15
17:W:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):18
18:W:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)):19
19:W:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):17
20:W:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):21
21:W:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):22
22:W:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):20
23:W:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):24
24:W:transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
25:W:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):26
26:W:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_2 split#(@m) -> c_39(split#1#(@m)):20
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):27
27:W:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):28
28:W:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):25
29:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):6
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
14: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
25: transpose#(@m) -> c_48(transpose#1#(@m,@m))
28: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
27: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
26: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
20: split#(@m) -> c_39(split#1#(@m))
22: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
21: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
9: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
10: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
6: makeBase#(@m) -> c_19(makeBase#1#(@m))
7: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
15: mkBase#(@m) -> c_31(mkBase#1#(@m))
16: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
4: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
5: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
17: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
19: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
18: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
** Step 8.a:2: SimplifyRHS WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:attach#(@line,@m) -> c_7(attach#1#(@line,@m))
-->_1 attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)):2
2:S:attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
-->_1 attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls)):3
3:S:attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
8:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
11:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
12:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):13
13:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):8
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):12
23:W:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):24
24:W:transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
29:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):23
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
** Step 8.a:3: UsableRules WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
** Step 8.a:4: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
2: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
Consider the set of all dependency pairs
1: attach#(@line,@m) -> c_7(attach#1#(@line,@m))
2: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
3: attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
4: matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
5: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
6: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
7: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
8: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
9: transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
10: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
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
{2}
These cover all (indirect) predecessors of dependency pairs
{2,3,5,10}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
*** Step 8.a:4.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_26) = {1,2},
uargs(c_27) = {1},
uargs(c_28) = {1,2},
uargs(c_45) = {1},
uargs(c_46) = {1,2},
uargs(c_54) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [1]
[0]
p(#abs) = [0 0] x1 + [0]
[1 0] [0]
p(#add) = [0 0] x2 + [0]
[0 1] [0]
p(#mult) = [1 0] x1 + [0]
[1 0] [0]
p(#natmult) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [1 0] [0]
p(#neg) = [0]
[0]
p(#pos) = [0 1] x1 + [1]
[0 0] [0]
p(#pred) = [1]
[0]
p(#s) = [0]
[1]
p(#succ) = [0 1] x1 + [1]
[1 0] [0]
p(*) = [0]
[0]
p(+) = [1 1] x2 + [0]
[1 0] [1]
p(::) = [0 1] x1 + [0 0] x2 + [1]
[0 1] [0 1] [1]
p(attach) = [0]
[0]
p(attach#1) = [0]
[0]
p(attach#2) = [1 1] x1 + [0]
[0 1] [1]
p(lineMult) = [0 0] x2 + [0]
[1 0] [1]
p(lineMult#1) = [0 0] x1 + [0]
[1 0] [0]
p(m1) = [0]
[0]
p(m2) = [0]
[0]
p(m3) = [0]
[0]
p(m4) = [0]
[0]
p(makeBase) = [0]
[0]
p(makeBase#1) = [0 0] x1 + [0]
[1 0] [1]
p(matrixMult) = [0]
[0]
p(matrixMult') = [1 0] x2 + [0]
[1 0] [1]
p(matrixMult'#1) = [0]
[0]
p(matrixMult3) = [0]
[0]
p(matrixMultList) = [0]
[0]
p(matrixMultList#1) = [0]
[0]
p(matrixMultOld) = [0]
[0]
p(mkBase) = [0]
[0]
p(mkBase#1) = [1 0] x1 + [1]
[0 0] [0]
p(mult) = [0 1] x2 + [1]
[0 0] [1]
p(mult#1) = [0]
[0]
p(mult#2) = [0 0] x1 + [0]
[0 1] [1]
p(nil) = [0]
[1]
p(split) = [0]
[0]
p(split#1) = [0]
[0]
p(split#2) = [0]
[0]
p(split#3) = [0]
[0]
p(transAcc) = [0 0] x1 + [1]
[1 1] [0]
p(transAcc#1) = [0]
[1]
p(transpose) = [0]
[0]
p(transpose#1) = [0]
[0]
p(transpose#2) = [0]
[0]
p(transpose#3) = [0]
[0]
p(transpose') = [0]
[0]
p(tuple#2) = [0]
[0]
p(#abs#) = [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(attach#) = [0 1] x1 + [0]
[0 0] [1]
p(attach#1#) = [0 1] x1 + [0]
[1 1] [1]
p(attach#2#) = [0 0] x1 + [0 1] x3 + [0]
[1 0] [1 0] [1]
p(lineMult#) = [0]
[0]
p(lineMult#1#) = [0]
[0]
p(m1#) = [0]
[0]
p(m2#) = [0]
[0]
p(m3#) = [0]
[0]
p(m4#) = [0]
[0]
p(makeBase#) = [0]
[0]
p(makeBase#1#) = [0]
[0]
p(matrixMult#) = [0 1] x2 + [0]
[0 1] [1]
p(matrixMult'#) = [0]
[0]
p(matrixMult'#1#) = [0]
[0]
p(matrixMult3#) = [0 1] x2 + [1 1] x3 + [1]
[0 0] [0 1] [0]
p(matrixMultList#) = [0 1] x2 + [1]
[1 0] [0]
p(matrixMultList#1#) = [0 1] x1 + [1]
[0 0] [0]
p(matrixMultOld#) = [0]
[0]
p(mkBase#) = [0]
[0]
p(mkBase#1#) = [0]
[0]
p(mult#) = [0]
[0]
p(mult#1#) = [0]
[0]
p(mult#2#) = [0]
[0]
p(split#) = [0]
[0]
p(split#1#) = [0]
[0]
p(split#2#) = [0]
[0]
p(split#3#) = [0]
[0]
p(transAcc#) = [0 1] x1 + [0]
[0 1] [1]
p(transAcc#1#) = [0 1] x1 + [0]
[0 0] [1]
p(transpose#) = [0]
[0]
p(transpose#1#) = [0]
[0]
p(transpose#2#) = [0]
[0]
p(transpose#3#) = [0]
[0]
p(transpose'#) = [1 1] x1 + [1]
[0 1] [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 0] [0]
p(c_8) = [1 0] x1 + [0]
[0 0] [0]
p(c_9) = [0]
[0]
p(c_10) = [1 0] x1 + [0]
[0 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) = [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) = [1 0] x1 + [0]
[0 1] [0]
p(c_23) = [0]
[0]
p(c_24) = [0]
[0]
p(c_25) = [0]
[0]
p(c_26) = [1 0] x1 + [1 0] x2 + [1]
[1 0] [0 0] [0]
p(c_27) = [1 0] x1 + [0]
[0 0] [0]
p(c_28) = [1 0] x1 + [1 0] x2 + [1]
[0 0] [0 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) = [1 0] x1 + [0]
[1 1] [0]
p(c_46) = [1 0] x1 + [1 0] x2 + [1]
[0 0] [0 0] [1]
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) = [1 0] x1 + [1]
[0 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]
p(c_60) = [0]
[0]
p(c_61) = [0]
[0]
p(c_62) = [0]
[0]
p(c_63) = [0]
[0]
p(c_64) = [0]
[0]
p(c_65) = [0]
[0]
p(c_66) = [0]
[0]
p(c_67) = [0]
[0]
p(c_68) = [0]
[0]
p(c_69) = [0]
[0]
p(c_70) = [0]
[0]
p(c_71) = [0]
[0]
p(c_72) = [0]
[0]
p(c_73) = [0]
[0]
p(c_74) = [0]
[0]
p(c_75) = [0]
[0]
p(c_76) = [0]
[0]
p(c_77) = [0]
[0]
p(c_78) = [0]
[0]
Following rules are strictly oriented:
attach#1#(::(@x,@xs),@m) = [0 1] @x + [0 1] @xs + [1]
[0 2] [0 1] [3]
> [0 1] @xs + [0]
[0 0] [0]
= c_8(attach#2#(@m,@x,@xs))
Following rules are (at-least) weakly oriented:
attach#(@line,@m) = [0 1] @line + [0]
[0 0] [1]
>= [0 1] @line + [0]
[0 0] [0]
= c_7(attach#1#(@line,@m))
attach#2#(::(@l,@ls),@x,@xs) = [0 0] @l + [0 1] @xs + [0]
[0 1] [1 0] [2]
>= [0 1] @xs + [0]
[0 0] [0]
= c_10(attach#(@xs,@ls))
matrixMult#(@m1,@m2) = [0 1] @m2 + [0]
[0 1] [1]
>= [0 1] @m2 + [0]
[0 1] [1]
= c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) = [0 1] @m2 + [1 1] @m3 + [1]
[0 0] [0 1] [0]
>= [0 1] @m2 + [0 1] @m3 + [1]
[0 0] [0 1] [0]
= c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) = [0 1] @mm + [1]
[1 0] [0]
>= [0 1] @mm + [1]
[0 0] [0]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) = [0 1] @m + [0 1] @ms + [2]
[0 0] [0 0] [0]
>= [0 1] @m + [0 1] @ms + [2]
[0 0] [0 0] [0]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) = [0 1] @m + [0]
[0 1] [1]
>= [0 1] @m + [0]
[0 1] [1]
= c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) = [0 1] @l + [0 1] @m' + [1]
[0 0] [0 0] [1]
>= [0 1] @l + [0 1] @m' + [1]
[0 0] [0 0] [1]
= c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) = [1 1] @m + [1]
[0 1] [0]
>= [0 1] @m + [1]
[0 0] [0]
= c_54(transAcc#(@m,makeBase(@m)))
*** Step 8.a:4.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak DPs:
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
*** Step 8.a:4.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
- Weak DPs:
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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: attach#(@line,@m) -> c_7(attach#1#(@line,@m))
Consider the set of all dependency pairs
1: attach#(@line,@m) -> c_7(attach#1#(@line,@m))
2: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
3: attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
4: matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
5: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
6: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
7: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
8: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
9: transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
10: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
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,3,5,10}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
**** Step 8.a:4.b:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
- Weak DPs:
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_26) = {1,2},
uargs(c_27) = {1},
uargs(c_28) = {1,2},
uargs(c_45) = {1},
uargs(c_46) = {1,2},
uargs(c_54) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [2]
p(#abs) = [4] x1 + [0]
p(#add) = [1] x2 + [1]
p(#mult) = [4] x1 + [2] x2 + [0]
p(#natmult) = [0]
p(#neg) = [1] x1 + [0]
p(#pos) = [1] x1 + [2]
p(#pred) = [2] x1 + [6]
p(#s) = [0]
p(#succ) = [0]
p(*) = [0]
p(+) = [0]
p(::) = [1] x1 + [1] x2 + [1]
p(attach) = [0]
p(attach#1) = [0]
p(attach#2) = [0]
p(lineMult) = [0]
p(lineMult#1) = [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [0]
p(matrixMult) = [0]
p(matrixMult') = [0]
p(matrixMult'#1) = [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [0]
p(mkBase#1) = [0]
p(mult) = [0]
p(mult#1) = [0]
p(mult#2) = [0]
p(nil) = [1]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [0]
p(transAcc#1) = [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [2] x1 + [1]
p(attach#1#) = [2] x1 + [0]
p(attach#2#) = [2] x3 + [2]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [0]
p(makeBase#1#) = [0]
p(matrixMult#) = [4] x2 + [0]
p(matrixMult'#) = [0]
p(matrixMult'#1#) = [0]
p(matrixMult3#) = [4] x2 + [4] x3 + [1]
p(matrixMultList#) = [4] x2 + [0]
p(matrixMultList#1#) = [4] x1 + [0]
p(matrixMultOld#) = [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [4] x1 + [0]
p(transAcc#1#) = [4] x1 + [0]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [4] x1 + [2]
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) = [1] x1 + [0]
p(c_8) = [1] x1 + [0]
p(c_9) = [0]
p(c_10) = [1] x1 + [1]
p(c_11) = [2]
p(c_12) = [1]
p(c_13) = [1]
p(c_14) = [4]
p(c_15) = [1] x2 + [1] x6 + [1]
p(c_16) = [0]
p(c_17) = [2] x1 + [4] x3 + [1] x4 + [1] x7 + [1]
p(c_18) = [2] x1 + [4] x2 + [1] x3 + [1]
p(c_19) = [1] x1 + [2]
p(c_20) = [1] x1 + [4]
p(c_21) = [2]
p(c_22) = [1] x1 + [0]
p(c_23) = [1] x1 + [4]
p(c_24) = [2] x2 + [1]
p(c_25) = [0]
p(c_26) = [1] x1 + [1] x2 + [1]
p(c_27) = [1] x1 + [0]
p(c_28) = [1] x1 + [1] x2 + [4]
p(c_29) = [0]
p(c_30) = [4] x1 + [1] x2 + [1]
p(c_31) = [2]
p(c_32) = [4]
p(c_33) = [4]
p(c_34) = [1] x1 + [0]
p(c_35) = [1] x1 + [1]
p(c_36) = [1]
p(c_37) = [2]
p(c_38) = [1] x1 + [4]
p(c_39) = [4] x1 + [0]
p(c_40) = [1] x1 + [1]
p(c_41) = [1]
p(c_42) = [1] x1 + [1]
p(c_43) = [1]
p(c_44) = [0]
p(c_45) = [1] x1 + [0]
p(c_46) = [2] x1 + [1] x2 + [2]
p(c_47) = [1]
p(c_48) = [1] x1 + [0]
p(c_49) = [1] x1 + [0]
p(c_50) = [2]
p(c_51) = [2]
p(c_52) = [0]
p(c_53) = [2]
p(c_54) = [1] x1 + [2]
p(c_55) = [0]
p(c_56) = [1]
p(c_57) = [2] x1 + [0]
p(c_58) = [4] x1 + [1]
p(c_59) = [4]
p(c_60) = [1]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [2] x1 + [1]
p(c_66) = [1]
p(c_67) = [0]
p(c_68) = [1] x1 + [1]
p(c_69) = [1]
p(c_70) = [0]
p(c_71) = [1]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [1]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [1]
Following rules are strictly oriented:
attach#(@line,@m) = [2] @line + [1]
> [2] @line + [0]
= c_7(attach#1#(@line,@m))
Following rules are (at-least) weakly oriented:
attach#1#(::(@x,@xs),@m) = [2] @x + [2] @xs + [2]
>= [2] @xs + [2]
= c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) = [2] @xs + [2]
>= [2] @xs + [2]
= c_10(attach#(@xs,@ls))
matrixMult#(@m1,@m2) = [4] @m2 + [0]
>= [4] @m2 + [0]
= c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) = [4] @m2 + [4] @m3 + [1]
>= [4] @m2 + [4] @m3 + [1]
= c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) = [4] @mm + [0]
>= [4] @mm + [0]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) = [4] @m + [4] @ms + [4]
>= [4] @m + [4] @ms + [4]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) = [4] @m + [0]
>= [4] @m + [0]
= c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) = [4] @l + [4] @m' + [4]
>= [4] @l + [4] @m' + [4]
= c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) = [4] @m + [2]
>= [4] @m + [2]
= c_54(transAcc#(@m,makeBase(@m)))
**** Step 8.a:4.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
**** Step 8.a:4.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:attach#(@line,@m) -> c_7(attach#1#(@line,@m))
-->_1 attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)):2
2:W:attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
-->_1 attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls)):3
3:W:attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
4:W:matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):8
5:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2))):4
-->_1 matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2))):4
6:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):7
7:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):6
-->_2 matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2))):4
8:W:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):9
9:W:transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):8
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1
10:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):8
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
10: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
6: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
7: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
5: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
4: matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
8: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
9: transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
1: attach#(@line,@m) -> c_7(attach#1#(@line,@m))
3: attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
2: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
**** Step 8.a:4.b:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
** Step 8.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
attach#(@line,@m) -> c_7(attach#1#(@line,@m))
attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):2
2:S:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
3:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):4
4:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):12
5:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):3
6:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):7
7:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
8:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
9:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):10
10:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):9
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
11:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):22
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
12:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):13
13:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):12
14:S:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):15
15:S:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)):16
16:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
17:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):18
18:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):19
19:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):17
20:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):21
21:S:transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):27
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
22:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):23
23:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):24
-->_2 split#(@m) -> c_39(split#1#(@m)):17
24:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):25
25:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):22
26:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):3
27:W:attach#(@line,@m) -> c_7(attach#1#(@line,@m))
-->_1 attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)):28
28:W:attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
-->_1 attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls)):29
29:W:attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
-->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):27
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
27: attach#(@line,@m) -> c_7(attach#1#(@line,@m))
29: attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls))
28: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs))
** Step 8.b:2: SimplifyRHS WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/2,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):2
2:S:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
3:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):4
4:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):12
5:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):3
6:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):7
7:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
8:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
9:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):10
10:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):9
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
11:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):22
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
12:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):13
13:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):12
14:S:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):15
15:S:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)):16
16:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
17:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):18
18:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):19
19:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):17
20:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):21
21:S:transAcc#1#(::(@l,@m'),@base) -> c_46(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
22:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):23
23:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):24
-->_2 split#(@m) -> c_39(split#1#(@m)):17
24:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):25
25:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):22
26:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):3
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
** Step 8.b:3: Decompose WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/3,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
Problem (S)
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/3,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
*** Step 8.b:3.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):2
2:S:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
3:W:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):4
4:W:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):12
5:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):3
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
6:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):7
7:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
8:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
9:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):10
10:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):9
11:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):22
12:W:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):13
13:W:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):12
14:S:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):15
15:S:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)):16
16:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
17:W:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):18
18:W:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):19
19:W:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):17
20:W:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):21
21:W:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
22:W:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):23
23:W:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_2 split#(@m) -> c_39(split#1#(@m)):17
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):24
24:W:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):25
25:W:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):22
26:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):3
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):20
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
26: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
22: transpose#(@m) -> c_48(transpose#1#(@m,@m))
25: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
24: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
23: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
17: split#(@m) -> c_39(split#1#(@m))
19: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
18: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
20: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
21: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
3: makeBase#(@m) -> c_19(makeBase#1#(@m))
4: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
12: mkBase#(@m) -> c_31(mkBase#1#(@m))
13: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
*** Step 8.b:3.a:2: SimplifyRHS WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):2
2:S:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
5:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
6:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):7
7:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
8:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
9:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):10
10:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):5
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):9
11:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):6
14:S:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):15
15:S:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)):16
16:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
*** Step 8.b:3.a:3: DecomposeDG WORST_CASE(?,O(n^5))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
and a lower component
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
Further, following extension rules are added to the lower component.
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
**** Step 8.b:3.a:3.a:1: PredecessorEstimation WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{1,3}
by application of
Pre({1,3}) = {}.
Here rules are labelled as follows:
1: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
2: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
3: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
4: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
**** Step 8.b:3.a:3.a:2: RemoveWeakSuffixes WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
2:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
3:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):1
4:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
4: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
2: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
**** Step 8.b:3.a:3.a:3: SimplifyRHS WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
3:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):1
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
**** Step 8.b:3.a:3.a:4: UsableRules WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
**** Step 8.b:3.a:3.a:5: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
Consider the set of all dependency pairs
1: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
2: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
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 8.b:3.a:3.a:5.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_27) = {1},
uargs(c_28) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
p(#abs) = [0]
p(#add) = [1]
p(#mult) = [0]
p(#natmult) = [2] x1 + [0]
p(#neg) = [0]
p(#pos) = [0]
p(#pred) = [4] x1 + [2]
p(#s) = [1] x1 + [2]
p(#succ) = [0]
p(*) = [0]
p(+) = [0]
p(::) = [1] x1 + [1] x2 + [4]
p(attach) = [1] x2 + [6]
p(attach#1) = [3] x1 + [0]
p(attach#2) = [0]
p(lineMult) = [4]
p(lineMult#1) = [2] x1 + [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [0]
p(matrixMult) = [1] x1 + [0]
p(matrixMult') = [1] x1 + [0]
p(matrixMult'#1) = [4] x2 + [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [1]
p(mkBase#1) = [1] x1 + [0]
p(mult) = [4] x2 + [1]
p(mult#1) = [0]
p(mult#2) = [0]
p(nil) = [5]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [2]
p(transAcc#1) = [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [0]
p(makeBase#1#) = [0]
p(matrixMult#) = [0]
p(matrixMult'#) = [0]
p(matrixMult'#1#) = [0]
p(matrixMult3#) = [0]
p(matrixMultList#) = [1] x2 + [4]
p(matrixMultList#1#) = [1] x1 + [1]
p(matrixMultOld#) = [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [0]
p(transAcc#1#) = [0]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [1] x1 + [0]
p(c_1) = [0]
p(c_2) = [0]
p(c_3) = [0]
p(c_4) = [0]
p(c_5) = [0]
p(c_6) = [1] x1 + [0]
p(c_7) = [1] x1 + [0]
p(c_8) = [4] x1 + [0]
p(c_9) = [0]
p(c_10) = [1] x1 + [0]
p(c_11) = [0]
p(c_12) = [1] x1 + [0]
p(c_13) = [0]
p(c_14) = [0]
p(c_15) = [2] x1 + [1] x2 + [2] x4 + [0]
p(c_16) = [1] x1 + [4] x6 + [0]
p(c_17) = [2] x1 + [1] x4 + [1] x6 + [1] x7 + [0]
p(c_18) = [1] x2 + [1] x3 + [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) = [4] x2 + [0]
p(c_27) = [1] x1 + [2]
p(c_28) = [1] x1 + [0]
p(c_29) = [0]
p(c_30) = [1] x1 + [0]
p(c_31) = [0]
p(c_32) = [4] x1 + [0]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [0]
p(c_38) = [0]
p(c_39) = [1] x1 + [0]
p(c_40) = [4] x1 + [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) = [0]
p(c_49) = [2] x1 + [0]
p(c_50) = [0]
p(c_51) = [0]
p(c_52) = [0]
p(c_53) = [0]
p(c_54) = [4] x1 + [0]
p(c_55) = [0]
p(c_56) = [1] x1 + [0]
p(c_57) = [4] x1 + [4] x2 + [0]
p(c_58) = [2] x1 + [0]
p(c_59) = [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [1] x1 + [0]
p(c_65) = [0]
p(c_66) = [0]
p(c_67) = [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [4] x2 + [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
matrixMultList#1#(::(@m,@ms),@acc) = [1] @m + [1] @ms + [5]
> [1] @ms + [4]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
Following rules are (at-least) weakly oriented:
matrixMultList#(@acc,@mm) = [1] @mm + [4]
>= [1] @mm + [3]
= c_27(matrixMultList#1#(@mm,@acc))
***** Step 8.b:3.a:3.a:5.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
***** Step 8.b:3.a:3.a:5.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)):2
2:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
2: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
***** Step 8.b:3.a:3.a:5.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
**** Step 8.b:3.a:3.b:1: DecomposeDG WORST_CASE(?,O(n^4))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
and a lower component
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
Further, following extension rules are added to the lower component.
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
***** Step 8.b:3.a:3.b:1.a:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
Consider the set of all dependency pairs
1: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
2: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
3: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
4: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
5: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
6: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
7: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
8: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
9: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@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,4,5,9}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
****** Step 8.b:3.a:3.b:1.a:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_23) = {1},
uargs(c_24) = {2}
Following symbols are considered usable:
{matrixMult,matrixMult',matrixMult'#1,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#
,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
p(#abs) = [0]
p(#add) = [2] x2 + [4]
p(#mult) = [1] x1 + [0]
p(#natmult) = [1] x2 + [3]
p(#neg) = [0]
p(#pos) = [1]
p(#pred) = [0]
p(#s) = [5]
p(#succ) = [5]
p(*) = [2] x2 + [1]
p(+) = [2] x1 + [1] x2 + [0]
p(::) = [1] x2 + [2]
p(attach) = [1]
p(attach#1) = [1] x1 + [0]
p(attach#2) = [2]
p(lineMult) = [7] x1 + [0]
p(lineMult#1) = [3]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [0]
p(matrixMult) = [1] x1 + [0]
p(matrixMult') = [1] x1 + [0]
p(matrixMult'#1) = [1] x1 + [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [4]
p(mkBase#1) = [1] x1 + [0]
p(mult) = [1] x1 + [0]
p(mult#1) = [0]
p(mult#2) = [1] x1 + [1]
p(nil) = [2]
p(split) = [2] x1 + [0]
p(split#1) = [6]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [4] x1 + [0]
p(transAcc#1) = [4] x1 + [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [4] x1 + [0]
p(transpose#3) = [5]
p(transpose') = [0]
p(tuple#2) = [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [1]
p(makeBase#1#) = [0]
p(matrixMult#) = [1] x1 + [5]
p(matrixMult'#) = [1] x1 + [0]
p(matrixMult'#1#) = [1] x1 + [0]
p(matrixMult3#) = [1] x1 + [5]
p(matrixMultList#) = [1] x1 + [4] x2 + [1]
p(matrixMultList#1#) = [4] x1 + [1] x2 + [1]
p(matrixMultOld#) = [4] x1 + [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [1] x1 + [4] x2 + [0]
p(mult#1#) = [2] x1 + [0]
p(mult#2#) = [1] x2 + [1] x3 + [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [1] x2 + [0]
p(split#3#) = [1] x1 + [0]
p(transAcc#) = [1] x1 + [0]
p(transAcc#1#) = [1] x2 + [0]
p(transpose#) = [0]
p(transpose#1#) = [2] x1 + [0]
p(transpose#2#) = [2] x1 + [0]
p(transpose#3#) = [1] x2 + [0]
p(transpose'#) = [1] x1 + [0]
p(c_1) = [0]
p(c_2) = [0]
p(c_3) = [0]
p(c_4) = [0]
p(c_5) = [4] x1 + [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) = [1] x1 + [0]
p(c_13) = [0]
p(c_14) = [0]
p(c_15) = [1] x1 + [1] x2 + [0]
p(c_16) = [1] x1 + [0]
p(c_17) = [4] x5 + [2]
p(c_18) = [1] x1 + [2] x2 + [0]
p(c_19) = [2]
p(c_20) = [2]
p(c_21) = [1]
p(c_22) = [1] x1 + [5]
p(c_23) = [1] x1 + [0]
p(c_24) = [1] x2 + [0]
p(c_25) = [0]
p(c_26) = [4] x1 + [0]
p(c_27) = [0]
p(c_28) = [4] x1 + [0]
p(c_29) = [0]
p(c_30) = [1] x1 + [0]
p(c_31) = [0]
p(c_32) = [2] x1 + [0]
p(c_33) = [0]
p(c_34) = [2] x1 + [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [1] x1 + [0]
p(c_38) = [0]
p(c_39) = [0]
p(c_40) = [1] x1 + [0]
p(c_41) = [0]
p(c_42) = [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [1] x1 + [0]
p(c_46) = [2] x1 + [0]
p(c_47) = [0]
p(c_48) = [0]
p(c_49) = [4] x1 + [0]
p(c_50) = [0]
p(c_51) = [0]
p(c_52) = [2] x1 + [0]
p(c_53) = [0]
p(c_54) = [1] x1 + [1] x2 + [0]
p(c_55) = [0]
p(c_56) = [0]
p(c_57) = [1] x1 + [2]
p(c_58) = [4] x1 + [0]
p(c_59) = [4] x1 + [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [1] x1 + [0]
p(c_66) = [0]
p(c_67) = [1] x1 + [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [1] x2 + [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
matrixMult'#1#(::(@l,@ls),@m2) = [1] @ls + [2]
> [1] @ls + [0]
= c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
Following rules are (at-least) weakly oriented:
matrixMult#(@m1,@m2) = [1] @m1 + [5]
>= [1] @m1 + [5]
= c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) = [1] @m1 + [0]
>= [1] @m1 + [0]
= c_23(matrixMult'#1#(@m1,@m2))
matrixMult3#(@m1,@m2,@m3) = [1] @m1 + [5]
>= [1] @m1 + [5]
= matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) = [1] @m1 + [5]
>= [1] @m1 + [5]
= matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) = [1] @acc + [4] @mm + [1]
>= [1] @acc + [4] @mm + [1]
= matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [4] @ms + [9]
>= [1] @acc + [5]
= matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [4] @ms + [9]
>= [1] @acc + [4] @ms + [1]
= matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) = [4] @m1 + [0]
>= [1] @m1 + [0]
= matrixMult'#(@m1,transpose(@m2))
matrixMult(@m1,@m2) = [1] @m1 + [0]
>= [1] @m1 + [0]
= matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) = [1] @m1 + [0]
>= [1] @m1 + [0]
= matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) = [1] @ls + [2]
>= [1] @ls + [2]
= ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) = [2]
>= [2]
= nil()
****** Step 8.b:3.a:3.b:1.a:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
****** Step 8.b:3.a:3.b:1.a:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
2:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):3
3:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
4:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):1
5:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):1
6:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):8
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):7
7:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):1
8:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
-->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):6
9:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
9: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
6: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
8: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
7: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
5: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
4: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
1: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
2: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
3: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
****** Step 8.b:3.a:3.b:1.a:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
***** Step 8.b:3.a:3.b:1.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^3))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak DPs:
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
5: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
Consider the set of all dependency pairs
1: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
2: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
3: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
4: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
5: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
6: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
7: matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
8: matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
9: matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
10: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
11: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
12: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
13: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
14: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
15: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^1))
SPACE(?,?)on application of the dependency pairs
{5}
These cover all (indirect) predecessors of dependency pairs
{5,10,11,15}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
****** Step 8.b:3.a:3.b:1.b:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak DPs:
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
NaturalMI {miDimension = 2, miDegree = 2, 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_12) = {1},
uargs(c_13) = {1,2},
uargs(c_34) = {1},
uargs(c_35) = {1},
uargs(c_37) = {1}
Following symbols are considered usable:
{attach,attach#1,attach#2,makeBase,makeBase#1,mkBase,mkBase#1,split,split#1,split#2,split#3,transAcc
,transAcc#1,transpose,transpose#1,transpose#2,transpose#3,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#
,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
[1]
p(#abs) = [0]
[0]
p(#add) = [0 0] x1 + [1 1] x2 + [0]
[0 1] [0 0] [1]
p(#mult) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [0 1] [0]
p(#natmult) = [0 0] x1 + [1 1] x2 + [0]
[0 1] [1 0] [0]
p(#neg) = [0]
[1]
p(#pos) = [0]
[0]
p(#pred) = [1]
[0]
p(#s) = [0 1] x1 + [0]
[0 0] [0]
p(#succ) = [0 1] x1 + [1]
[0 0] [1]
p(*) = [0]
[0]
p(+) = [0 1] x2 + [0]
[0 0] [0]
p(::) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(attach) = [1 1] x1 + [1 0] x2 + [0]
[0 1] [0 1] [1]
p(attach#1) = [1 1] x1 + [1 0] x2 + [0]
[0 1] [0 1] [0]
p(attach#2) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 1] [1]
p(lineMult) = [0 0] x1 + [0 1] x2 + [0]
[1 0] [0 1] [0]
p(lineMult#1) = [0]
[0]
p(m1) = [0]
[0]
p(m2) = [0]
[0]
p(m3) = [0]
[0]
p(m4) = [0]
[0]
p(makeBase) = [0 0] x1 + [0]
[1 1] [0]
p(makeBase#1) = [0 0] x1 + [0]
[1 0] [0]
p(matrixMult) = [0]
[0]
p(matrixMult') = [1]
[0]
p(matrixMult'#1) = [1]
[0]
p(matrixMult3) = [0]
[0]
p(matrixMultList) = [0]
[0]
p(matrixMultList#1) = [0]
[0]
p(matrixMultOld) = [0]
[0]
p(mkBase) = [0 0] x1 + [0]
[0 1] [0]
p(mkBase#1) = [0 0] x1 + [0]
[0 1] [0]
p(mult) = [0 0] x1 + [0 0] x2 + [0]
[0 1] [1 0] [0]
p(mult#1) = [0 1] x1 + [0]
[0 0] [1]
p(mult#2) = [0]
[1]
p(nil) = [0]
[0]
p(split) = [1 0] x1 + [0]
[0 1] [0]
p(split#1) = [1 0] x1 + [0]
[0 1] [0]
p(split#2) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(split#3) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 0] [1]
p(transAcc) = [1 0] x1 + [1 0] x2 + [0]
[1 1] [0 1] [1]
p(transAcc#1) = [1 0] x1 + [1 0] x2 + [0]
[1 1] [0 1] [1]
p(transpose) = [1 1] x1 + [0]
[1 0] [1]
p(transpose#1) = [1 1] x2 + [0]
[1 0] [1]
p(transpose#2) = [1 1] x1 + [0]
[1 0] [1]
p(transpose#3) = [1 1] x1 + [1 1] x2 + [0]
[1 1] [0 0] [1]
p(transpose') = [0]
[0]
p(tuple#2) = [1 0] x1 + [1 1] x2 + [0]
[0 1] [0 0] [0]
p(#abs#) = [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(attach#) = [0]
[0]
p(attach#1#) = [0]
[0]
p(attach#2#) = [0]
[0]
p(lineMult#) = [1 0] x2 + [1]
[0 0] [0]
p(lineMult#1#) = [1 0] x1 + [1]
[0 0] [1]
p(m1#) = [0]
[0]
p(m2#) = [0]
[0]
p(m3#) = [0]
[0]
p(m4#) = [0]
[0]
p(makeBase#) = [0]
[0]
p(makeBase#1#) = [0]
[0]
p(matrixMult#) = [1 1] x2 + [1]
[1 0] [1]
p(matrixMult'#) = [1 0] x2 + [1]
[1 0] [0]
p(matrixMult'#1#) = [1 0] x2 + [1]
[1 0] [0]
p(matrixMult3#) = [0 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [1 0] [1 0] [1]
p(matrixMultList#) = [1 1] x2 + [0]
[1 0] [1]
p(matrixMultList#1#) = [1 1] x1 + [0]
[1 0] [1]
p(matrixMultOld#) = [0 1] x1 + [1 1] x2 + [1]
[0 1] [1 1] [0]
p(mkBase#) = [0]
[0]
p(mkBase#1#) = [0]
[0]
p(mult#) = [0 1] x2 + [0]
[1 0] [0]
p(mult#1#) = [0 1] x2 + [0]
[0 0] [1]
p(mult#2#) = [0 1] x1 + [0]
[0 0] [1]
p(split#) = [0]
[0]
p(split#1#) = [0]
[0]
p(split#2#) = [0]
[0]
p(split#3#) = [0]
[0]
p(transAcc#) = [0]
[0]
p(transAcc#1#) = [0]
[0]
p(transpose#) = [0]
[0]
p(transpose#1#) = [0]
[0]
p(transpose#2#) = [0]
[0]
p(transpose#3#) = [0]
[0]
p(transpose'#) = [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) = [1 0] x1 + [0]
[0 0] [0]
p(c_13) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 0] [1]
p(c_14) = [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) = [1 0] x1 + [0]
[0 0] [0]
p(c_35) = [1 0] x1 + [0]
[0 0] [0]
p(c_36) = [0]
[0]
p(c_37) = [1 0] x1 + [0]
[0 0] [1]
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]
p(c_60) = [0]
[0]
p(c_61) = [0]
[0]
p(c_62) = [0]
[0]
p(c_63) = [0]
[0]
p(c_64) = [0]
[0]
p(c_65) = [0]
[0]
p(c_66) = [0]
[0]
p(c_67) = [0]
[0]
p(c_68) = [0]
[0]
p(c_69) = [0]
[0]
p(c_70) = [0]
[0]
p(c_71) = [0]
[0]
p(c_72) = [0]
[0]
p(c_73) = [0]
[0]
p(c_74) = [0]
[0]
p(c_75) = [0]
[0]
p(c_76) = [0]
[0]
p(c_77) = [0]
[0]
p(c_78) = [0]
[0]
Following rules are strictly oriented:
mult#2#(::(@y,@ys),@x,@xs) = [0 1] @ys + [1]
[0 0] [1]
> [0 1] @ys + [0]
[0 0] [1]
= c_37(mult#(@xs,@ys))
Following rules are (at-least) weakly oriented:
lineMult#(@l,@m2) = [1 0] @m2 + [1]
[0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) = [1 1] @x + [1 0] @xs + [1]
[0 0] [0 0] [1]
>= [1 1] @x + [1 0] @xs + [1]
[0 0] [0 0] [1]
= c_13(mult#(@l,@x),lineMult#(@l,@xs))
matrixMult#(@m1,@m2) = [1 1] @m2 + [1]
[1 0] [1]
>= [1 0] @m2 + [1]
[1 0] [0]
= matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) = [1 0] @m2 + [1]
[1 0] [0]
>= [1 0] @m2 + [1]
[1 0] [0]
= matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) = [1 0] @m2 + [1]
[1 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) = [1 0] @m2 + [1]
[1 0] [0]
>= [1 0] @m2 + [1]
[1 0] [0]
= matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) = [0 0] @m1 + [1 1] @m2 + [1 1] @m3 + [1]
[0 1] [1 0] [1 0] [1]
>= [1 1] @m2 + [1]
[1 0] [1]
= matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) = [0 0] @m1 + [1 1] @m2 + [1 1] @m3 + [1]
[0 1] [1 0] [1 0] [1]
>= [1 1] @m3 + [1]
[1 0] [1]
= matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) = [1 1] @mm + [0]
[1 0] [1]
>= [1 1] @mm + [0]
[1 0] [1]
= matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 1] @ms + [1]
[1 1] [1 0] [1]
>= [1 1] @m + [1]
[1 0] [1]
= matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 1] @ms + [1]
[1 1] [1 0] [1]
>= [1 1] @ms + [0]
[1 0] [1]
= matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) = [0 1] @m1 + [1 1] @m2 + [1]
[0 1] [1 1] [0]
>= [1 1] @m2 + [1]
[1 1] [0]
= matrixMult'#(@m1,transpose(@m2))
mult#(@l1,@l2) = [0 1] @l2 + [0]
[1 0] [0]
>= [0 1] @l2 + [0]
[0 0] [0]
= c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) = [0 1] @l2 + [0]
[0 0] [1]
>= [0 1] @l2 + [0]
[0 0] [0]
= c_35(mult#2#(@l2,@x,@xs))
attach(@line,@m) = [1 1] @line + [1 0] @m + [0]
[0 1] [0 1] [1]
>= [1 1] @line + [1 0] @m + [0]
[0 1] [0 1] [0]
= attach#1(@line,@m)
attach#1(::(@x,@xs),@m) = [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 1] [1]
>= [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 1] [1]
= attach#2(@m,@x,@xs)
attach#1(nil(),@m) = [1 0] @m + [0]
[0 1] [0]
>= [0]
[0]
= nil()
attach#2(::(@l,@ls),@x,@xs) = [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 1] [2]
>= [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 1] [2]
= ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) = [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [1]
>= [0]
[0]
= nil()
makeBase(@m) = [0 0] @m + [0]
[1 1] [0]
>= [0 0] @m + [0]
[1 0] [0]
= makeBase#1(@m)
makeBase#1(::(@l,@m')) = [0 0] @l + [0 0] @m' + [0]
[1 1] [1 0] [0]
>= [0 0] @l + [0]
[0 1] [0]
= mkBase(@l)
makeBase#1(nil()) = [0]
[0]
>= [0]
[0]
= nil()
mkBase(@m) = [0 0] @m + [0]
[0 1] [0]
>= [0 0] @m + [0]
[0 1] [0]
= mkBase#1(@m)
mkBase#1(::(@l,@m')) = [0 0] @m' + [0]
[0 1] [1]
>= [0 0] @m' + [0]
[0 1] [1]
= ::(nil(),mkBase(@m'))
mkBase#1(nil()) = [0]
[0]
>= [0]
[0]
= nil()
split(@m) = [1 0] @m + [0]
[0 1] [0]
>= [1 0] @m + [0]
[0 1] [0]
= split#1(@m)
split#1(::(@l,@ls)) = [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
>= [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
= split#2(@l,@ls)
split#1(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) = [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
>= [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
= split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) = [1 0] @ls + [0]
[0 1] [1]
>= [0]
[0]
= tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) = [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
>= [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
= tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) = [1 0] @base + [1 0] @m + [0]
[0 1] [1 1] [1]
>= [1 0] @base + [1 0] @m + [0]
[0 1] [1 1] [1]
= transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) = [1 0] @base + [1 1] @l + [1 0] @m' + [0]
[0 1] [1 1] [1 1] [2]
>= [1 0] @base + [1 1] @l + [1 0] @m' + [0]
[0 1] [0 1] [1 1] [2]
= attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) = [1 0] @base + [0]
[0 1] [1]
>= [1 0] @base + [0]
[0 1] [0]
= @base
transpose(@m) = [1 1] @m + [0]
[1 0] [1]
>= [1 1] @m + [0]
[1 0] [1]
= transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) = [1 1] @m + [0]
[1 0] [1]
>= [1 1] @m + [0]
[1 0] [1]
= transpose#2(split(@m))
transpose#1(nil(),@m) = [1 1] @m + [0]
[1 0] [1]
>= [0]
[0]
= nil()
transpose#2(tuple#2(@l,@m')) = [1 1] @l + [1 1] @m' + [0]
[1 0] [1 1] [1]
>= [1 1] @l + [1 1] @m' + [0]
[0 0] [1 1] [1]
= transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) = [1 1] @l + [1 1] @y + [1 1] @ys + [1]
[0 0] [1 1] [1 1] [2]
>= [1 1] @l + [1 1] @y + [1 1] @ys + [1]
[0 0] [1 1] [1 0] [2]
= ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) = [1 1] @l + [0]
[0 0] [1]
>= [0]
[0]
= nil()
****** Step 8.b:3.a:3.b:1.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
- Weak DPs:
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
****** Step 8.b:3.a:3.b:1.b:1.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^3))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
- Weak DPs:
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
Consider the set of all dependency pairs
1: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
2: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
3: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
4: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
5: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
6: matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
7: matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
8: matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
9: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
10: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
11: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
12: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
13: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
14: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
15: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^2))
SPACE(?,?)on application of the dependency pairs
{1}
These cover all (indirect) predecessors of dependency pairs
{1,2,9,10,14}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
******* Step 8.b:3.a:3.b:1.b:1.b:1.a:1: NaturalMI WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
- Weak DPs:
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
NaturalMI {miDimension = 2, miDegree = 2, 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_12) = {1},
uargs(c_13) = {1,2},
uargs(c_34) = {1},
uargs(c_35) = {1},
uargs(c_37) = {1}
Following symbols are considered usable:
{attach,attach#1,attach#2,makeBase,makeBase#1,mkBase,mkBase#1,split,split#1,split#2,split#3,transAcc
,transAcc#1,transpose,transpose#1,transpose#2,transpose#3,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#
,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
[1]
p(#abs) = [0]
[0]
p(#add) = [1 0] x1 + [0 0] x2 + [0]
[0 0] [1 1] [1]
p(#mult) = [0 0] x2 + [1]
[0 1] [1]
p(#natmult) = [0 0] x2 + [1]
[1 1] [0]
p(#neg) = [0 0] x1 + [0]
[0 1] [0]
p(#pos) = [1 0] x1 + [0]
[0 0] [0]
p(#pred) = [1 0] x1 + [0]
[0 1] [0]
p(#s) = [1 1] x1 + [1]
[0 0] [0]
p(#succ) = [1 0] x1 + [0]
[1 1] [0]
p(*) = [0 1] x1 + [1]
[0 0] [0]
p(+) = [0 0] x1 + [1 1] x2 + [0]
[1 0] [0 1] [1]
p(::) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(attach) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(attach#1) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(attach#2) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 0] [0]
p(lineMult) = [1 0] x2 + [1]
[0 1] [0]
p(lineMult#1) = [0]
[1]
p(m1) = [0]
[0]
p(m2) = [0]
[0]
p(m3) = [0]
[0]
p(m4) = [0]
[0]
p(makeBase) = [0 1] x1 + [0]
[1 0] [0]
p(makeBase#1) = [0 0] x1 + [0]
[1 0] [0]
p(matrixMult) = [0]
[0]
p(matrixMult') = [1 1] x2 + [0]
[0 0] [0]
p(matrixMult'#1) = [0]
[0]
p(matrixMult3) = [0]
[0]
p(matrixMultList) = [0]
[0]
p(matrixMultList#1) = [0]
[0]
p(matrixMultOld) = [0]
[0]
p(mkBase) = [0 0] x1 + [0]
[0 1] [0]
p(mkBase#1) = [0 0] x1 + [0]
[0 1] [0]
p(mult) = [0 1] x1 + [0 0] x2 + [0]
[1 0] [1 1] [0]
p(mult#1) = [0]
[1]
p(mult#2) = [0 1] x1 + [1]
[0 1] [1]
p(nil) = [0]
[0]
p(split) = [1 0] x1 + [0]
[0 1] [0]
p(split#1) = [1 0] x1 + [0]
[0 1] [0]
p(split#2) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(split#3) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 0] [1]
p(transAcc) = [1 0] x1 + [1 1] x2 + [0]
[0 0] [1 1] [0]
p(transAcc#1) = [1 0] x1 + [1 1] x2 + [0]
[0 0] [1 1] [0]
p(transpose) = [1 1] x1 + [0]
[1 0] [0]
p(transpose#1) = [1 1] x2 + [0]
[1 0] [0]
p(transpose#2) = [1 1] x1 + [0]
[1 0] [0]
p(transpose#3) = [1 1] x1 + [1 1] x2 + [0]
[1 1] [0 0] [0]
p(transpose') = [0]
[0]
p(tuple#2) = [1 0] x1 + [1 1] x2 + [0]
[0 1] [0 0] [0]
p(#abs#) = [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(attach#) = [0]
[0]
p(attach#1#) = [0]
[0]
p(attach#2#) = [0]
[0]
p(lineMult#) = [0 1] x2 + [1]
[0 0] [0]
p(lineMult#1#) = [0 1] x1 + [0 0] x2 + [0]
[1 0] [1 0] [0]
p(m1#) = [0]
[0]
p(m2#) = [0]
[0]
p(m3#) = [0]
[0]
p(m4#) = [0]
[0]
p(makeBase#) = [0]
[0]
p(makeBase#1#) = [0]
[0]
p(matrixMult#) = [1 1] x2 + [1]
[0 0] [0]
p(matrixMult'#) = [0 1] x2 + [1]
[0 0] [0]
p(matrixMult'#1#) = [0 1] x2 + [1]
[0 0] [0]
p(matrixMult3#) = [1 1] x2 + [1 1] x3 + [1]
[1 0] [1 1] [0]
p(matrixMultList#) = [1 0] x2 + [1]
[0 0] [1]
p(matrixMultList#1#) = [1 0] x1 + [1]
[0 0] [1]
p(matrixMultOld#) = [0 0] x1 + [1 0] x2 + [1]
[1 1] [0 0] [0]
p(mkBase#) = [0]
[0]
p(mkBase#1#) = [0]
[0]
p(mult#) = [0 0] x1 + [0 0] x2 + [0]
[1 1] [1 1] [0]
p(mult#1#) = [0 0] x1 + [0 0] x2 + [0]
[1 1] [1 0] [0]
p(mult#2#) = [0 0] x1 + [0 0] x2 + [0 0] x3 + [0]
[1 0] [1 1] [0 1] [1]
p(split#) = [0]
[0]
p(split#1#) = [0]
[0]
p(split#2#) = [0]
[0]
p(split#3#) = [0]
[0]
p(transAcc#) = [0]
[0]
p(transAcc#1#) = [0]
[0]
p(transpose#) = [0]
[0]
p(transpose#1#) = [0]
[0]
p(transpose#2#) = [0]
[0]
p(transpose#3#) = [0]
[0]
p(transpose'#) = [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) = [1 0] x1 + [0]
[0 0] [0]
p(c_13) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [0]
p(c_14) = [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) = [1 0] x1 + [0]
[0 1] [0]
p(c_35) = [1 0] x1 + [0]
[0 1] [0]
p(c_36) = [0]
[0]
p(c_37) = [1 0] x1 + [0]
[0 0] [1]
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]
p(c_60) = [0]
[0]
p(c_61) = [0]
[0]
p(c_62) = [0]
[0]
p(c_63) = [0]
[0]
p(c_64) = [0]
[0]
p(c_65) = [0]
[0]
p(c_66) = [0]
[0]
p(c_67) = [0]
[0]
p(c_68) = [0]
[0]
p(c_69) = [0]
[0]
p(c_70) = [0]
[0]
p(c_71) = [0]
[0]
p(c_72) = [0]
[0]
p(c_73) = [0]
[0]
p(c_74) = [0]
[0]
p(c_75) = [0]
[0]
p(c_76) = [0]
[0]
p(c_77) = [0]
[0]
p(c_78) = [0]
[0]
Following rules are strictly oriented:
lineMult#(@l,@m2) = [0 1] @m2 + [1]
[0 0] [0]
> [0 1] @m2 + [0]
[0 0] [0]
= c_12(lineMult#1#(@m2,@l))
Following rules are (at-least) weakly oriented:
lineMult#1#(::(@x,@xs),@l) = [0 0] @l + [0 0] @x + [0 1] @xs + [1]
[1 0] [1 1] [1 0] [0]
>= [0 1] @xs + [1]
[0 0] [0]
= c_13(mult#(@l,@x),lineMult#(@l,@xs))
matrixMult#(@m1,@m2) = [1 1] @m2 + [1]
[0 0] [0]
>= [1 1] @m2 + [1]
[0 0] [0]
= matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) = [0 1] @m2 + [1]
[0 0] [0]
>= [0 1] @m2 + [1]
[0 0] [0]
= matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) = [0 1] @m2 + [1]
[0 0] [0]
>= [0 1] @m2 + [1]
[0 0] [0]
= lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) = [0 1] @m2 + [1]
[0 0] [0]
>= [0 1] @m2 + [1]
[0 0] [0]
= matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) = [1 1] @m2 + [1 1] @m3 + [1]
[1 0] [1 1] [0]
>= [1 1] @m2 + [1]
[0 0] [0]
= matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) = [1 1] @m2 + [1 1] @m3 + [1]
[1 0] [1 1] [0]
>= [1 1] @m3 + [1]
[0 0] [0]
= matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) = [1 0] @mm + [1]
[0 0] [1]
>= [1 0] @mm + [1]
[0 0] [1]
= matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 0] @ms + [1]
[0 0] [0 0] [1]
>= [1 1] @m + [1]
[0 0] [0]
= matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 0] @ms + [1]
[0 0] [0 0] [1]
>= [1 0] @ms + [1]
[0 0] [1]
= matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) = [0 0] @m1 + [1 0] @m2 + [1]
[1 1] [0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= matrixMult'#(@m1,transpose(@m2))
mult#(@l1,@l2) = [0 0] @l1 + [0 0] @l2 + [0]
[1 1] [1 1] [0]
>= [0 0] @l1 + [0 0] @l2 + [0]
[1 1] [1 0] [0]
= c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) = [0 0] @l2 + [0 0] @x + [0 0] @xs + [0]
[1 0] [1 1] [1 1] [1]
>= [0 0] @l2 + [0 0] @x + [0 0] @xs + [0]
[1 0] [1 1] [0 1] [1]
= c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) = [0 0] @x + [0 0] @xs + [0 0] @y + [0 0] @ys + [0]
[1 1] [0 1] [1 1] [1 0] [1]
>= [0]
[1]
= c_37(mult#(@xs,@ys))
attach(@line,@m) = [1 1] @line + [1 0] @m + [0]
[0 0] [0 1] [0]
>= [1 1] @line + [1 0] @m + [0]
[0 0] [0 1] [0]
= attach#1(@line,@m)
attach#1(::(@x,@xs),@m) = [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [0]
>= [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [0]
= attach#2(@m,@x,@xs)
attach#1(nil(),@m) = [1 0] @m + [0]
[0 1] [0]
>= [0]
[0]
= nil()
attach#2(::(@l,@ls),@x,@xs) = [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 0] [1]
>= [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 0] [1]
= ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) = [1 1] @x + [1 1] @xs + [1]
[0 0] [0 0] [0]
>= [0]
[0]
= nil()
makeBase(@m) = [0 1] @m + [0]
[1 0] [0]
>= [0 0] @m + [0]
[1 0] [0]
= makeBase#1(@m)
makeBase#1(::(@l,@m')) = [0 0] @l + [0 0] @m' + [0]
[1 1] [1 0] [0]
>= [0 0] @l + [0]
[0 1] [0]
= mkBase(@l)
makeBase#1(nil()) = [0]
[0]
>= [0]
[0]
= nil()
mkBase(@m) = [0 0] @m + [0]
[0 1] [0]
>= [0 0] @m + [0]
[0 1] [0]
= mkBase#1(@m)
mkBase#1(::(@l,@m')) = [0 0] @m' + [0]
[0 1] [1]
>= [0 0] @m' + [0]
[0 1] [1]
= ::(nil(),mkBase(@m'))
mkBase#1(nil()) = [0]
[0]
>= [0]
[0]
= nil()
split(@m) = [1 0] @m + [0]
[0 1] [0]
>= [1 0] @m + [0]
[0 1] [0]
= split#1(@m)
split#1(::(@l,@ls)) = [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
>= [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
= split#2(@l,@ls)
split#1(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) = [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
>= [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
= split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) = [1 0] @ls + [0]
[0 1] [1]
>= [0]
[0]
= tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) = [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
>= [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
= tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) = [1 1] @base + [1 0] @m + [0]
[1 1] [0 0] [0]
>= [1 1] @base + [1 0] @m + [0]
[1 1] [0 0] [0]
= transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) = [1 1] @base + [1 1] @l + [1 0] @m' + [0]
[1 1] [0 0] [0 0] [0]
>= [1 1] @base + [1 1] @l + [1 0] @m' + [0]
[1 1] [0 0] [0 0] [0]
= attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) = [1 1] @base + [0]
[1 1] [0]
>= [1 0] @base + [0]
[0 1] [0]
= @base
transpose(@m) = [1 1] @m + [0]
[1 0] [0]
>= [1 1] @m + [0]
[1 0] [0]
= transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) = [1 1] @m + [0]
[1 0] [0]
>= [1 1] @m + [0]
[1 0] [0]
= transpose#2(split(@m))
transpose#1(nil(),@m) = [1 1] @m + [0]
[1 0] [0]
>= [0]
[0]
= nil()
transpose#2(tuple#2(@l,@m')) = [1 1] @l + [1 1] @m' + [0]
[1 0] [1 1] [0]
>= [1 1] @l + [1 1] @m' + [0]
[0 0] [1 1] [0]
= transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) = [1 1] @l + [1 1] @y + [1 1] @ys + [1]
[0 0] [1 1] [1 1] [1]
>= [1 1] @l + [1 1] @y + [1 1] @ys + [1]
[0 0] [1 1] [1 0] [1]
= ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) = [1 1] @l + [0]
[0 0] [0]
>= [0]
[0]
= nil()
******* Step 8.b:3.a:3.b:1.b:1.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******* Step 8.b:3.a:3.b:1.b:1.b:1.b:1: DecomposeDG WORST_CASE(?,O(n^3))
+ Considered Problem:
- Strict DPs:
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
and a lower component
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
Further, following extension rules are added to the lower component.
lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
******** Step 8.b:3.a:3.b:1.b:1.b:1.b:1.a:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
Consider the set of all dependency pairs
1: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
2: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
3: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
4: matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
5: matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
6: matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
7: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
8: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
9: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
10: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
11: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
12: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
Processor NaturalMI {miDimension = 2, miDegree = 2, 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,7,8,12}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.a:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
NaturalMI {miDimension = 2, miDegree = 2, 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_12) = {1},
uargs(c_13) = {2}
Following symbols are considered usable:
{attach,attach#1,attach#2,makeBase,makeBase#1,mkBase,mkBase#1,split,split#1,split#2,split#3,transAcc
,transAcc#1,transpose,transpose#1,transpose#2,transpose#3,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#
,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
[0]
p(#abs) = [0]
[0]
p(#add) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 0] [0]
p(#mult) = [0 1] x2 + [0]
[0 0] [1]
p(#natmult) = [0 0] x2 + [1]
[1 0] [0]
p(#neg) = [0]
[0]
p(#pos) = [1 1] x1 + [0]
[0 0] [1]
p(#pred) = [0]
[1]
p(#s) = [1 0] x1 + [1]
[0 0] [0]
p(#succ) = [0 0] x1 + [1]
[1 1] [0]
p(*) = [1 0] x1 + [0]
[0 0] [0]
p(+) = [1 0] x1 + [1 1] x2 + [1]
[0 0] [0 0] [0]
p(::) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(attach) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(attach#1) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(attach#2) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 0] [0]
p(lineMult) = [0 0] x1 + [1 0] x2 + [0]
[1 0] [1 0] [0]
p(lineMult#1) = [1]
[0]
p(m1) = [0]
[0]
p(m2) = [0]
[0]
p(m3) = [0]
[0]
p(m4) = [0]
[0]
p(makeBase) = [0 1] x1 + [0]
[1 1] [0]
p(makeBase#1) = [0 1] x1 + [0]
[1 0] [0]
p(matrixMult) = [0]
[0]
p(matrixMult') = [0]
[0]
p(matrixMult'#1) = [1 0] x1 + [0]
[0 0] [1]
p(matrixMult3) = [0]
[0]
p(matrixMultList) = [0]
[0]
p(matrixMultList#1) = [0]
[0]
p(matrixMultOld) = [0]
[0]
p(mkBase) = [0 0] x1 + [1]
[0 1] [0]
p(mkBase#1) = [0 0] x1 + [1]
[0 1] [0]
p(mult) = [0 0] x1 + [1 1] x2 + [1]
[1 0] [0 0] [1]
p(mult#1) = [1]
[0]
p(mult#2) = [0 0] x1 + [0]
[0 1] [1]
p(nil) = [0]
[0]
p(split) = [1 0] x1 + [0]
[0 1] [0]
p(split#1) = [1 0] x1 + [0]
[0 1] [0]
p(split#2) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(split#3) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 0] [1]
p(transAcc) = [1 0] x1 + [1 1] x2 + [1]
[0 0] [0 1] [0]
p(transAcc#1) = [1 0] x1 + [1 1] x2 + [1]
[0 0] [0 1] [0]
p(transpose) = [1 1] x1 + [1]
[1 0] [0]
p(transpose#1) = [1 1] x2 + [1]
[1 0] [0]
p(transpose#2) = [1 1] x1 + [1]
[1 0] [0]
p(transpose#3) = [1 1] x1 + [1 1] x2 + [1]
[1 1] [0 0] [0]
p(transpose') = [0]
[0]
p(tuple#2) = [1 0] x1 + [1 1] x2 + [0]
[0 1] [0 0] [0]
p(#abs#) = [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(attach#) = [0]
[0]
p(attach#1#) = [0]
[0]
p(attach#2#) = [0]
[0]
p(lineMult#) = [0 1] x2 + [1]
[0 0] [0]
p(lineMult#1#) = [0 1] x1 + [0 0] x2 + [1]
[0 1] [1 0] [1]
p(m1#) = [0]
[0]
p(m2#) = [0]
[0]
p(m3#) = [0]
[0]
p(m4#) = [0]
[0]
p(makeBase#) = [0]
[0]
p(makeBase#1#) = [0]
[0]
p(matrixMult#) = [1 1] x2 + [1]
[0 1] [1]
p(matrixMult'#) = [0 1] x2 + [1]
[0 0] [0]
p(matrixMult'#1#) = [0 1] x2 + [1]
[0 0] [0]
p(matrixMult3#) = [1 1] x2 + [1 1] x3 + [1]
[1 1] [1 1] [1]
p(matrixMultList#) = [1 1] x2 + [0]
[1 0] [1]
p(matrixMultList#1#) = [1 1] x1 + [0]
[1 0] [1]
p(matrixMultOld#) = [1 0] x2 + [1]
[1 0] [0]
p(mkBase#) = [0]
[0]
p(mkBase#1#) = [0]
[0]
p(mult#) = [0]
[0]
p(mult#1#) = [0]
[0]
p(mult#2#) = [0]
[0]
p(split#) = [0]
[0]
p(split#1#) = [0]
[0]
p(split#2#) = [0]
[0]
p(split#3#) = [0]
[0]
p(transAcc#) = [0]
[0]
p(transAcc#1#) = [0]
[0]
p(transpose#) = [0]
[0]
p(transpose#1#) = [0]
[0]
p(transpose#2#) = [0]
[0]
p(transpose#3#) = [0]
[0]
p(transpose'#) = [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) = [1 0] x1 + [0]
[0 0] [0]
p(c_13) = [1 0] x2 + [0]
[1 0] [1]
p(c_14) = [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]
p(c_60) = [0]
[0]
p(c_61) = [0]
[0]
p(c_62) = [0]
[0]
p(c_63) = [0]
[0]
p(c_64) = [0]
[0]
p(c_65) = [0]
[0]
p(c_66) = [0]
[0]
p(c_67) = [0]
[0]
p(c_68) = [0]
[0]
p(c_69) = [0]
[0]
p(c_70) = [0]
[0]
p(c_71) = [0]
[0]
p(c_72) = [0]
[0]
p(c_73) = [0]
[0]
p(c_74) = [0]
[0]
p(c_75) = [0]
[0]
p(c_76) = [0]
[0]
p(c_77) = [0]
[0]
p(c_78) = [0]
[0]
Following rules are strictly oriented:
lineMult#1#(::(@x,@xs),@l) = [0 0] @l + [0 1] @xs + [2]
[1 0] [0 1] [2]
> [0 1] @xs + [1]
[0 1] [2]
= c_13(mult#(@l,@x),lineMult#(@l,@xs))
Following rules are (at-least) weakly oriented:
lineMult#(@l,@m2) = [0 1] @m2 + [1]
[0 0] [0]
>= [0 1] @m2 + [1]
[0 0] [0]
= c_12(lineMult#1#(@m2,@l))
matrixMult#(@m1,@m2) = [1 1] @m2 + [1]
[0 1] [1]
>= [1 1] @m2 + [1]
[0 0] [0]
= matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) = [0 1] @m2 + [1]
[0 0] [0]
>= [0 1] @m2 + [1]
[0 0] [0]
= matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) = [0 1] @m2 + [1]
[0 0] [0]
>= [0 1] @m2 + [1]
[0 0] [0]
= lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) = [0 1] @m2 + [1]
[0 0] [0]
>= [0 1] @m2 + [1]
[0 0] [0]
= matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) = [1 1] @m2 + [1 1] @m3 + [1]
[1 1] [1 1] [1]
>= [1 1] @m2 + [1]
[0 1] [1]
= matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) = [1 1] @m2 + [1 1] @m3 + [1]
[1 1] [1 1] [1]
>= [1 1] @m3 + [1]
[0 1] [1]
= matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) = [1 1] @mm + [0]
[1 0] [1]
>= [1 1] @mm + [0]
[1 0] [1]
= matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 1] @ms + [1]
[1 1] [1 0] [1]
>= [1 1] @m + [1]
[0 1] [1]
= matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 1] @ms + [1]
[1 1] [1 0] [1]
>= [1 1] @ms + [0]
[1 0] [1]
= matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) = [1 0] @m2 + [1]
[1 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= matrixMult'#(@m1,transpose(@m2))
attach(@line,@m) = [1 1] @line + [1 0] @m + [0]
[0 0] [0 1] [0]
>= [1 1] @line + [1 0] @m + [0]
[0 0] [0 1] [0]
= attach#1(@line,@m)
attach#1(::(@x,@xs),@m) = [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [0]
>= [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [0]
= attach#2(@m,@x,@xs)
attach#1(nil(),@m) = [1 0] @m + [0]
[0 1] [0]
>= [0]
[0]
= nil()
attach#2(::(@l,@ls),@x,@xs) = [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 0] [1]
>= [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 0] [1]
= ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) = [1 1] @x + [1 1] @xs + [1]
[0 0] [0 0] [0]
>= [0]
[0]
= nil()
makeBase(@m) = [0 1] @m + [0]
[1 1] [0]
>= [0 1] @m + [0]
[1 0] [0]
= makeBase#1(@m)
makeBase#1(::(@l,@m')) = [0 0] @l + [0 1] @m' + [1]
[1 1] [1 0] [0]
>= [0 0] @l + [1]
[0 1] [0]
= mkBase(@l)
makeBase#1(nil()) = [0]
[0]
>= [0]
[0]
= nil()
mkBase(@m) = [0 0] @m + [1]
[0 1] [0]
>= [0 0] @m + [1]
[0 1] [0]
= mkBase#1(@m)
mkBase#1(::(@l,@m')) = [0 0] @m' + [1]
[0 1] [1]
>= [0 0] @m' + [1]
[0 1] [1]
= ::(nil(),mkBase(@m'))
mkBase#1(nil()) = [1]
[0]
>= [0]
[0]
= nil()
split(@m) = [1 0] @m + [0]
[0 1] [0]
>= [1 0] @m + [0]
[0 1] [0]
= split#1(@m)
split#1(::(@l,@ls)) = [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
>= [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
= split#2(@l,@ls)
split#1(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) = [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
>= [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
= split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) = [1 0] @ls + [0]
[0 1] [1]
>= [0]
[0]
= tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) = [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
>= [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
= tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) = [1 1] @base + [1 0] @m + [1]
[0 1] [0 0] [0]
>= [1 1] @base + [1 0] @m + [1]
[0 1] [0 0] [0]
= transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) = [1 1] @base + [1 1] @l + [1 0] @m' + [1]
[0 1] [0 0] [0 0] [0]
>= [1 1] @base + [1 1] @l + [1 0] @m' + [1]
[0 1] [0 0] [0 0] [0]
= attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) = [1 1] @base + [1]
[0 1] [0]
>= [1 0] @base + [0]
[0 1] [0]
= @base
transpose(@m) = [1 1] @m + [1]
[1 0] [0]
>= [1 1] @m + [1]
[1 0] [0]
= transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) = [1 1] @m + [1]
[1 0] [0]
>= [1 1] @m + [1]
[1 0] [0]
= transpose#2(split(@m))
transpose#1(nil(),@m) = [1 1] @m + [1]
[1 0] [0]
>= [0]
[0]
= nil()
transpose#2(tuple#2(@l,@m')) = [1 1] @l + [1 1] @m' + [1]
[1 0] [1 1] [0]
>= [1 1] @l + [1 1] @m' + [1]
[0 0] [1 1] [0]
= transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) = [1 1] @l + [1 1] @y + [1 1] @ys + [2]
[0 0] [1 1] [1 1] [1]
>= [1 1] @l + [1 1] @y + [1 1] @ys + [2]
[0 0] [1 1] [1 0] [1]
= ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) = [1 1] @l + [1]
[0 0] [0]
>= [0]
[0]
= nil()
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.a:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.a:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):2
2:W:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
3:W:matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
-->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):4
4:W:matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2):6
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2):5
5:W:matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):1
6:W:matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
-->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):4
7:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
-->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):3
8:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
-->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):3
9:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):11
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):10
10:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
-->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):3
11:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
-->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):9
12:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
-->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):4
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
12: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
9: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
11: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
10: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
8: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
7: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
3: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
4: matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
6: matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
5: matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
1: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
2: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.a:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
******** Step 8.b:3.a:3.b:1.b:1.b:1.b:1.b:1: PredecessorEstimation WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
- Weak DPs:
lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{2}
by application of
Pre({2}) = {1}.
Here rules are labelled as follows:
1: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
2: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
3: lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
4: lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
5: lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
6: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
7: matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
8: matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
9: matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
10: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
11: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
12: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
13: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
14: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
15: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
16: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
******** Step 8.b:3.a:3.b:1.b:1.b:1.b:1.b:2: PredecessorEstimationCP WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
- Weak DPs:
lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
Consider the set of all dependency pairs
1: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
2: lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
3: lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
4: lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
5: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
6: matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
7: matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
8: matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
9: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
10: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
11: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
12: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
13: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
14: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
15: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
16: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
Processor NaturalMI {miDimension = 2, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^2))
SPACE(?,?)on application of the dependency pairs
{1}
These cover all (indirect) predecessors of dependency pairs
{1,9,10,14,15,16}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.b:2.a:1: NaturalMI WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
- Weak DPs:
lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
NaturalMI {miDimension = 2, miDegree = 2, 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_34) = {1},
uargs(c_35) = {1},
uargs(c_37) = {1}
Following symbols are considered usable:
{attach,attach#1,attach#2,makeBase,makeBase#1,mkBase,mkBase#1,split,split#1,split#2,split#3,transAcc
,transAcc#1,transpose,transpose#1,transpose#2,transpose#3,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#
,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
[0]
p(#abs) = [0]
[0]
p(#add) = [0 0] x1 + [0 0] x2 + [0]
[1 0] [1 0] [1]
p(#mult) = [1]
[1]
p(#natmult) = [0 1] x2 + [0]
[0 0] [0]
p(#neg) = [1 1] x1 + [0]
[0 0] [0]
p(#pos) = [0]
[0]
p(#pred) = [0]
[0]
p(#s) = [0 1] x1 + [0]
[0 1] [0]
p(#succ) = [0]
[0]
p(*) = [0]
[0]
p(+) = [1]
[1]
p(::) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(attach) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(attach#1) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(attach#2) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 0] [0]
p(lineMult) = [0 0] x1 + [1]
[1 1] [0]
p(lineMult#1) = [0]
[1]
p(m1) = [0]
[0]
p(m2) = [0]
[0]
p(m3) = [0]
[0]
p(m4) = [0]
[0]
p(makeBase) = [0 0] x1 + [0]
[1 0] [1]
p(makeBase#1) = [0 0] x1 + [0]
[1 0] [1]
p(matrixMult) = [0]
[0]
p(matrixMult') = [0]
[1]
p(matrixMult'#1) = [0]
[1]
p(matrixMult3) = [0]
[0]
p(matrixMultList) = [0]
[0]
p(matrixMultList#1) = [0]
[0]
p(matrixMultOld) = [0]
[0]
p(mkBase) = [0 0] x1 + [0]
[0 1] [0]
p(mkBase#1) = [0 0] x1 + [0]
[0 1] [0]
p(mult) = [0 0] x1 + [1 0] x2 + [1]
[1 0] [0 0] [0]
p(mult#1) = [0 1] x1 + [1]
[0 0] [0]
p(mult#2) = [0]
[0]
p(nil) = [0]
[0]
p(split) = [1 0] x1 + [0]
[0 1] [0]
p(split#1) = [1 0] x1 + [0]
[0 1] [0]
p(split#2) = [1 1] x1 + [1 0] x2 + [0]
[0 0] [0 1] [1]
p(split#3) = [1 0] x1 + [1 1] x2 + [1 1] x3 + [1]
[0 1] [0 0] [0 0] [1]
p(transAcc) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(transAcc#1) = [1 0] x1 + [1 0] x2 + [0]
[0 0] [0 1] [0]
p(transpose) = [1 1] x1 + [0]
[1 0] [0]
p(transpose#1) = [1 1] x2 + [0]
[1 0] [0]
p(transpose#2) = [1 1] x1 + [0]
[1 0] [0]
p(transpose#3) = [1 1] x1 + [1 1] x2 + [0]
[1 1] [0 0] [0]
p(transpose') = [0]
[0]
p(tuple#2) = [1 0] x1 + [1 1] x2 + [0]
[0 1] [0 0] [0]
p(#abs#) = [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(attach#) = [0]
[0]
p(attach#1#) = [0]
[0]
p(attach#2#) = [0]
[0]
p(lineMult#) = [1 0] x2 + [1]
[0 0] [0]
p(lineMult#1#) = [1 0] x1 + [1]
[0 0] [0]
p(m1#) = [0]
[0]
p(m2#) = [0]
[0]
p(m3#) = [0]
[0]
p(m4#) = [0]
[0]
p(makeBase#) = [0]
[0]
p(makeBase#1#) = [0]
[0]
p(matrixMult#) = [1 1] x2 + [1]
[0 0] [0]
p(matrixMult'#) = [1 0] x2 + [1]
[0 0] [0]
p(matrixMult'#1#) = [1 0] x2 + [1]
[0 0] [0]
p(matrixMult3#) = [1 1] x2 + [1 1] x3 + [1]
[0 0] [1 0] [0]
p(matrixMultList#) = [1 1] x2 + [1]
[0 0] [0]
p(matrixMultList#1#) = [1 1] x1 + [1]
[0 0] [0]
p(matrixMultOld#) = [1 1] x2 + [1]
[1 0] [0]
p(mkBase#) = [0]
[0]
p(mkBase#1#) = [0]
[0]
p(mult#) = [0 1] x2 + [1]
[0 0] [0]
p(mult#1#) = [0 0] x1 + [0 1] x2 + [0]
[0 1] [1 0] [0]
p(mult#2#) = [0 1] x1 + [0 0] x3 + [0]
[1 1] [1 1] [0]
p(split#) = [0]
[0]
p(split#1#) = [0]
[0]
p(split#2#) = [0]
[0]
p(split#3#) = [0]
[0]
p(transAcc#) = [0]
[0]
p(transAcc#1#) = [0]
[0]
p(transpose#) = [0]
[0]
p(transpose#1#) = [0]
[0]
p(transpose#2#) = [0]
[0]
p(transpose#3#) = [0]
[0]
p(transpose'#) = [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) = [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) = [1 0] x1 + [0]
[0 0] [0]
p(c_35) = [1 0] x1 + [0]
[0 0] [1]
p(c_36) = [0]
[0]
p(c_37) = [1 0] x1 + [0]
[1 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]
p(c_60) = [0]
[0]
p(c_61) = [0]
[0]
p(c_62) = [0]
[0]
p(c_63) = [0]
[0]
p(c_64) = [0]
[0]
p(c_65) = [0]
[0]
p(c_66) = [0]
[0]
p(c_67) = [0]
[0]
p(c_68) = [0]
[0]
p(c_69) = [0]
[0]
p(c_70) = [0]
[0]
p(c_71) = [0]
[0]
p(c_72) = [0]
[0]
p(c_73) = [0]
[0]
p(c_74) = [0]
[0]
p(c_75) = [0]
[0]
p(c_76) = [0]
[0]
p(c_77) = [0]
[0]
p(c_78) = [0]
[0]
Following rules are strictly oriented:
mult#(@l1,@l2) = [0 1] @l2 + [1]
[0 0] [0]
> [0 1] @l2 + [0]
[0 0] [0]
= c_34(mult#1#(@l1,@l2))
Following rules are (at-least) weakly oriented:
lineMult#(@l,@m2) = [1 0] @m2 + [1]
[0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= lineMult#1#(@m2,@l)
lineMult#1#(::(@x,@xs),@l) = [1 1] @x + [1 0] @xs + [1]
[0 0] [0 0] [0]
>= [1 0] @xs + [1]
[0 0] [0]
= lineMult#(@l,@xs)
lineMult#1#(::(@x,@xs),@l) = [1 1] @x + [1 0] @xs + [1]
[0 0] [0 0] [0]
>= [0 1] @x + [1]
[0 0] [0]
= mult#(@l,@x)
matrixMult#(@m1,@m2) = [1 1] @m2 + [1]
[0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
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]
= lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) = [1 0] @m2 + [1]
[0 0] [0]
>= [1 0] @m2 + [1]
[0 0] [0]
= matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) = [1 1] @m2 + [1 1] @m3 + [1]
[0 0] [1 0] [0]
>= [1 1] @m2 + [1]
[0 0] [0]
= matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) = [1 1] @m2 + [1 1] @m3 + [1]
[0 0] [1 0] [0]
>= [1 1] @m3 + [1]
[0 0] [0]
= matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) = [1 1] @mm + [1]
[0 0] [0]
>= [1 1] @mm + [1]
[0 0] [0]
= matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 1] @ms + [2]
[0 0] [0 0] [0]
>= [1 1] @m + [1]
[0 0] [0]
= matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) = [1 1] @m + [1 1] @ms + [2]
[0 0] [0 0] [0]
>= [1 1] @ms + [1]
[0 0] [0]
= matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) = [1 1] @m2 + [1]
[1 0] [0]
>= [1 1] @m2 + [1]
[0 0] [0]
= matrixMult'#(@m1,transpose(@m2))
mult#1#(::(@x,@xs),@l2) = [0 1] @l2 + [0 0] @xs + [0]
[1 0] [0 1] [1]
>= [0 1] @l2 + [0]
[0 0] [1]
= c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) = [0 0] @xs + [0 0] @y + [0 1] @ys + [1]
[1 1] [1 1] [1 1] [1]
>= [0 1] @ys + [1]
[0 1] [1]
= c_37(mult#(@xs,@ys))
attach(@line,@m) = [1 1] @line + [1 0] @m + [0]
[0 0] [0 1] [0]
>= [1 1] @line + [1 0] @m + [0]
[0 0] [0 1] [0]
= attach#1(@line,@m)
attach#1(::(@x,@xs),@m) = [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [0]
>= [1 0] @m + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [0]
= attach#2(@m,@x,@xs)
attach#1(nil(),@m) = [1 0] @m + [0]
[0 1] [0]
>= [0]
[0]
= nil()
attach#2(::(@l,@ls),@x,@xs) = [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 0] [1]
>= [1 1] @l + [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 0] [0 1] [0 0] [0 0] [1]
= ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) = [1 1] @x + [1 1] @xs + [1]
[0 0] [0 0] [0]
>= [0]
[0]
= nil()
makeBase(@m) = [0 0] @m + [0]
[1 0] [1]
>= [0 0] @m + [0]
[1 0] [1]
= makeBase#1(@m)
makeBase#1(::(@l,@m')) = [0 0] @l + [0 0] @m' + [0]
[1 1] [1 0] [1]
>= [0 0] @l + [0]
[0 1] [0]
= mkBase(@l)
makeBase#1(nil()) = [0]
[1]
>= [0]
[0]
= nil()
mkBase(@m) = [0 0] @m + [0]
[0 1] [0]
>= [0 0] @m + [0]
[0 1] [0]
= mkBase#1(@m)
mkBase#1(::(@l,@m')) = [0 0] @m' + [0]
[0 1] [1]
>= [0 0] @m' + [0]
[0 1] [1]
= ::(nil(),mkBase(@m'))
mkBase#1(nil()) = [0]
[0]
>= [0]
[0]
= nil()
split(@m) = [1 0] @m + [0]
[0 1] [0]
>= [1 0] @m + [0]
[0 1] [0]
= split#1(@m)
split#1(::(@l,@ls)) = [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
>= [1 1] @l + [1 0] @ls + [0]
[0 0] [0 1] [1]
= split#2(@l,@ls)
split#1(nil()) = [0]
[0]
>= [0]
[0]
= tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) = [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
>= [1 0] @ls + [1 1] @x + [1 1] @xs + [1]
[0 1] [0 0] [0 0] [1]
= split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) = [1 0] @ls + [0]
[0 1] [1]
>= [0]
[0]
= tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) = [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
>= [1 1] @m' + [1 1] @x + [1 1] @xs + [1 0] @ys + [1]
[0 0] [0 0] [0 0] [0 1] [1]
= tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) = [1 0] @base + [1 0] @m + [0]
[0 1] [0 0] [0]
>= [1 0] @base + [1 0] @m + [0]
[0 1] [0 0] [0]
= transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) = [1 0] @base + [1 1] @l + [1 0] @m' + [0]
[0 1] [0 0] [0 0] [0]
>= [1 0] @base + [1 1] @l + [1 0] @m' + [0]
[0 1] [0 0] [0 0] [0]
= attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) = [1 0] @base + [0]
[0 1] [0]
>= [1 0] @base + [0]
[0 1] [0]
= @base
transpose(@m) = [1 1] @m + [0]
[1 0] [0]
>= [1 1] @m + [0]
[1 0] [0]
= transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) = [1 1] @m + [0]
[1 0] [0]
>= [1 1] @m + [0]
[1 0] [0]
= transpose#2(split(@m))
transpose#1(nil(),@m) = [1 1] @m + [0]
[1 0] [0]
>= [0]
[0]
= nil()
transpose#2(tuple#2(@l,@m')) = [1 1] @l + [1 1] @m' + [0]
[1 0] [1 1] [0]
>= [1 1] @l + [1 1] @m' + [0]
[0 0] [1 1] [0]
= transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) = [1 1] @l + [1 1] @y + [1 1] @ys + [1]
[0 0] [1 1] [1 1] [1]
>= [1 1] @l + [1 1] @y + [1 1] @ys + [1]
[0 0] [1 1] [1 0] [1]
= ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) = [1 1] @l + [0]
[0 0] [0]
>= [0]
[0]
= nil()
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.b:2.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.b:2.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
-->_1 lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x):3
-->_1 lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs):2
2:W:lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
-->_1 lineMult#(@l,@m2) -> lineMult#1#(@m2,@l):1
3:W:lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
4:W:matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
-->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):5
5:W:matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2):7
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2):6
6:W:matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
-->_1 lineMult#(@l,@m2) -> lineMult#1#(@m2,@l):1
7:W:matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
-->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):5
8:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
-->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):4
9:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
-->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):4
10:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):12
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):11
11:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
-->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):4
12:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
-->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):10
13:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
-->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):5
14:W:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):15
15:W:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)):16
16:W:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):14
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
13: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
10: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
12: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
11: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
9: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
8: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
4: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
5: matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2)
7: matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2)
6: matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2)
1: lineMult#(@l,@m2) -> lineMult#1#(@m2,@l)
2: lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs)
3: lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x)
14: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
16: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
15: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
********* Step 8.b:3.a:3.b:1.b:1.b:1.b:1.b:2.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
*** Step 8.b:3.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):2
2:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
3:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
4:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):5
5:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):22
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
6:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
7:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):8
8:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):7
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
9:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):17
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
10:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):11
11:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
12:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):13
13:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):14
14:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):12
15:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):16
16:S:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
17:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):18
18:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):19
-->_2 split#(@m) -> c_39(split#1#(@m)):12
19:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):20
20:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):17
21:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
22:W:lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
-->_1 lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)):23
23:W:lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):24
-->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):22
24:W:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
-->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):25
25:W:mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
-->_1 mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)):26
26:W:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
-->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):24
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
22: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l))
23: lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs))
24: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2))
26: mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys))
25: mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs))
*** Step 8.b:3.b:2: SimplifyRHS WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/2,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):2
2:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
3:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
4:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)):5
5:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2))
-->_2 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
6:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
7:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):8
8:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):7
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
9:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):17
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
10:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):11
11:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
12:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):13
13:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):14
14:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):12
15:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):16
16:S:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
17:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):18
18:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):19
-->_2 split#(@m) -> c_39(split#1#(@m)):12
19:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):20
20:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):17
21:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
*** Step 8.b:3.b:3: Decompose WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/3,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
Problem (S)
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/3,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
**** Step 8.b:3.b:3.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):2
2:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
3:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
4:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):5
5:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
6:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
7:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):8
8:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):7
9:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):17
10:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):11
11:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
12:W:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):13
13:W:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):14
14:W:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):12
15:W:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):16
16:W:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
17:W:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):18
18:W:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_2 split#(@m) -> c_39(split#1#(@m)):12
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):19
19:W:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):20
20:W:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):17
21:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
9: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
17: transpose#(@m) -> c_48(transpose#1#(@m,@m))
20: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
19: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
18: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
12: split#(@m) -> c_39(split#1#(@m))
14: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
13: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
4: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
5: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
15: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
16: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
**** Step 8.b:3.b:3.a:2: SimplifyRHS WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):2
2:S:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
3:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
6:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
7:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):8
8:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):3
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):7
10:S:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):11
11:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):10
21:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
transpose'#(@m) -> c_54(makeBase#(@m))
**** Step 8.b:3.b:3.a:3: UsableRules WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
transpose'#(@m) -> c_54(makeBase#(@m))
**** Step 8.b:3.b:3.a:4: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
4: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
Consider the set of all dependency pairs
1: makeBase#(@m) -> c_19(makeBase#1#(@m))
2: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
3: mkBase#(@m) -> c_31(mkBase#1#(@m))
4: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
5: matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
6: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
7: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
8: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
9: transpose'#(@m) -> c_54(makeBase#(@m))
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
{2,4}
These cover all (indirect) predecessors of dependency pairs
{2,3,4,6,9}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
***** Step 8.b:3.b:3.a:4.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_19) = {1},
uargs(c_20) = {1},
uargs(c_22) = {1},
uargs(c_26) = {1,2},
uargs(c_27) = {1},
uargs(c_28) = {1,2},
uargs(c_31) = {1},
uargs(c_32) = {1},
uargs(c_54) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [1]
p(#abs) = [1] x1 + [7]
p(#add) = [2] x2 + [0]
p(#mult) = [2] x1 + [0]
p(#natmult) = [1] x1 + [6] x2 + [0]
p(#neg) = [1] x1 + [2]
p(#pos) = [0]
p(#pred) = [2] x1 + [3]
p(#s) = [1] x1 + [2]
p(#succ) = [3]
p(*) = [0]
p(+) = [0]
p(::) = [1] x1 + [1] x2 + [2]
p(attach) = [4] x2 + [0]
p(attach#1) = [1] x1 + [0]
p(attach#2) = [0]
p(lineMult) = [7] x1 + [1] x2 + [0]
p(lineMult#1) = [4] x1 + [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [5] x1 + [0]
p(matrixMult) = [0]
p(matrixMult') = [0]
p(matrixMult'#1) = [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [1]
p(mkBase#1) = [0]
p(mult) = [1] x1 + [0]
p(mult#1) = [0]
p(mult#2) = [0]
p(nil) = [0]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [1] x1 + [0]
p(transAcc) = [2] x2 + [0]
p(transAcc#1) = [0]
p(transpose) = [1] x1 + [0]
p(transpose#1) = [0]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [4] x1 + [0]
p(makeBase#1#) = [4] x1 + [0]
p(matrixMult#) = [4] x2 + [1]
p(matrixMult'#) = [0]
p(matrixMult'#1#) = [0]
p(matrixMult3#) = [4] x2 + [5] x3 + [6]
p(matrixMultList#) = [4] x2 + [6]
p(matrixMultList#1#) = [4] x1 + [5]
p(matrixMultOld#) = [0]
p(mkBase#) = [4] x1 + [4]
p(mkBase#1#) = [4] x1 + [4]
p(mult#) = [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [0]
p(transAcc#1#) = [0]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [4] x1 + [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) = [1] x2 + [0]
p(c_19) = [1] x1 + [0]
p(c_20) = [1] x1 + [0]
p(c_21) = [0]
p(c_22) = [1] x1 + [0]
p(c_23) = [0]
p(c_24) = [0]
p(c_25) = [0]
p(c_26) = [1] x1 + [1] x2 + [4]
p(c_27) = [1] x1 + [1]
p(c_28) = [1] x1 + [1] x2 + [1]
p(c_29) = [0]
p(c_30) = [0]
p(c_31) = [1] x1 + [0]
p(c_32) = [1] x1 + [4]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [4] x1 + [0]
p(c_38) = [0]
p(c_39) = [4] x1 + [0]
p(c_40) = [4] x1 + [0]
p(c_41) = [0]
p(c_42) = [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [2] x1 + [0]
p(c_46) = [1] x1 + [0]
p(c_47) = [0]
p(c_48) = [1] x1 + [0]
p(c_49) = [4] x1 + [0]
p(c_50) = [0]
p(c_51) = [1] x1 + [0]
p(c_52) = [2] x1 + [0]
p(c_53) = [0]
p(c_54) = [1] x1 + [0]
p(c_55) = [0]
p(c_56) = [0]
p(c_57) = [1] x1 + [1] x2 + [0]
p(c_58) = [0]
p(c_59) = [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [4] x1 + [0]
p(c_65) = [0]
p(c_66) = [0]
p(c_67) = [1] x1 + [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
makeBase#1#(::(@l,@m')) = [4] @l + [4] @m' + [8]
> [4] @l + [4]
= c_20(mkBase#(@l))
mkBase#1#(::(@l,@m')) = [4] @l + [4] @m' + [12]
> [4] @m' + [8]
= c_32(mkBase#(@m'))
Following rules are (at-least) weakly oriented:
makeBase#(@m) = [4] @m + [0]
>= [4] @m + [0]
= c_19(makeBase#1#(@m))
matrixMult#(@m1,@m2) = [4] @m2 + [1]
>= [4] @m2 + [0]
= c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) = [4] @m2 + [5] @m3 + [6]
>= [4] @m2 + [4] @m3 + [6]
= c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) = [4] @mm + [6]
>= [4] @mm + [6]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) = [4] @m + [4] @ms + [13]
>= [4] @m + [4] @ms + [8]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
mkBase#(@m) = [4] @m + [4]
>= [4] @m + [4]
= c_31(mkBase#1#(@m))
transpose'#(@m) = [4] @m + [0]
>= [4] @m + [0]
= c_54(makeBase#(@m))
***** Step 8.b:3.b:3.a:4.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
mkBase#(@m) -> c_31(mkBase#1#(@m))
- Weak DPs:
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
***** Step 8.b:3.b:3.a:4.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
- Weak DPs:
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):2
2:W:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):7
3:W:matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
-->_1 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
4:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):3
-->_1 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):3
5:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):6
6:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):5
-->_2 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):3
7:W:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):8
8:W:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):7
9:W:transpose'#(@m) -> c_54(makeBase#(@m))
-->_1 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
2: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
7: mkBase#(@m) -> c_31(mkBase#1#(@m))
8: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
***** Step 8.b:3.b:3.a:4.b:2: SimplifyRHS WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:makeBase#(@m) -> c_19(makeBase#1#(@m))
3:W:matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
-->_1 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
4:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):3
-->_1 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):3
5:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):6
6:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):5
-->_2 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):3
9:W:transpose'#(@m) -> c_54(makeBase#(@m))
-->_1 makeBase#(@m) -> c_19(makeBase#1#(@m)):1
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
makeBase#(@m) -> c_19()
***** Step 8.b:3.b:3.a:4.b:3: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19()
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/0,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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: makeBase#(@m) -> c_19()
Consider the set of all dependency pairs
1: makeBase#(@m) -> c_19()
2: matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
3: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
4: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
5: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
6: transpose'#(@m) -> c_54(makeBase#(@m))
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,3,6}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
****** Step 8.b:3.b:3.a:4.b:3.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
makeBase#(@m) -> c_19()
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/0,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_26) = {1,2},
uargs(c_27) = {1},
uargs(c_28) = {1,2},
uargs(c_54) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
p(#abs) = [0]
p(#add) = [1] x1 + [0]
p(#mult) = [0]
p(#natmult) = [0]
p(#neg) = [5]
p(#pos) = [0]
p(#pred) = [0]
p(#s) = [1] x1 + [0]
p(#succ) = [0]
p(*) = [0]
p(+) = [0]
p(::) = [1] x1 + [1] x2 + [1]
p(attach) = [6] x2 + [0]
p(attach#1) = [1] x1 + [0]
p(attach#2) = [0]
p(lineMult) = [0]
p(lineMult#1) = [1] x1 + [7]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [2] x1 + [0]
p(matrixMult) = [0]
p(matrixMult') = [0]
p(matrixMult'#1) = [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [0]
p(mkBase#1) = [0]
p(mult) = [3]
p(mult#1) = [4] x1 + [7]
p(mult#2) = [0]
p(nil) = [2]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [2] x2 + [1]
p(transAcc#1) = [6] x1 + [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [1] x1 + [1]
p(makeBase#1#) = [0]
p(matrixMult#) = [1] x2 + [1]
p(matrixMult'#) = [0]
p(matrixMult'#1#) = [0]
p(matrixMult3#) = [4] x2 + [1] x3 + [4]
p(matrixMultList#) = [4] x2 + [1]
p(matrixMultList#1#) = [4] x1 + [1]
p(matrixMultOld#) = [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [0]
p(transAcc#1#) = [0]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [1] x1 + [1]
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) = [1] x1 + [0]
p(c_23) = [0]
p(c_24) = [0]
p(c_25) = [0]
p(c_26) = [1] x1 + [2] x2 + [1]
p(c_27) = [1] x1 + [0]
p(c_28) = [1] x1 + [4] x2 + [0]
p(c_29) = [0]
p(c_30) = [1] x1 + [0]
p(c_31) = [1] x1 + [0]
p(c_32) = [1] x1 + [0]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [2] x1 + [0]
p(c_38) = [0]
p(c_39) = [1] x1 + [0]
p(c_40) = [0]
p(c_41) = [0]
p(c_42) = [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [0]
p(c_46) = [1] x1 + [0]
p(c_47) = [0]
p(c_48) = [0]
p(c_49) = [4] x2 + [0]
p(c_50) = [0]
p(c_51) = [0]
p(c_52) = [1] x1 + [0]
p(c_53) = [0]
p(c_54) = [1] x1 + [0]
p(c_55) = [0]
p(c_56) = [1] x1 + [0]
p(c_57) = [1] x2 + [0]
p(c_58) = [0]
p(c_59) = [1] x1 + [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [4] x1 + [0]
p(c_66) = [0]
p(c_67) = [0]
p(c_68) = [1] x1 + [0]
p(c_69) = [0]
p(c_70) = [1] x2 + [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
makeBase#(@m) = [1] @m + [1]
> [0]
= c_19()
Following rules are (at-least) weakly oriented:
matrixMult#(@m1,@m2) = [1] @m2 + [1]
>= [1] @m2 + [1]
= c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) = [4] @m2 + [1] @m3 + [4]
>= [2] @m2 + [1] @m3 + [4]
= c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) = [4] @mm + [1]
>= [4] @mm + [1]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) = [4] @m + [4] @ms + [5]
>= [4] @m + [4] @ms + [5]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) = [1] @m + [1]
>= [1] @m + [1]
= c_54(makeBase#(@m))
****** Step 8.b:3.b:3.a:4.b:3.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
makeBase#(@m) -> c_19()
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/0,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
****** Step 8.b:3.b:3.a:4.b:3.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
makeBase#(@m) -> c_19()
matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/0,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:makeBase#(@m) -> c_19()
2:W:matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
-->_1 makeBase#(@m) -> c_19():1
3:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):2
-->_1 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):2
4:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):5
5:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):4
-->_2 matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2)):2
6:W:transpose'#(@m) -> c_54(makeBase#(@m))
-->_1 makeBase#(@m) -> c_19():1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
6: transpose'#(@m) -> c_54(makeBase#(@m))
4: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
5: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
3: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
2: matrixMult#(@m1,@m2) -> c_22(makeBase#(@m2))
1: makeBase#(@m) -> c_19()
****** Step 8.b:3.b:3.a:4.b:3.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/0,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
**** Step 8.b:3.b:3.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak DPs:
makeBase#(@m) -> c_19(makeBase#1#(@m))
makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
mkBase#(@m) -> c_31(mkBase#1#(@m))
mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_3 makeBase#(@m) -> c_19(makeBase#1#(@m)):18
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
2:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):3
3:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
4:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):1
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):1
5:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):6
6:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):5
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):1
7:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):13
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
8:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):9
9:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):10
10:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):8
11:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):12
12:S:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
13:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):14
14:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):15
-->_2 split#(@m) -> c_39(split#1#(@m)):8
15:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):16
16:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):13
17:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_2 makeBase#(@m) -> c_19(makeBase#1#(@m)):18
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
18:W:makeBase#(@m) -> c_19(makeBase#1#(@m))
-->_1 makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)):19
19:W:makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):20
20:W:mkBase#(@m) -> c_31(mkBase#1#(@m))
-->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):21
21:W:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
-->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):20
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
18: makeBase#(@m) -> c_19(makeBase#1#(@m))
19: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l))
20: mkBase#(@m) -> c_31(mkBase#1#(@m))
21: mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m'))
**** Step 8.b:3.b:3.b:2: SimplifyRHS WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/3
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/2,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
2:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):3
3:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
4:S:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):1
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):1
5:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):6
6:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):5
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))
,makeBase#(@m2)):1
7:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):13
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
8:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):9
9:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):10
10:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):8
11:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):12
12:S:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
13:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):14
14:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):15
-->_2 split#(@m) -> c_39(split#1#(@m)):8
15:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):16
16:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):13
17:S:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
**** Step 8.b:3.b:3.b:3: Decompose WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/2
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/2,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
Problem (S)
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/2,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
***** Step 8.b:3.b:3.b:3.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/2
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2)))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
2:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):3
3:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
4:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):1
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):1
5:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):6
6:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):1
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):5
7:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):13
8:W:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):9
9:W:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):10
10:W:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):8
11:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):12
12:S:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
13:W:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):14
14:W:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_2 split#(@m) -> c_39(split#1#(@m)):8
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):15
15:W:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):16
16:W:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):13
17:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
7: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
13: transpose#(@m) -> c_48(transpose#1#(@m,@m))
16: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
15: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
14: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
8: split#(@m) -> c_39(split#1#(@m))
10: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
9: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
2: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
3: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
***** Step 8.b:3.b:3.b:3.a:2: SimplifyRHS WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/2
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2)))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
4:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):1
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):1
5:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):6
6:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):1
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):5
11:S:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):12
12:S:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
17:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
***** Step 8.b:3.b:3.b:3.a:3: UsableRules WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
***** Step 8.b:3.b:3.b:3.a:4: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
3: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
Consider the set of all dependency pairs
1: matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
2: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
3: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
4: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
5: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
6: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
7: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
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
{3}
These cover all (indirect) predecessors of dependency pairs
{3,4,7}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
****** Step 8.b:3.b:3.b:3.a:4.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_26) = {1,2},
uargs(c_27) = {1},
uargs(c_28) = {1,2},
uargs(c_45) = {1},
uargs(c_46) = {1},
uargs(c_54) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [5]
p(#abs) = [0]
p(#add) = [0]
p(#mult) = [0]
p(#natmult) = [1] x1 + [3]
p(#neg) = [1] x1 + [0]
p(#pos) = [1]
p(#pred) = [4]
p(#s) = [4]
p(#succ) = [0]
p(*) = [0]
p(+) = [0]
p(::) = [1] x1 + [1] x2 + [2]
p(attach) = [0]
p(attach#1) = [0]
p(attach#2) = [1] x2 + [0]
p(lineMult) = [1] x1 + [0]
p(lineMult#1) = [1]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [3]
p(matrixMult) = [0]
p(matrixMult') = [0]
p(matrixMult'#1) = [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [2]
p(mkBase#1) = [1]
p(mult) = [2] x1 + [6]
p(mult#1) = [0]
p(mult#2) = [3]
p(nil) = [0]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [0]
p(transAcc#1) = [2] x1 + [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [0]
p(makeBase#1#) = [0]
p(matrixMult#) = [2] x2 + [1]
p(matrixMult'#) = [2] x2 + [0]
p(matrixMult'#1#) = [4] x1 + [1] x2 + [0]
p(matrixMult3#) = [4] x2 + [2] x3 + [7]
p(matrixMultList#) = [4] x2 + [0]
p(matrixMultList#1#) = [4] x1 + [0]
p(matrixMultOld#) = [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [1] x2 + [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [1] x1 + [1]
p(transAcc#1#) = [1] x1 + [1]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [1] x1 + [5]
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) = [2] x2 + [0]
p(c_14) = [0]
p(c_15) = [0]
p(c_16) = [0]
p(c_17) = [1] x3 + [0]
p(c_18) = [0]
p(c_19) = [0]
p(c_20) = [0]
p(c_21) = [0]
p(c_22) = [1] x1 + [0]
p(c_23) = [4] x1 + [0]
p(c_24) = [1] x1 + [0]
p(c_25) = [1]
p(c_26) = [1] x1 + [1] x2 + [5]
p(c_27) = [1] x1 + [0]
p(c_28) = [1] x1 + [1] x2 + [1]
p(c_29) = [0]
p(c_30) = [0]
p(c_31) = [1] x1 + [0]
p(c_32) = [1] x1 + [0]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [0]
p(c_38) = [0]
p(c_39) = [0]
p(c_40) = [0]
p(c_41) = [0]
p(c_42) = [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [1] x1 + [0]
p(c_46) = [1] x1 + [0]
p(c_47) = [0]
p(c_48) = [0]
p(c_49) = [2] x1 + [2]
p(c_50) = [0]
p(c_51) = [0]
p(c_52) = [0]
p(c_53) = [1]
p(c_54) = [1] x1 + [0]
p(c_55) = [0]
p(c_56) = [1] x1 + [0]
p(c_57) = [1] x1 + [1] x2 + [0]
p(c_58) = [0]
p(c_59) = [2] x2 + [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [1] x1 + [0]
p(c_66) = [0]
p(c_67) = [1] x1 + [0]
p(c_68) = [1] x1 + [0]
p(c_69) = [0]
p(c_70) = [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
transAcc#1#(::(@l,@m'),@base) = [1] @l + [1] @m' + [3]
> [1] @m' + [1]
= c_46(transAcc#(@m',@base))
Following rules are (at-least) weakly oriented:
matrixMult#(@m1,@m2) = [2] @m2 + [1]
>= [1] @m2 + [1]
= c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) = [4] @m2 + [2] @m3 + [7]
>= [2] @m2 + [2] @m3 + [7]
= c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) = [4] @mm + [0]
>= [4] @mm + [0]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) = [4] @m + [4] @ms + [8]
>= [2] @m + [4] @ms + [2]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) = [1] @m + [1]
>= [1] @m + [1]
= c_45(transAcc#1#(@m,@base))
transpose'#(@m) = [1] @m + [5]
>= [1] @m + [1]
= c_54(transAcc#(@m,makeBase(@m)))
****** Step 8.b:3.b:3.b:3.a:4.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
****** Step 8.b:3.b:3.b:3.a:4.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22(transAcc#(@m2,makeBase(@m2)))
Consider the set of all dependency pairs
1: matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
2: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
3: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
4: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
5: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
6: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
7: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
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,3,7}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
******* Step 8.b:3.b:3.b:3.a:4.b:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_26) = {1,2},
uargs(c_27) = {1},
uargs(c_28) = {1,2},
uargs(c_45) = {1},
uargs(c_46) = {1},
uargs(c_54) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
p(#abs) = [0]
p(#add) = [5] x1 + [0]
p(#mult) = [0]
p(#natmult) = [0]
p(#neg) = [1] x1 + [0]
p(#pos) = [2]
p(#pred) = [1] x1 + [3]
p(#s) = [2]
p(#succ) = [0]
p(*) = [0]
p(+) = [0]
p(::) = [1] x2 + [7]
p(attach) = [4] x2 + [0]
p(attach#1) = [0]
p(attach#2) = [0]
p(lineMult) = [0]
p(lineMult#1) = [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [0]
p(matrixMult) = [0]
p(matrixMult') = [0]
p(matrixMult'#1) = [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [0]
p(mkBase#1) = [0]
p(mult) = [0]
p(mult#1) = [0]
p(mult#2) = [0]
p(nil) = [3]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [3] x2 + [0]
p(transAcc#1) = [1] x1 + [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [0]
p(makeBase#1#) = [0]
p(matrixMult#) = [2]
p(matrixMult'#) = [0]
p(matrixMult'#1#) = [0]
p(matrixMult3#) = [7]
p(matrixMultList#) = [1] x2 + [1]
p(matrixMultList#1#) = [1] x1 + [1]
p(matrixMultOld#) = [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [0]
p(transAcc#1#) = [0]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [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) = [1] x2 + [1] x3 + [1] x4 + [2] x5 + [1] x6 + [0]
p(c_16) = [1] x1 + [1] x4 + [0]
p(c_17) = [2] x2 + [2] x3 + [4] x4 + [1] x5 + [4] x6 + [1]
p(c_18) = [0]
p(c_19) = [1]
p(c_20) = [0]
p(c_21) = [0]
p(c_22) = [4] x1 + [1]
p(c_23) = [4] x1 + [1]
p(c_24) = [2]
p(c_25) = [1]
p(c_26) = [2] x1 + [1] x2 + [1]
p(c_27) = [1] x1 + [0]
p(c_28) = [1] x1 + [1] x2 + [3]
p(c_29) = [0]
p(c_30) = [4] x1 + [1] x2 + [0]
p(c_31) = [1] x1 + [0]
p(c_32) = [0]
p(c_33) = [0]
p(c_34) = [4] x1 + [0]
p(c_35) = [1] x1 + [0]
p(c_36) = [0]
p(c_37) = [1] x1 + [0]
p(c_38) = [1] x1 + [0]
p(c_39) = [0]
p(c_40) = [1] x1 + [0]
p(c_41) = [0]
p(c_42) = [1] x1 + [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [4] x1 + [0]
p(c_46) = [4] x1 + [0]
p(c_47) = [0]
p(c_48) = [2] x1 + [0]
p(c_49) = [4] x2 + [0]
p(c_50) = [0]
p(c_51) = [1] x1 + [0]
p(c_52) = [1] x1 + [0]
p(c_53) = [2]
p(c_54) = [4] x1 + [0]
p(c_55) = [0]
p(c_56) = [0]
p(c_57) = [0]
p(c_58) = [1] x1 + [0]
p(c_59) = [1] x1 + [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [0]
p(c_66) = [0]
p(c_67) = [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [1] x2 + [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [2]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
matrixMult#(@m1,@m2) = [2]
> [1]
= c_22(transAcc#(@m2,makeBase(@m2)))
Following rules are (at-least) weakly oriented:
matrixMult3#(@m1,@m2,@m3) = [7]
>= [7]
= c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) = [1] @mm + [1]
>= [1] @mm + [1]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) = [1] @ms + [8]
>= [1] @ms + [6]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) = [0]
>= [0]
= c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) = [0]
>= [0]
= c_46(transAcc#(@m',@base))
transpose'#(@m) = [0]
>= [0]
= c_54(transAcc#(@m,makeBase(@m)))
******* Step 8.b:3.b:3.b:3.a:4.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******* Step 8.b:3.b:3.b:3.a:4.b:1.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
Consider the set of all dependency pairs
1: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
2: matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
3: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
4: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
5: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
6: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
7: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
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,3,6,7}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
******** Step 8.b:3.b:3.b:3.a:4.b:1.b:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_26) = {1,2},
uargs(c_27) = {1},
uargs(c_28) = {1,2},
uargs(c_45) = {1},
uargs(c_46) = {1},
uargs(c_54) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
p(#abs) = [0]
p(#add) = [1] x1 + [0]
p(#mult) = [4] x1 + [3]
p(#natmult) = [0]
p(#neg) = [0]
p(#pos) = [3]
p(#pred) = [0]
p(#s) = [1] x1 + [0]
p(#succ) = [0]
p(*) = [0]
p(+) = [0]
p(::) = [1] x1 + [1] x2 + [1]
p(attach) = [6] x2 + [0]
p(attach#1) = [3]
p(attach#2) = [0]
p(lineMult) = [0]
p(lineMult#1) = [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [1] x1 + [1]
p(makeBase#1) = [0]
p(matrixMult) = [0]
p(matrixMult') = [1] x1 + [0]
p(matrixMult'#1) = [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [0]
p(mkBase#1) = [0]
p(mult) = [0]
p(mult#1) = [3]
p(mult#2) = [0]
p(nil) = [3]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [1] x2 + [1]
p(transAcc#1) = [1] x1 + [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [2]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [1] x1 + [2]
p(m4#) = [1]
p(makeBase#) = [0]
p(makeBase#1#) = [2] x1 + [0]
p(matrixMult#) = [1] x2 + [1]
p(matrixMult'#) = [1] x1 + [0]
p(matrixMult'#1#) = [1] x1 + [1]
p(matrixMult3#) = [1] x2 + [4] x3 + [5]
p(matrixMultList#) = [2] x2 + [1]
p(matrixMultList#1#) = [2] x1 + [1]
p(matrixMultOld#) = [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [2]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [1] x1 + [1]
p(transAcc#1#) = [1] x1 + [0]
p(transpose#) = [1] x1 + [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [4] x1 + [4]
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) = [1] x3 + [0]
p(c_17) = [1] x7 + [0]
p(c_18) = [2]
p(c_19) = [0]
p(c_20) = [0]
p(c_21) = [1]
p(c_22) = [1] x1 + [0]
p(c_23) = [0]
p(c_24) = [2]
p(c_25) = [0]
p(c_26) = [4] x1 + [1] x2 + [0]
p(c_27) = [1] x1 + [0]
p(c_28) = [1] x1 + [2] x2 + [0]
p(c_29) = [0]
p(c_30) = [0]
p(c_31) = [0]
p(c_32) = [0]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [0]
p(c_38) = [0]
p(c_39) = [0]
p(c_40) = [0]
p(c_41) = [0]
p(c_42) = [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [1] x1 + [0]
p(c_46) = [1] x1 + [0]
p(c_47) = [0]
p(c_48) = [0]
p(c_49) = [0]
p(c_50) = [0]
p(c_51) = [0]
p(c_52) = [0]
p(c_53) = [1]
p(c_54) = [4] x1 + [0]
p(c_55) = [0]
p(c_56) = [0]
p(c_57) = [0]
p(c_58) = [0]
p(c_59) = [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [0]
p(c_66) = [0]
p(c_67) = [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
transAcc#(@m,@base) = [1] @m + [1]
> [1] @m + [0]
= c_45(transAcc#1#(@m,@base))
Following rules are (at-least) weakly oriented:
matrixMult#(@m1,@m2) = [1] @m2 + [1]
>= [1] @m2 + [1]
= c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) = [1] @m2 + [4] @m3 + [5]
>= [1] @m2 + [4] @m3 + [5]
= c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) = [2] @mm + [1]
>= [2] @mm + [1]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) = [2] @m + [2] @ms + [3]
>= [2] @m + [2] @ms + [3]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#1#(::(@l,@m'),@base) = [1] @l + [1] @m' + [1]
>= [1] @m' + [1]
= c_46(transAcc#(@m',@base))
transpose'#(@m) = [4] @m + [4]
>= [4] @m + [4]
= c_54(transAcc#(@m,makeBase(@m)))
******** Step 8.b:3.b:3.b:3.a:4.b:1.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******** Step 8.b:3.b:3.b:3.a:4.b:1.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):5
2:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2))):1
-->_1 matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2))):1
3:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):4
4:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
-->_2 matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2))):1
5:W:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):6
6:W:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):5
7:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):5
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
7: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
3: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
4: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
2: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
1: matrixMult#(@m1,@m2) -> c_22(transAcc#(@m2,makeBase(@m2)))
5: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
6: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
******** Step 8.b:3.b:3.b:3.a:4.b:1.b:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
***** Step 8.b:3.b:3.b:3.b:1: PredecessorEstimation WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/2
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{3,14}
by application of
Pre({3,14}) = {}.
Here rules are labelled as follows:
1: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
2: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
3: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
4: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
5: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
6: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
7: split#(@m) -> c_39(split#1#(@m))
8: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
9: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
10: transpose#(@m) -> c_48(transpose#1#(@m,@m))
11: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
12: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
13: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
14: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
15: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
16: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
17: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
***** Step 8.b:3.b:3.b:3.b:2: RemoveWeakSuffixes WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/2
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):2
2:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
3:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):4
4:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):13
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
5:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):9
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
6:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):7
7:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):8
8:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):6
9:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):10
10:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):11
-->_2 split#(@m) -> c_39(split#1#(@m)):6
11:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):12
12:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):9
13:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2)))
-->_2 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
14:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):13
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):13
15:W:transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
-->_1 transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)):16
16:W:transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
17:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
-->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):15
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
17: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)))
15: transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base))
16: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base))
***** Step 8.b:3.b:3.b:3.b:3: SimplifyRHS WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/2
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):2
2:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
3:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):4
4:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):13
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
5:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):9
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
6:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):7
7:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):8
8:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):6
9:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):10
10:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):11
-->_2 split#(@m) -> c_39(split#1#(@m)):6
11:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):12
12:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):9
13:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2)))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
14:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):13
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))
,transAcc#(@m2,makeBase(@m2))):13
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
***** Step 8.b:3.b:3.b:3.b:4: Decompose WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/1,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
Problem (S)
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/1,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
****** Step 8.b:3.b:3.b:3.b:4.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):2
2:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
3:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):4
4:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):13
5:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):9
6:W:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):7
7:W:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):8
8:W:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):6
9:W:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):10
10:W:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_2 split#(@m) -> c_39(split#1#(@m)):6
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):11
11:W:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):12
12:W:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):9
13:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
14:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):13
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):13
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
9: transpose#(@m) -> c_48(transpose#1#(@m,@m))
12: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
11: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
10: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
6: split#(@m) -> c_39(split#1#(@m))
8: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
7: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
****** Step 8.b:3.b:3.b:3.b:4.a:2: SimplifyRHS WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):2
2:S:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
3:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):4
4:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):13
5:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
13:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):1
14:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):13
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):13
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
****** Step 8.b:3.b:3.b:3.b:4.a:3: DecomposeDG WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
and a lower component
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
Further, following extension rules are added to the lower component.
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
******* Step 8.b:3.b:3.b:3.b:4.a:3.a:1: PredecessorEstimation WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimation {onSelection = all simple predecessor estimation selector}
+ Details:
We estimate the number of application of
{1,3}
by application of
Pre({1,3}) = {}.
Here rules are labelled as follows:
1: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
2: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
3: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
4: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
******* Step 8.b:3.b:3.b:3.b:4.a:3.a:2: RemoveWeakSuffixes WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
- Weak DPs:
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
2:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
3:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):1
4:W:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
4: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)))
2: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
******* Step 8.b:3.b:3.b:3.b:4.a:3.a:3: SimplifyRHS WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):3
3:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):1
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
******* Step 8.b:3.b:3.b:3.b:4.a:3.a:4: UsableRules WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
******* Step 8.b:3.b:3.b:3.b:4.a:3.a:5: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
Consider the set of all dependency pairs
1: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
2: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
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 8.b:3.b:3.b:3.b:4.a:3.a:5.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_27) = {1},
uargs(c_28) = {1}
Following symbols are considered usable:
{matrixMult,matrixMult',matrixMult'#1,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#
,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [1]
p(#abs) = [0]
p(#add) = [1] x1 + [1]
p(#mult) = [0]
p(#natmult) = [0]
p(#neg) = [0]
p(#pos) = [1] x1 + [0]
p(#pred) = [4] x1 + [0]
p(#s) = [1] x1 + [0]
p(#succ) = [1] x1 + [0]
p(*) = [0]
p(+) = [0]
p(::) = [1] x2 + [2]
p(attach) = [0]
p(attach#1) = [0]
p(attach#2) = [0]
p(lineMult) = [3]
p(lineMult#1) = [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [0]
p(matrixMult) = [1] x1 + [1]
p(matrixMult') = [1] x1 + [0]
p(matrixMult'#1) = [1] x1 + [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [0]
p(mkBase#1) = [0]
p(mult) = [0]
p(mult#1) = [0]
p(mult#2) = [0]
p(nil) = [0]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [0]
p(transAcc#1) = [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [1] x2 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [0]
p(makeBase#1#) = [0]
p(matrixMult#) = [0]
p(matrixMult'#) = [0]
p(matrixMult'#1#) = [0]
p(matrixMult3#) = [0]
p(matrixMultList#) = [4] x1 + [4] x2 + [5]
p(matrixMultList#1#) = [4] x1 + [4] x2 + [3]
p(matrixMultOld#) = [0]
p(mkBase#) = [0]
p(mkBase#1#) = [0]
p(mult#) = [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [0]
p(transAcc#1#) = [0]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [0]
p(c_1) = [0]
p(c_2) = [0]
p(c_3) = [0]
p(c_4) = [0]
p(c_5) = [0]
p(c_6) = [0]
p(c_7) = [0]
p(c_8) = [0]
p(c_9) = [0]
p(c_10) = [0]
p(c_11) = [0]
p(c_12) = [0]
p(c_13) = [0]
p(c_14) = [0]
p(c_15) = [0]
p(c_16) = [0]
p(c_17) = [0]
p(c_18) = [0]
p(c_19) = [0]
p(c_20) = [0]
p(c_21) = [0]
p(c_22) = [0]
p(c_23) = [0]
p(c_24) = [0]
p(c_25) = [0]
p(c_26) = [0]
p(c_27) = [1] x1 + [2]
p(c_28) = [1] x1 + [0]
p(c_29) = [0]
p(c_30) = [0]
p(c_31) = [1] x1 + [0]
p(c_32) = [0]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [1] x1 + [0]
p(c_36) = [0]
p(c_37) = [0]
p(c_38) = [0]
p(c_39) = [2] x1 + [0]
p(c_40) = [0]
p(c_41) = [0]
p(c_42) = [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [0]
p(c_46) = [2] x1 + [0]
p(c_47) = [0]
p(c_48) = [0]
p(c_49) = [0]
p(c_50) = [0]
p(c_51) = [1] x1 + [0]
p(c_52) = [2] x1 + [0]
p(c_53) = [0]
p(c_54) = [0]
p(c_55) = [0]
p(c_56) = [0]
p(c_57) = [1] x2 + [0]
p(c_58) = [0]
p(c_59) = [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [1] x1 + [0]
p(c_66) = [0]
p(c_67) = [4] x1 + [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [1] x2 + [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
matrixMultList#1#(::(@m,@ms),@acc) = [4] @acc + [4] @ms + [11]
> [4] @acc + [4] @ms + [9]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
Following rules are (at-least) weakly oriented:
matrixMultList#(@acc,@mm) = [4] @acc + [4] @mm + [5]
>= [4] @acc + [4] @mm + [5]
= c_27(matrixMultList#1#(@mm,@acc))
matrixMult(@m1,@m2) = [1] @m1 + [1]
>= [1] @m1 + [0]
= matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) = [1] @m1 + [0]
>= [1] @m1 + [0]
= matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) = [1] @ls + [2]
>= [1] @ls + [2]
= ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) = [0]
>= [0]
= nil()
******** Step 8.b:3.b:3.b:3.b:4.a:3.a:5.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******** Step 8.b:3.b:3.b:3.b:4.a:3.a:5.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)):2
2:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
2: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
******** Step 8.b:3.b:3.b:3.b:4.a:3.a:5.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
******* Step 8.b:3.b:3.b:3.b:4.a:3.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_23(matrixMult'#1#(@m1,@m2))
Consider the set of all dependency pairs
1: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
2: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
3: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
4: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
5: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
6: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
7: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
8: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
9: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@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,2,4,5,9}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
******** Step 8.b:3.b:3.b:3.b:4.a:3.b:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_22) = {1},
uargs(c_23) = {1},
uargs(c_24) = {1}
Following symbols are considered usable:
{matrixMult,matrixMult',matrixMult'#1,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#
,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
p(#abs) = [0]
p(#add) = [2] x1 + [4] x2 + [1]
p(#mult) = [1] x1 + [1]
p(#natmult) = [3] x1 + [2] x2 + [0]
p(#neg) = [6]
p(#pos) = [1] x1 + [0]
p(#pred) = [2]
p(#s) = [1] x1 + [0]
p(#succ) = [0]
p(*) = [0]
p(+) = [3] x2 + [0]
p(::) = [1] x2 + [2]
p(attach) = [0]
p(attach#1) = [5] x1 + [0]
p(attach#2) = [1] x3 + [0]
p(lineMult) = [3] x2 + [0]
p(lineMult#1) = [3] x1 + [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [0]
p(makeBase#1) = [0]
p(matrixMult) = [1] x1 + [0]
p(matrixMult') = [1] x1 + [0]
p(matrixMult'#1) = [1] x1 + [0]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [0]
p(mkBase#1) = [0]
p(mult) = [3] x1 + [0]
p(mult#1) = [0]
p(mult#2) = [0]
p(nil) = [0]
p(split) = [2]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [4] x1 + [0]
p(transAcc) = [0]
p(transAcc#1) = [0]
p(transpose) = [0]
p(transpose#1) = [0]
p(transpose#2) = [4] x1 + [0]
p(transpose#3) = [0]
p(transpose') = [0]
p(tuple#2) = [1] x1 + [0]
p(#abs#) = [0]
p(#add#) = [0]
p(#mult#) = [1] x1 + [0]
p(#natmult#) = [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [0]
p(+#) = [0]
p(attach#) = [0]
p(attach#1#) = [0]
p(attach#2#) = [0]
p(lineMult#) = [0]
p(lineMult#1#) = [0]
p(m1#) = [0]
p(m2#) = [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [0]
p(makeBase#1#) = [0]
p(matrixMult#) = [2] x1 + [2]
p(matrixMult'#) = [1] x1 + [1]
p(matrixMult'#1#) = [1] x1 + [0]
p(matrixMult3#) = [4] x1 + [7]
p(matrixMultList#) = [2] x1 + [1] x2 + [0]
p(matrixMultList#1#) = [1] x1 + [2] x2 + [0]
p(matrixMultOld#) = [1] x1 + [1]
p(mkBase#) = [4] x1 + [0]
p(mkBase#1#) = [1] x1 + [0]
p(mult#) = [0]
p(mult#1#) = [2] x2 + [0]
p(mult#2#) = [1] x1 + [1] x3 + [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [4] x3 + [0]
p(transAcc#) = [0]
p(transAcc#1#) = [0]
p(transpose#) = [0]
p(transpose#1#) = [1] x2 + [0]
p(transpose#2#) = [0]
p(transpose#3#) = [2] x2 + [0]
p(transpose'#) = [1] x1 + [0]
p(c_1) = [0]
p(c_2) = [0]
p(c_3) = [0]
p(c_4) = [0]
p(c_5) = [0]
p(c_6) = [1] x1 + [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) = [1]
p(c_14) = [0]
p(c_15) = [1] x1 + [1] x3 + [1] x4 + [1] x5 + [1]
p(c_16) = [2] x1 + [1] x2 + [4] x5 + [0]
p(c_17) = [1] x5 + [1]
p(c_18) = [2] x2 + [1] x3 + [2] x4 + [1]
p(c_19) = [1] x1 + [0]
p(c_20) = [1] x1 + [1]
p(c_21) = [4]
p(c_22) = [2] x1 + [0]
p(c_23) = [1] x1 + [0]
p(c_24) = [1] x1 + [1]
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) = [2] x1 + [0]
p(c_32) = [1] x1 + [0]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [1] x1 + [0]
p(c_37) = [0]
p(c_38) = [1] x1 + [0]
p(c_39) = [1] x1 + [0]
p(c_40) = [0]
p(c_41) = [0]
p(c_42) = [1] x1 + [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) = [1] x1 + [0]
p(c_50) = [2]
p(c_51) = [0]
p(c_52) = [0]
p(c_53) = [0]
p(c_54) = [0]
p(c_55) = [0]
p(c_56) = [0]
p(c_57) = [0]
p(c_58) = [0]
p(c_59) = [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [0]
p(c_66) = [0]
p(c_67) = [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [0]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
matrixMult'#(@m1,@m2) = [1] @m1 + [1]
> [1] @m1 + [0]
= c_23(matrixMult'#1#(@m1,@m2))
Following rules are (at-least) weakly oriented:
matrixMult#(@m1,@m2) = [2] @m1 + [2]
>= [2] @m1 + [2]
= c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#1#(::(@l,@ls),@m2) = [1] @ls + [2]
>= [1] @ls + [2]
= c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) = [4] @m1 + [7]
>= [2] @m1 + [2]
= matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) = [4] @m1 + [7]
>= [2] @m1 + [2]
= matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) = [2] @acc + [1] @mm + [0]
>= [2] @acc + [1] @mm + [0]
= matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) = [2] @acc + [1] @ms + [2]
>= [2] @acc + [2]
= matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) = [2] @acc + [1] @ms + [2]
>= [2] @acc + [1] @ms + [0]
= matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) = [1] @m1 + [1]
>= [1] @m1 + [1]
= matrixMult'#(@m1,transpose(@m2))
matrixMult(@m1,@m2) = [1] @m1 + [0]
>= [1] @m1 + [0]
= matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) = [1] @m1 + [0]
>= [1] @m1 + [0]
= matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) = [1] @ls + [2]
>= [1] @ls + [2]
= ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) = [0]
>= [0]
= nil()
******** Step 8.b:3.b:3.b:3.b:4.a:3.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******** Step 8.b:3.b:3.b:3.b:4.a:3.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
2:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):3
3:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
4:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):1
5:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):1
6:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):8
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):7
7:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):1
8:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
-->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):6
9:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):2
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
9: matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2))
6: matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc)
8: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms)
7: matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m)
5: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3)
4: matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)
1: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
2: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
3: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
******** Step 8.b:3.b:3.b:3.b:4.a:3.b:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
****** Step 8.b:3.b:3.b:3.b:4.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):2
2:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):11
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):1
3:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):12
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):7
4:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):5
5:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):6
6:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):4
7:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):8
8:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):9
-->_2 split#(@m) -> c_39(split#1#(@m)):4
9:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):10
10:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):7
11:W:matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):12
12:W:matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
-->_1 matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)):13
13:W:matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
-->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):12
14:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
-->_2 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):11
-->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2)))):11
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
14: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2))
11: matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))))
12: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2))
13: matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2))
****** Step 8.b:3.b:3.b:3.b:4.b:2: SimplifyRHS WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m))
matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/2,c_29/0,c_30/2,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
SimplifyRHS
+ Details:
Consider the dependency graph
1:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m)):2
2:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)
,matrixMult#(@acc,@m))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):1
3:S:matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2))
-->_2 transpose#(@m) -> c_48(transpose#1#(@m,@m)):7
4:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):5
5:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):6
6:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):4
7:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):8
8:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):9
-->_2 split#(@m) -> c_39(split#1#(@m)):4
9:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):10
10:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):7
Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
****** Step 8.b:3.b:3.b:3.b:4.b:3: UsableRules WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
transpose(@m) -> transpose#1(@m,@m)
transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m))
transpose#1(nil(),@m) -> nil()
transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l)
transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys)))
transpose#3(nil(),@l) -> nil()
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
****** Step 8.b:3.b:3.b:3.b:4.b:4: Decompose WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/1,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
Problem (S)
- Strict DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1
,split#1#/1,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1
,transpose#3#/2,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0
,c_5/1,c_6/1,c_7/1,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1
,c_20/1,c_21/0,c_22/1,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1
,c_35/1,c_36/1,c_37/1,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2
,c_50/0,c_51/1,c_52/1,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1
,c_65/1,c_66/0,c_67/1,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#
,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#
,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#
,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#
,transpose#1#,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
******* Step 8.b:3.b:3.b:3.b:4.b:4.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)):2
2:S:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):1
3:W:matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):7
4:W:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):5
5:W:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):6
6:W:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):4
7:W:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):8
8:W:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_2 split#(@m) -> c_39(split#1#(@m)):4
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):9
9:W:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):10
10:W:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):7
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
3: matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
7: transpose#(@m) -> c_48(transpose#1#(@m,@m))
10: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
9: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
8: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
4: split#(@m) -> c_39(split#1#(@m))
6: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
5: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
******* Step 8.b:3.b:3.b:3.b:4.b:4.a:2: UsableRules WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
******* Step 8.b:3.b:3.b:3.b:4.b:4.a:3: PredecessorEstimationCP WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
Consider the set of all dependency pairs
1: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
2: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
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 8.b:3.b:3.b:3.b:4.b:4.a:3.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,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_27) = {1},
uargs(c_28) = {1}
Following symbols are considered usable:
{#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#
,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList#
,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#
,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [4]
p(#abs) = [0]
p(#add) = [1] x1 + [7]
p(#mult) = [1] x1 + [0]
p(#natmult) = [5]
p(#neg) = [1] x1 + [1]
p(#pos) = [1] x1 + [2]
p(#pred) = [1] x1 + [0]
p(#s) = [1] x1 + [2]
p(#succ) = [5]
p(*) = [0]
p(+) = [1] x2 + [2]
p(::) = [1] x1 + [1] x2 + [2]
p(attach) = [2] x1 + [0]
p(attach#1) = [0]
p(attach#2) = [0]
p(lineMult) = [4] x2 + [3]
p(lineMult#1) = [3] x1 + [0]
p(m1) = [0]
p(m2) = [0]
p(m3) = [0]
p(m4) = [0]
p(makeBase) = [2] x1 + [5]
p(makeBase#1) = [5]
p(matrixMult) = [0]
p(matrixMult') = [0]
p(matrixMult'#1) = [7]
p(matrixMult3) = [0]
p(matrixMultList) = [0]
p(matrixMultList#1) = [0]
p(matrixMultOld) = [0]
p(mkBase) = [1] x1 + [0]
p(mkBase#1) = [0]
p(mult) = [1] x1 + [1]
p(mult#1) = [1] x2 + [0]
p(mult#2) = [0]
p(nil) = [3]
p(split) = [0]
p(split#1) = [0]
p(split#2) = [0]
p(split#3) = [0]
p(transAcc) = [2] x2 + [0]
p(transAcc#1) = [0]
p(transpose) = [0]
p(transpose#1) = [2]
p(transpose#2) = [0]
p(transpose#3) = [0]
p(transpose') = [4] x1 + [0]
p(tuple#2) = [0]
p(#abs#) = [1] x1 + [0]
p(#add#) = [2] x2 + [0]
p(#mult#) = [2] x1 + [0]
p(#natmult#) = [2] x1 + [2] x2 + [0]
p(#pred#) = [0]
p(#succ#) = [0]
p(*#) = [2] x2 + [0]
p(+#) = [4] x1 + [0]
p(attach#) = [2] x1 + [0]
p(attach#1#) = [0]
p(attach#2#) = [4] x1 + [1] x2 + [0]
p(lineMult#) = [4] x1 + [0]
p(lineMult#1#) = [1] x2 + [0]
p(m1#) = [2] x1 + [0]
p(m2#) = [1] x1 + [0]
p(m3#) = [0]
p(m4#) = [0]
p(makeBase#) = [0]
p(makeBase#1#) = [0]
p(matrixMult#) = [0]
p(matrixMult'#) = [0]
p(matrixMult'#1#) = [4] x1 + [1] x2 + [0]
p(matrixMult3#) = [2] x1 + [1] x2 + [4] x3 + [0]
p(matrixMultList#) = [1] x2 + [1]
p(matrixMultList#1#) = [1] x1 + [0]
p(matrixMultOld#) = [4] x1 + [2] x2 + [0]
p(mkBase#) = [0]
p(mkBase#1#) = [1] x1 + [0]
p(mult#) = [1] x1 + [0]
p(mult#1#) = [0]
p(mult#2#) = [0]
p(split#) = [0]
p(split#1#) = [0]
p(split#2#) = [0]
p(split#3#) = [0]
p(transAcc#) = [0]
p(transAcc#1#) = [0]
p(transpose#) = [0]
p(transpose#1#) = [0]
p(transpose#2#) = [0]
p(transpose#3#) = [0]
p(transpose'#) = [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) = [2]
p(c_18) = [0]
p(c_19) = [0]
p(c_20) = [0]
p(c_21) = [0]
p(c_22) = [0]
p(c_23) = [0]
p(c_24) = [0]
p(c_25) = [0]
p(c_26) = [0]
p(c_27) = [1] x1 + [0]
p(c_28) = [1] x1 + [1]
p(c_29) = [0]
p(c_30) = [0]
p(c_31) = [0]
p(c_32) = [0]
p(c_33) = [0]
p(c_34) = [0]
p(c_35) = [0]
p(c_36) = [0]
p(c_37) = [0]
p(c_38) = [0]
p(c_39) = [0]
p(c_40) = [0]
p(c_41) = [0]
p(c_42) = [0]
p(c_43) = [0]
p(c_44) = [0]
p(c_45) = [2]
p(c_46) = [0]
p(c_47) = [0]
p(c_48) = [0]
p(c_49) = [0]
p(c_50) = [0]
p(c_51) = [0]
p(c_52) = [0]
p(c_53) = [0]
p(c_54) = [0]
p(c_55) = [0]
p(c_56) = [0]
p(c_57) = [0]
p(c_58) = [0]
p(c_59) = [0]
p(c_60) = [0]
p(c_61) = [0]
p(c_62) = [0]
p(c_63) = [0]
p(c_64) = [0]
p(c_65) = [0]
p(c_66) = [0]
p(c_67) = [0]
p(c_68) = [0]
p(c_69) = [0]
p(c_70) = [0]
p(c_71) = [0]
p(c_72) = [0]
p(c_73) = [2]
p(c_74) = [0]
p(c_75) = [0]
p(c_76) = [0]
p(c_77) = [0]
p(c_78) = [0]
Following rules are strictly oriented:
matrixMultList#(@acc,@mm) = [1] @mm + [1]
> [1] @mm + [0]
= c_27(matrixMultList#1#(@mm,@acc))
Following rules are (at-least) weakly oriented:
matrixMultList#1#(::(@m,@ms),@acc) = [1] @m + [1] @ms + [2]
>= [1] @ms + [2]
= c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
******** Step 8.b:3.b:3.b:3.b:4.b:4.a:3.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******** Step 8.b:3.b:3.b:3.b:4.b:4.a:3.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)):2
2:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):1
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
2: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
******** Step 8.b:3.b:3.b:3.b:4.b:4.a:3.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
******* Step 8.b:3.b:3.b:3.b:4.b:4.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:S:matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):5
2:S:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):3
3:S:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):4
4:S:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):2
5:S:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):6
6:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):7
-->_2 split#(@m) -> c_39(split#1#(@m)):2
7:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):8
8:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):5
9:W:matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
-->_1 matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)):10
10:W:matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
-->_1 matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)):9
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
9: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc))
10: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms))
******* Step 8.b:3.b:3.b:3.b:4.b:4.b:2: UsableRules WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
#abs(#0()) -> #0()
#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)
attach(@line,@m) -> attach#1(@line,@m)
attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs)
attach#1(nil(),@m) -> nil()
attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls))
attach#2(nil(),@x,@xs) -> nil()
lineMult(@l,@m2) -> lineMult#1(@m2,@l)
lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs))
lineMult#1(nil(),@l) -> nil()
makeBase(@m) -> makeBase#1(@m)
makeBase#1(::(@l,@m')) -> mkBase(@l)
makeBase#1(nil()) -> nil()
matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2)))
matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2)
matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2))
matrixMult'#1(nil(),@m2) -> nil()
mkBase(@m) -> mkBase#1(@m)
mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m'))
mkBase#1(nil()) -> nil()
mult(@l1,@l2) -> mult#1(@l1,@l2)
mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs)
mult#1(nil(),@l2) -> #abs(#0())
mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys))
mult#2(nil(),@x,@xs) -> #abs(#0())
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
transAcc(@m,@base) -> transAcc#1(@m,@base)
transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base))
transAcc#1(nil(),@base) -> @base
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
UsableRules
+ Details:
We replace rewrite rules by usable rules:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
******* Step 8.b:3.b:3.b:3.b:4.b:4.b:3: PredecessorEstimationCP WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 3, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 3, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
3: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
Consider the set of all dependency pairs
1: matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
2: split#(@m) -> c_39(split#1#(@m))
3: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
4: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
5: transpose#(@m) -> c_48(transpose#1#(@m,@m))
6: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
7: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
8: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
Processor NaturalMI {miDimension = 3, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^2))
SPACE(?,?)on application of the dependency pairs
{1,3}
These cover all (indirect) predecessors of dependency pairs
{1,3,4}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
******** Step 8.b:3.b:3.b:3.b:4.b:4.b:3.a:1: NaturalMI WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
NaturalMI {miDimension = 3, miDegree = 2, 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 2 non-zero interpretation-entries in the diagonal of the component-wise maxima):
The following argument positions are considered usable:
uargs(c_30) = {1},
uargs(c_39) = {1},
uargs(c_40) = {1},
uargs(c_42) = {1},
uargs(c_48) = {1},
uargs(c_49) = {1,2},
uargs(c_51) = {1},
uargs(c_52) = {1}
Following symbols are considered usable:
{split,split#1,split#2,split#3,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#
,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
[0]
[0]
p(#abs) = [0]
[0]
[0]
p(#add) = [0]
[0]
[0]
p(#mult) = [0]
[0]
[0]
p(#natmult) = [0]
[0]
[0]
p(#neg) = [0]
[0]
[0]
p(#pos) = [0]
[0]
[0]
p(#pred) = [0]
[0]
[0]
p(#s) = [0]
[0]
[0]
p(#succ) = [0]
[0]
[0]
p(*) = [0]
[0]
[0]
p(+) = [0]
[0]
[0]
p(::) = [0 1 0] [1 0 0] [0]
[0 0 0] x1 + [0 1 0] x2 + [1]
[0 0 0] [0 0 0] [0]
p(attach) = [0]
[0]
[0]
p(attach#1) = [0]
[0]
[0]
p(attach#2) = [0]
[0]
[0]
p(lineMult) = [0]
[0]
[0]
p(lineMult#1) = [0]
[0]
[0]
p(m1) = [0]
[0]
[0]
p(m2) = [0]
[0]
[0]
p(m3) = [0]
[0]
[0]
p(m4) = [0]
[0]
[0]
p(makeBase) = [0]
[0]
[0]
p(makeBase#1) = [0]
[0]
[0]
p(matrixMult) = [0]
[0]
[0]
p(matrixMult') = [0]
[0]
[0]
p(matrixMult'#1) = [0]
[0]
[0]
p(matrixMult3) = [0]
[0]
[0]
p(matrixMultList) = [0]
[0]
[0]
p(matrixMultList#1) = [0]
[0]
[0]
p(matrixMultOld) = [0]
[0]
[0]
p(mkBase) = [0]
[0]
[0]
p(mkBase#1) = [0]
[0]
[0]
p(mult) = [0]
[0]
[0]
p(mult#1) = [0]
[0]
[0]
p(mult#2) = [0]
[0]
[0]
p(nil) = [0]
[0]
[0]
p(split) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [0]
p(split#1) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [0]
p(split#2) = [0 1 0] [1 0 0] [0]
[0 0 0] x1 + [0 0 0] x2 + [0]
[0 0 0] [0 0 0] [0]
p(split#3) = [1 0 0] [0 1 0] [1]
[0 0 0] x1 + [0 0 0] x3 + [0]
[0 0 0] [0 0 0] [0]
p(transAcc) = [0]
[0]
[0]
p(transAcc#1) = [0]
[0]
[0]
p(transpose) = [0]
[0]
[0]
p(transpose#1) = [0]
[0]
[0]
p(transpose#2) = [0]
[0]
[0]
p(transpose#3) = [0]
[0]
[0]
p(transpose') = [0]
[0]
[0]
p(tuple#2) = [1 1 0] [0]
[0 0 0] x2 + [0]
[0 0 0] [0]
p(#abs#) = [0]
[0]
[0]
p(#add#) = [0]
[0]
[0]
p(#mult#) = [0]
[0]
[0]
p(#natmult#) = [0]
[0]
[0]
p(#pred#) = [0]
[0]
[0]
p(#succ#) = [0]
[0]
[0]
p(*#) = [0]
[0]
[0]
p(+#) = [0]
[0]
[0]
p(attach#) = [0]
[0]
[0]
p(attach#1#) = [0]
[0]
[0]
p(attach#2#) = [0]
[0]
[0]
p(lineMult#) = [0]
[0]
[0]
p(lineMult#1#) = [0]
[0]
[0]
p(m1#) = [0]
[0]
[0]
p(m2#) = [0]
[0]
[0]
p(m3#) = [0]
[0]
[0]
p(m4#) = [0]
[0]
[0]
p(makeBase#) = [0]
[0]
[0]
p(makeBase#1#) = [0]
[0]
[0]
p(matrixMult#) = [0]
[0]
[0]
p(matrixMult'#) = [0]
[0]
[0]
p(matrixMult'#1#) = [0]
[0]
[0]
p(matrixMult3#) = [0]
[0]
[0]
p(matrixMultList#) = [0]
[0]
[0]
p(matrixMultList#1#) = [0]
[0]
[0]
p(matrixMultOld#) = [1 1 1] [1]
[1 0 0] x2 + [0]
[1 1 0] [1]
p(mkBase#) = [0]
[0]
[0]
p(mkBase#1#) = [0]
[0]
[0]
p(mult#) = [0]
[0]
[0]
p(mult#1#) = [0]
[0]
[0]
p(mult#2#) = [0]
[0]
[0]
p(split#) = [0 1 0] [0]
[0 1 0] x1 + [1]
[0 0 0] [1]
p(split#1#) = [0 1 0] [0]
[1 1 0] x1 + [0]
[1 1 0] [1]
p(split#2#) = [0 0 0] [0 1 0] [0]
[0 1 0] x1 + [0 1 0] x2 + [0]
[0 0 0] [1 0 0] [1]
p(split#3#) = [0]
[0]
[0]
p(transAcc#) = [0]
[0]
[0]
p(transAcc#1#) = [0]
[0]
[0]
p(transpose#) = [1 1 0] [0]
[0 0 0] x1 + [0]
[0 1 0] [1]
p(transpose#1#) = [0 0 0] [1 1 0] [0]
[0 1 0] x1 + [0 0 0] x2 + [0]
[0 1 0] [0 1 0] [1]
p(transpose#2#) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [1]
p(transpose#3#) = [1 1 0] [0]
[1 1 0] x1 + [1]
[0 1 0] [1]
p(transpose'#) = [0]
[0]
[0]
p(c_1) = [0]
[0]
[0]
p(c_2) = [0]
[0]
[0]
p(c_3) = [0]
[0]
[0]
p(c_4) = [0]
[0]
[0]
p(c_5) = [0]
[0]
[0]
p(c_6) = [0]
[0]
[0]
p(c_7) = [0]
[0]
[0]
p(c_8) = [0]
[0]
[0]
p(c_9) = [0]
[0]
[0]
p(c_10) = [0]
[0]
[0]
p(c_11) = [0]
[0]
[0]
p(c_12) = [0]
[0]
[0]
p(c_13) = [0]
[0]
[0]
p(c_14) = [0]
[0]
[0]
p(c_15) = [0]
[0]
[0]
p(c_16) = [0]
[0]
[0]
p(c_17) = [0]
[0]
[0]
p(c_18) = [0]
[0]
[0]
p(c_19) = [0]
[0]
[0]
p(c_20) = [0]
[0]
[0]
p(c_21) = [0]
[0]
[0]
p(c_22) = [0]
[0]
[0]
p(c_23) = [0]
[0]
[0]
p(c_24) = [0]
[0]
[0]
p(c_25) = [0]
[0]
[0]
p(c_26) = [0]
[0]
[0]
p(c_27) = [0]
[0]
[0]
p(c_28) = [0]
[0]
[0]
p(c_29) = [0]
[0]
[0]
p(c_30) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 1] [0]
p(c_31) = [0]
[0]
[0]
p(c_32) = [0]
[0]
[0]
p(c_33) = [0]
[0]
[0]
p(c_34) = [0]
[0]
[0]
p(c_35) = [0]
[0]
[0]
p(c_36) = [0]
[0]
[0]
p(c_37) = [0]
[0]
[0]
p(c_38) = [0]
[0]
[0]
p(c_39) = [1 0 0] [0]
[1 0 0] x1 + [1]
[0 0 0] [0]
p(c_40) = [1 0 0] [0]
[0 1 0] x1 + [1]
[0 1 1] [1]
p(c_41) = [0]
[0]
[0]
p(c_42) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [0]
p(c_43) = [0]
[0]
[0]
p(c_44) = [0]
[0]
[0]
p(c_45) = [0]
[0]
[0]
p(c_46) = [0]
[0]
[0]
p(c_47) = [0]
[0]
[0]
p(c_48) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [0]
p(c_49) = [1 0 0] [1 0 0] [0]
[0 0 0] x1 + [0 0 1] x2 + [0]
[0 0 0] [1 0 0] [0]
p(c_50) = [0]
[0]
[0]
p(c_51) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [0]
p(c_52) = [1 0 0] [0]
[1 0 0] x1 + [0]
[0 0 1] [0]
p(c_53) = [0]
[0]
[0]
p(c_54) = [0]
[0]
[0]
p(c_55) = [0]
[0]
[0]
p(c_56) = [0]
[0]
[0]
p(c_57) = [0]
[0]
[0]
p(c_58) = [0]
[0]
[0]
p(c_59) = [0]
[0]
[0]
p(c_60) = [0]
[0]
[0]
p(c_61) = [0]
[0]
[0]
p(c_62) = [0]
[0]
[0]
p(c_63) = [0]
[0]
[0]
p(c_64) = [0]
[0]
[0]
p(c_65) = [0]
[0]
[0]
p(c_66) = [0]
[0]
[0]
p(c_67) = [0]
[0]
[0]
p(c_68) = [0]
[0]
[0]
p(c_69) = [0]
[0]
[0]
p(c_70) = [0]
[0]
[0]
p(c_71) = [0]
[0]
[0]
p(c_72) = [0]
[0]
[0]
p(c_73) = [0]
[0]
[0]
p(c_74) = [0]
[0]
[0]
p(c_75) = [0]
[0]
[0]
p(c_76) = [0]
[0]
[0]
p(c_77) = [0]
[0]
[0]
p(c_78) = [0]
[0]
[0]
Following rules are strictly oriented:
matrixMultOld#(@m1,@m2) = [1 1 1] [1]
[1 0 0] @m2 + [0]
[1 1 0] [1]
> [1 1 0] [0]
[0 0 0] @m2 + [0]
[0 1 0] [1]
= c_30(transpose#(@m2))
split#1#(::(@l,@ls)) = [0 0 0] [0 1 0] [1]
[0 1 0] @l + [1 1 0] @ls + [1]
[0 1 0] [1 1 0] [2]
> [0 0 0] [0 1 0] [0]
[0 1 0] @l + [0 1 0] @ls + [1]
[0 1 0] [1 1 0] [2]
= c_40(split#2#(@l,@ls))
Following rules are (at-least) weakly oriented:
split#(@m) = [0 1 0] [0]
[0 1 0] @m + [1]
[0 0 0] [1]
>= [0 1 0] [0]
[0 1 0] @m + [1]
[0 0 0] [0]
= c_39(split#1#(@m))
split#2#(::(@x,@xs),@ls) = [0 1 0] [0 0 0] [0]
[0 1 0] @ls + [0 1 0] @xs + [1]
[1 0 0] [0 0 0] [1]
>= [0 1 0] [0]
[0 0 0] @ls + [0]
[0 0 0] [0]
= c_42(split#(@ls))
transpose#(@m) = [1 1 0] [0]
[0 0 0] @m + [0]
[0 1 0] [1]
>= [1 1 0] [0]
[0 0 0] @m + [0]
[0 0 0] [0]
= c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) = [1 1 0] [0 0 0] [0]
[0 0 0] @m + [0 1 0] @xss + [1]
[0 1 0] [0 1 0] [2]
>= [1 1 0] [0]
[0 0 0] @m + [1]
[0 1 0] [0]
= c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) = [1 1 0] [0]
[0 0 0] @m' + [0]
[0 0 0] [1]
>= [1 1 0] [0]
[0 0 0] @m' + [0]
[0 0 0] [0]
= c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) = [0 1 0] [1 1 0] [1]
[0 1 0] @y + [1 1 0] @ys + [2]
[0 0 0] [0 1 0] [2]
>= [0 1 0] [1 1 0] [1]
[0 1 0] @y + [1 1 0] @ys + [1]
[0 0 0] [0 1 0] [2]
= c_52(transpose#(::(@y,@ys)))
split(@m) = [1 0 0] [0]
[0 0 0] @m + [0]
[0 0 0] [0]
>= [1 0 0] [0]
[0 0 0] @m + [0]
[0 0 0] [0]
= split#1(@m)
split#1(::(@l,@ls)) = [0 1 0] [1 0 0] [0]
[0 0 0] @l + [0 0 0] @ls + [0]
[0 0 0] [0 0 0] [0]
>= [0 1 0] [1 0 0] [0]
[0 0 0] @l + [0 0 0] @ls + [0]
[0 0 0] [0 0 0] [0]
= split#2(@l,@ls)
split#1(nil()) = [0]
[0]
[0]
>= [0]
[0]
[0]
= tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) = [1 0 0] [0 1 0] [1]
[0 0 0] @ls + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [0]
>= [1 0 0] [0 1 0] [1]
[0 0 0] @ls + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [0]
= split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) = [1 0 0] [0]
[0 0 0] @ls + [0]
[0 0 0] [0]
>= [0]
[0]
[0]
= tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) = [1 1 0] [0 1 0] [1]
[0 0 0] @m' + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [0]
>= [1 1 0] [0 1 0] [1]
[0 0 0] @m' + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [0]
= tuple#2(::(@x,@ys),::(@xs,@m'))
******** Step 8.b:3.b:3.b:3.b:4.b:4.b:3.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
split#(@m) -> c_39(split#1#(@m))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
******** Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
split#(@m) -> c_39(split#1#(@m))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 3, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 3, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
4: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
Consider the set of all dependency pairs
1: split#(@m) -> c_39(split#1#(@m))
2: transpose#(@m) -> c_48(transpose#1#(@m,@m))
3: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
4: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
5: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
6: matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
7: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
8: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
Processor NaturalMI {miDimension = 3, 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
{2,3,4,5,6}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
********* Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1.a:1: NaturalMI WORST_CASE(?,O(n^1))
+ Considered Problem:
- Strict DPs:
split#(@m) -> c_39(split#1#(@m))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
NaturalMI {miDimension = 3, 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_30) = {1},
uargs(c_39) = {1},
uargs(c_40) = {1},
uargs(c_42) = {1},
uargs(c_48) = {1},
uargs(c_49) = {1,2},
uargs(c_51) = {1},
uargs(c_52) = {1}
Following symbols are considered usable:
{split,split#1,split#2,split#3,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#
,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
[0]
[0]
p(#abs) = [0]
[0]
[0]
p(#add) = [0]
[0]
[0]
p(#mult) = [0]
[0]
[0]
p(#natmult) = [0]
[0]
[0]
p(#neg) = [0]
[0]
[0]
p(#pos) = [0]
[0]
[0]
p(#pred) = [0]
[0]
[0]
p(#s) = [0]
[0]
[0]
p(#succ) = [0]
[0]
[0]
p(*) = [0]
[0]
[0]
p(+) = [0]
[0]
[0]
p(::) = [0 0 0] [0 0 0] [0]
[0 0 1] x1 + [0 0 0] x2 + [0]
[0 0 1] [0 0 1] [1]
p(attach) = [0]
[0]
[0]
p(attach#1) = [0]
[0]
[0]
p(attach#2) = [0]
[0]
[0]
p(lineMult) = [0]
[0]
[0]
p(lineMult#1) = [0]
[0]
[0]
p(m1) = [0]
[0]
[0]
p(m2) = [0]
[0]
[0]
p(m3) = [0]
[0]
[0]
p(m4) = [0]
[0]
[0]
p(makeBase) = [0]
[0]
[0]
p(makeBase#1) = [0]
[0]
[0]
p(matrixMult) = [0]
[0]
[0]
p(matrixMult') = [0]
[0]
[0]
p(matrixMult'#1) = [0]
[0]
[0]
p(matrixMult3) = [0]
[0]
[0]
p(matrixMultList) = [0]
[0]
[0]
p(matrixMultList#1) = [0]
[0]
[0]
p(matrixMultOld) = [0]
[0]
[0]
p(mkBase) = [0]
[0]
[0]
p(mkBase#1) = [0]
[0]
[0]
p(mult) = [0]
[0]
[0]
p(mult#1) = [0]
[0]
[0]
p(mult#2) = [0]
[0]
[0]
p(nil) = [1]
[0]
[1]
p(split) = [1 1 0] [0]
[0 0 1] x1 + [0]
[0 0 0] [1]
p(split#1) = [1 1 0] [0]
[0 0 1] x1 + [0]
[0 0 0] [0]
p(split#2) = [0 0 1] [0 0 0] [0]
[0 0 1] x1 + [0 0 1] x2 + [1]
[0 0 0] [0 0 0] [0]
p(split#3) = [0 0 0] [0 0 0] [0 0 1] [1]
[0 1 1] x1 + [0 0 1] x2 + [0 0 1] x3 + [1]
[0 0 0] [0 0 0] [0 0 0] [0]
p(transAcc) = [0]
[0]
[0]
p(transAcc#1) = [0]
[0]
[0]
p(transpose) = [0]
[0]
[0]
p(transpose#1) = [0]
[0]
[0]
p(transpose#2) = [0]
[0]
[0]
p(transpose#3) = [0]
[0]
[0]
p(transpose') = [0]
[0]
[0]
p(tuple#2) = [0 0 0] [0 1 0] [1]
[0 0 1] x1 + [0 0 0] x2 + [0]
[0 0 0] [0 0 0] [0]
p(#abs#) = [0]
[0]
[0]
p(#add#) = [0]
[0]
[0]
p(#mult#) = [0]
[0]
[0]
p(#natmult#) = [0]
[0]
[0]
p(#pred#) = [0]
[0]
[0]
p(#succ#) = [0]
[0]
[0]
p(*#) = [0]
[0]
[0]
p(+#) = [0]
[0]
[0]
p(attach#) = [0]
[0]
[0]
p(attach#1#) = [0]
[0]
[0]
p(attach#2#) = [0]
[0]
[0]
p(lineMult#) = [0]
[0]
[0]
p(lineMult#1#) = [0]
[0]
[0]
p(m1#) = [0]
[0]
[0]
p(m2#) = [0]
[0]
[0]
p(m3#) = [0]
[0]
[0]
p(m4#) = [0]
[0]
[0]
p(makeBase#) = [0]
[0]
[0]
p(makeBase#1#) = [0]
[0]
[0]
p(matrixMult#) = [0]
[0]
[0]
p(matrixMult'#) = [0]
[0]
[0]
p(matrixMult'#1#) = [0]
[0]
[0]
p(matrixMult3#) = [0]
[0]
[0]
p(matrixMultList#) = [0]
[0]
[0]
p(matrixMultList#1#) = [0]
[0]
[0]
p(matrixMultOld#) = [1 1 1] [1]
[0 0 0] x2 + [1]
[1 1 0] [0]
p(mkBase#) = [0]
[0]
[0]
p(mkBase#1#) = [0]
[0]
[0]
p(mult#) = [0]
[0]
[0]
p(mult#1#) = [0]
[0]
[0]
p(mult#2#) = [0]
[0]
[0]
p(split#) = [0 0 0] [0]
[0 0 0] x1 + [1]
[1 1 1] [1]
p(split#1#) = [0 0 0] [0]
[0 1 1] x1 + [0]
[0 1 1] [0]
p(split#2#) = [0 0 0] [0]
[0 0 1] x2 + [1]
[1 0 0] [0]
p(split#3#) = [0]
[0]
[0]
p(transAcc#) = [0]
[0]
[0]
p(transAcc#1#) = [0]
[0]
[0]
p(transpose#) = [1 1 0] [0]
[0 0 1] x1 + [1]
[1 1 0] [1]
p(transpose#1#) = [0 0 0] [1 1 0] [0]
[0 1 1] x1 + [0 0 1] x2 + [1]
[0 0 0] [1 1 1] [1]
p(transpose#2#) = [1 0 0] [0]
[0 0 0] x1 + [1]
[0 0 0] [0]
p(transpose#3#) = [0 1 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [1]
p(transpose'#) = [0]
[0]
[0]
p(c_1) = [0]
[0]
[0]
p(c_2) = [0]
[0]
[0]
p(c_3) = [0]
[0]
[0]
p(c_4) = [0]
[0]
[0]
p(c_5) = [0]
[0]
[0]
p(c_6) = [0]
[0]
[0]
p(c_7) = [0]
[0]
[0]
p(c_8) = [0]
[0]
[0]
p(c_9) = [0]
[0]
[0]
p(c_10) = [0]
[0]
[0]
p(c_11) = [0]
[0]
[0]
p(c_12) = [0]
[0]
[0]
p(c_13) = [0]
[0]
[0]
p(c_14) = [0]
[0]
[0]
p(c_15) = [0]
[0]
[0]
p(c_16) = [0]
[0]
[0]
p(c_17) = [0]
[0]
[0]
p(c_18) = [0]
[0]
[0]
p(c_19) = [0]
[0]
[0]
p(c_20) = [0]
[0]
[0]
p(c_21) = [0]
[0]
[0]
p(c_22) = [0]
[0]
[0]
p(c_23) = [0]
[0]
[0]
p(c_24) = [0]
[0]
[0]
p(c_25) = [0]
[0]
[0]
p(c_26) = [0]
[0]
[0]
p(c_27) = [0]
[0]
[0]
p(c_28) = [0]
[0]
[0]
p(c_29) = [0]
[0]
[0]
p(c_30) = [1 1 0] [0]
[0 0 0] x1 + [0]
[1 0 0] [0]
p(c_31) = [0]
[0]
[0]
p(c_32) = [0]
[0]
[0]
p(c_33) = [0]
[0]
[0]
p(c_34) = [0]
[0]
[0]
p(c_35) = [0]
[0]
[0]
p(c_36) = [0]
[0]
[0]
p(c_37) = [0]
[0]
[0]
p(c_38) = [0]
[0]
[0]
p(c_39) = [1 0 0] [0]
[0 0 0] x1 + [1]
[0 0 1] [1]
p(c_40) = [1 0 0] [0]
[0 1 0] x1 + [0]
[0 0 0] [1]
p(c_41) = [0]
[0]
[0]
p(c_42) = [1 0 0] [0]
[0 1 0] x1 + [0]
[0 0 0] [0]
p(c_43) = [0]
[0]
[0]
p(c_44) = [0]
[0]
[0]
p(c_45) = [0]
[0]
[0]
p(c_46) = [0]
[0]
[0]
p(c_47) = [0]
[0]
[0]
p(c_48) = [1 0 0] [0]
[0 0 0] x1 + [0]
[1 0 0] [0]
p(c_49) = [1 0 0] [1 0 0] [0]
[0 1 0] x1 + [0 0 0] x2 + [1]
[0 0 0] [0 0 1] [0]
p(c_50) = [0]
[0]
[0]
p(c_51) = [1 0 0] [0]
[0 0 1] x1 + [0]
[0 0 0] [0]
p(c_52) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [1]
p(c_53) = [0]
[0]
[0]
p(c_54) = [0]
[0]
[0]
p(c_55) = [0]
[0]
[0]
p(c_56) = [0]
[0]
[0]
p(c_57) = [0]
[0]
[0]
p(c_58) = [0]
[0]
[0]
p(c_59) = [0]
[0]
[0]
p(c_60) = [0]
[0]
[0]
p(c_61) = [0]
[0]
[0]
p(c_62) = [0]
[0]
[0]
p(c_63) = [0]
[0]
[0]
p(c_64) = [0]
[0]
[0]
p(c_65) = [0]
[0]
[0]
p(c_66) = [0]
[0]
[0]
p(c_67) = [0]
[0]
[0]
p(c_68) = [0]
[0]
[0]
p(c_69) = [0]
[0]
[0]
p(c_70) = [0]
[0]
[0]
p(c_71) = [0]
[0]
[0]
p(c_72) = [0]
[0]
[0]
p(c_73) = [0]
[0]
[0]
p(c_74) = [0]
[0]
[0]
p(c_75) = [0]
[0]
[0]
p(c_76) = [0]
[0]
[0]
p(c_77) = [0]
[0]
[0]
p(c_78) = [0]
[0]
[0]
Following rules are strictly oriented:
transpose#2#(tuple#2(@l,@m')) = [0 1 0] [1]
[0 0 0] @m' + [1]
[0 0 0] [0]
> [0 1 0] [0]
[0 0 0] @m' + [1]
[0 0 0] [0]
= c_51(transpose#3#(@m',@l))
Following rules are (at-least) weakly oriented:
matrixMultOld#(@m1,@m2) = [1 1 1] [1]
[0 0 0] @m2 + [1]
[1 1 0] [0]
>= [1 1 1] [1]
[0 0 0] @m2 + [0]
[1 1 0] [0]
= c_30(transpose#(@m2))
split#(@m) = [0 0 0] [0]
[0 0 0] @m + [1]
[1 1 1] [1]
>= [0 0 0] [0]
[0 0 0] @m + [1]
[0 1 1] [1]
= c_39(split#1#(@m))
split#1#(::(@l,@ls)) = [0 0 0] [0 0 0] [0]
[0 0 2] @l + [0 0 1] @ls + [1]
[0 0 2] [0 0 1] [1]
>= [0 0 0] [0]
[0 0 1] @ls + [1]
[0 0 0] [1]
= c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) = [0 0 0] [0]
[0 0 1] @ls + [1]
[1 0 0] [0]
>= [0]
[1]
[0]
= c_42(split#(@ls))
transpose#(@m) = [1 1 0] [0]
[0 0 1] @m + [1]
[1 1 0] [1]
>= [1 1 0] [0]
[0 0 0] @m + [0]
[1 1 0] [0]
= c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) = [1 1 0] [0 0 0] [0 0 0] [0]
[0 0 1] @m + [0 0 2] @xs + [0 0 1] @xss + [2]
[1 1 1] [0 0 0] [0 0 0] [1]
>= [1 1 0] [0]
[0 0 0] @m + [2]
[1 1 1] [1]
= c_49(transpose#2#(split(@m)),split#(@m))
transpose#3#(::(@y,@ys),@l) = [0 0 1] [0]
[0 0 0] @y + [0]
[0 0 0] [1]
>= [0 0 1] [0]
[0 0 0] @y + [0]
[0 0 0] [1]
= c_52(transpose#(::(@y,@ys)))
split(@m) = [1 1 0] [0]
[0 0 1] @m + [0]
[0 0 0] [1]
>= [1 1 0] [0]
[0 0 1] @m + [0]
[0 0 0] [0]
= split#1(@m)
split#1(::(@l,@ls)) = [0 0 1] [0 0 0] [0]
[0 0 1] @l + [0 0 1] @ls + [1]
[0 0 0] [0 0 0] [0]
>= [0 0 1] [0 0 0] [0]
[0 0 1] @l + [0 0 1] @ls + [1]
[0 0 0] [0 0 0] [0]
= split#2(@l,@ls)
split#1(nil()) = [1]
[1]
[0]
>= [1]
[1]
[0]
= tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) = [0 0 0] [0 0 1] [0 0 1] [1]
[0 0 1] @ls + [0 0 1] @x + [0 0 1] @xs + [2]
[0 0 0] [0 0 0] [0 0 0] [0]
>= [0 0 0] [0 0 0] [0 0 1] [1]
[0 0 1] @ls + [0 0 1] @x + [0 0 1] @xs + [2]
[0 0 0] [0 0 0] [0 0 0] [0]
= split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) = [0 0 0] [1]
[0 0 1] @ls + [2]
[0 0 0] [0]
>= [1]
[1]
[0]
= tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) = [0 0 0] [0 0 1] [0 0 0] [1]
[0 0 1] @x + [0 0 1] @xs + [0 0 1] @ys + [1]
[0 0 0] [0 0 0] [0 0 0] [0]
>= [0 0 0] [0 0 1] [0 0 0] [1]
[0 0 1] @x + [0 0 0] @xs + [0 0 1] @ys + [1]
[0 0 0] [0 0 0] [0 0 0] [0]
= tuple#2(::(@x,@ys),::(@xs,@m'))
********* Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Strict DPs:
split#(@m) -> c_39(split#1#(@m))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
********* Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1.b:1: PredecessorEstimationCP WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
split#(@m) -> c_39(split#1#(@m))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
PredecessorEstimationCP {onSelectionCP = any intersect of rules of CDG leaf and strict-rules, withComplexityPair = NaturalMI {miDimension = 3, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}}
+ Details:
We first use the processor NaturalMI {miDimension = 3, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing} to orient following rules strictly:
1: split#(@m) -> c_39(split#1#(@m))
Consider the set of all dependency pairs
1: split#(@m) -> c_39(split#1#(@m))
2: matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
3: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
4: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
5: transpose#(@m) -> c_48(transpose#1#(@m,@m))
6: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
7: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
8: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
Processor NaturalMI {miDimension = 3, miDegree = 2, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Nothing}induces the complexity certificateTIME (?,O(n^2))
SPACE(?,?)on application of the dependency pairs
{1}
These cover all (indirect) predecessors of dependency pairs
{1,2,3,4}
their number of applications is equally bounded.
The dependency pairs are shifted into the weak component.
********** Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1.b:1.a:1: NaturalMI WORST_CASE(?,O(n^2))
+ Considered Problem:
- Strict DPs:
split#(@m) -> c_39(split#1#(@m))
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
NaturalMI {miDimension = 3, miDegree = 2, 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 2 non-zero interpretation-entries in the diagonal of the component-wise maxima):
The following argument positions are considered usable:
uargs(c_30) = {1},
uargs(c_39) = {1},
uargs(c_40) = {1},
uargs(c_42) = {1},
uargs(c_48) = {1},
uargs(c_49) = {1,2},
uargs(c_51) = {1},
uargs(c_52) = {1}
Following symbols are considered usable:
{split,split#1,split#2,split#3,#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#
,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#}
TcT has computed the following interpretation:
p(#0) = [0]
[0]
[0]
p(#abs) = [0]
[0]
[0]
p(#add) = [0]
[0]
[0]
p(#mult) = [0]
[0]
[0]
p(#natmult) = [0]
[0]
[0]
p(#neg) = [0]
[0]
[0]
p(#pos) = [0]
[0]
[0]
p(#pred) = [0]
[0]
[0]
p(#s) = [0]
[0]
[0]
p(#succ) = [0]
[0]
[0]
p(*) = [0]
[0]
[0]
p(+) = [0]
[0]
[0]
p(::) = [0 1 1] [1 0 0] [0]
[0 0 0] x1 + [0 1 1] x2 + [1]
[0 0 0] [0 0 0] [1]
p(attach) = [0]
[0]
[0]
p(attach#1) = [0]
[0]
[0]
p(attach#2) = [0]
[0]
[0]
p(lineMult) = [0]
[0]
[0]
p(lineMult#1) = [0]
[0]
[0]
p(m1) = [0]
[0]
[0]
p(m2) = [0]
[0]
[0]
p(m3) = [0]
[0]
[0]
p(m4) = [0]
[0]
[0]
p(makeBase) = [0]
[0]
[0]
p(makeBase#1) = [0]
[0]
[0]
p(matrixMult) = [0]
[0]
[0]
p(matrixMult') = [0]
[0]
[0]
p(matrixMult'#1) = [0]
[0]
[0]
p(matrixMult3) = [0]
[0]
[0]
p(matrixMultList) = [0]
[0]
[0]
p(matrixMultList#1) = [0]
[0]
[0]
p(matrixMultOld) = [0]
[0]
[0]
p(mkBase) = [0]
[0]
[0]
p(mkBase#1) = [0]
[0]
[0]
p(mult) = [0]
[0]
[0]
p(mult#1) = [0]
[0]
[0]
p(mult#2) = [0]
[0]
[0]
p(nil) = [0]
[0]
[0]
p(split) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [1]
p(split#1) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 0 0] [1]
p(split#2) = [0 1 1] [1 0 0] [0]
[0 0 0] x1 + [0 0 0] x2 + [0]
[0 0 0] [0 0 0] [1]
p(split#3) = [1 0 1] [0 1 1] [1]
[0 0 0] x1 + [0 0 0] x3 + [0]
[0 0 0] [0 0 0] [1]
p(transAcc) = [0]
[0]
[0]
p(transAcc#1) = [0]
[0]
[0]
p(transpose) = [0]
[0]
[0]
p(transpose#1) = [0]
[0]
[0]
p(transpose#2) = [0]
[0]
[0]
p(transpose#3) = [0]
[0]
[0]
p(transpose') = [0]
[0]
[0]
p(tuple#2) = [1 1 1] [0]
[0 0 0] x2 + [0]
[0 0 0] [1]
p(#abs#) = [0]
[0]
[0]
p(#add#) = [0]
[0]
[0]
p(#mult#) = [0]
[0]
[0]
p(#natmult#) = [0]
[0]
[0]
p(#pred#) = [0]
[0]
[0]
p(#succ#) = [0]
[0]
[0]
p(*#) = [0]
[0]
[0]
p(+#) = [0]
[0]
[0]
p(attach#) = [0]
[0]
[0]
p(attach#1#) = [0]
[0]
[0]
p(attach#2#) = [0]
[0]
[0]
p(lineMult#) = [0]
[0]
[0]
p(lineMult#1#) = [0]
[0]
[0]
p(m1#) = [0]
[0]
[0]
p(m2#) = [0]
[0]
[0]
p(m3#) = [0]
[0]
[0]
p(m4#) = [0]
[0]
[0]
p(makeBase#) = [0]
[0]
[0]
p(makeBase#1#) = [0]
[0]
[0]
p(matrixMult#) = [0]
[0]
[0]
p(matrixMult'#) = [0]
[0]
[0]
p(matrixMult'#1#) = [0]
[0]
[0]
p(matrixMult3#) = [0]
[0]
[0]
p(matrixMultList#) = [0]
[0]
[0]
p(matrixMultList#1#) = [0]
[0]
[0]
p(matrixMultOld#) = [1 1 1] [1]
[1 0 1] x2 + [1]
[1 1 1] [1]
p(mkBase#) = [0]
[0]
[0]
p(mkBase#1#) = [0]
[0]
[0]
p(mult#) = [0]
[0]
[0]
p(mult#1#) = [0]
[0]
[0]
p(mult#2#) = [0]
[0]
[0]
p(split#) = [0 1 0] [1]
[1 0 0] x1 + [0]
[0 0 1] [1]
p(split#1#) = [0 1 0] [0]
[0 0 1] x1 + [0]
[0 1 1] [1]
p(split#2#) = [0 0 0] [0 1 1] [1]
[0 0 1] x1 + [1 1 1] x2 + [0]
[0 1 0] [1 0 1] [0]
p(split#3#) = [0]
[0]
[0]
p(transAcc#) = [0]
[0]
[0]
p(transAcc#1#) = [0]
[0]
[0]
p(transpose#) = [1 1 0] [1]
[1 0 0] x1 + [1]
[1 0 1] [1]
p(transpose#1#) = [0 0 0] [1 1 0] [1]
[0 0 1] x1 + [1 0 0] x2 + [1]
[1 0 0] [1 0 1] [1]
p(transpose#2#) = [1 0 0] [0]
[0 0 1] x1 + [1]
[1 0 0] [0]
p(transpose#3#) = [1 1 1] [0]
[0 0 1] x1 + [1]
[1 1 1] [1]
p(transpose'#) = [0]
[0]
[0]
p(c_1) = [0]
[0]
[0]
p(c_2) = [0]
[0]
[0]
p(c_3) = [0]
[0]
[0]
p(c_4) = [0]
[0]
[0]
p(c_5) = [0]
[0]
[0]
p(c_6) = [0]
[0]
[0]
p(c_7) = [0]
[0]
[0]
p(c_8) = [0]
[0]
[0]
p(c_9) = [0]
[0]
[0]
p(c_10) = [0]
[0]
[0]
p(c_11) = [0]
[0]
[0]
p(c_12) = [0]
[0]
[0]
p(c_13) = [0]
[0]
[0]
p(c_14) = [0]
[0]
[0]
p(c_15) = [0]
[0]
[0]
p(c_16) = [0]
[0]
[0]
p(c_17) = [0]
[0]
[0]
p(c_18) = [0]
[0]
[0]
p(c_19) = [0]
[0]
[0]
p(c_20) = [0]
[0]
[0]
p(c_21) = [0]
[0]
[0]
p(c_22) = [0]
[0]
[0]
p(c_23) = [0]
[0]
[0]
p(c_24) = [0]
[0]
[0]
p(c_25) = [0]
[0]
[0]
p(c_26) = [0]
[0]
[0]
p(c_27) = [0]
[0]
[0]
p(c_28) = [0]
[0]
[0]
p(c_29) = [0]
[0]
[0]
p(c_30) = [1 0 0] [0]
[0 1 0] x1 + [0]
[0 0 0] [1]
p(c_31) = [0]
[0]
[0]
p(c_32) = [0]
[0]
[0]
p(c_33) = [0]
[0]
[0]
p(c_34) = [0]
[0]
[0]
p(c_35) = [0]
[0]
[0]
p(c_36) = [0]
[0]
[0]
p(c_37) = [0]
[0]
[0]
p(c_38) = [0]
[0]
[0]
p(c_39) = [1 0 0] [0]
[0 0 0] x1 + [0]
[0 1 0] [0]
p(c_40) = [1 0 0] [0]
[0 0 0] x1 + [1]
[1 0 0] [0]
p(c_41) = [0]
[0]
[0]
p(c_42) = [1 0 0] [0]
[0 0 1] x1 + [0]
[0 1 1] [0]
p(c_43) = [0]
[0]
[0]
p(c_44) = [0]
[0]
[0]
p(c_45) = [0]
[0]
[0]
p(c_46) = [0]
[0]
[0]
p(c_47) = [0]
[0]
[0]
p(c_48) = [1 0 0] [0]
[0 0 0] x1 + [1]
[0 1 0] [0]
p(c_49) = [1 0 0] [1 0 0] [0]
[1 1 0] x1 + [0 0 0] x2 + [0]
[0 0 0] [0 1 1] [0]
p(c_50) = [0]
[0]
[0]
p(c_51) = [1 0 0] [0]
[0 0 0] x1 + [1]
[0 0 0] [0]
p(c_52) = [1 0 0] [0]
[0 0 0] x1 + [1]
[0 1 0] [1]
p(c_53) = [0]
[0]
[0]
p(c_54) = [0]
[0]
[0]
p(c_55) = [0]
[0]
[0]
p(c_56) = [0]
[0]
[0]
p(c_57) = [0]
[0]
[0]
p(c_58) = [0]
[0]
[0]
p(c_59) = [0]
[0]
[0]
p(c_60) = [0]
[0]
[0]
p(c_61) = [0]
[0]
[0]
p(c_62) = [0]
[0]
[0]
p(c_63) = [0]
[0]
[0]
p(c_64) = [0]
[0]
[0]
p(c_65) = [0]
[0]
[0]
p(c_66) = [0]
[0]
[0]
p(c_67) = [0]
[0]
[0]
p(c_68) = [0]
[0]
[0]
p(c_69) = [0]
[0]
[0]
p(c_70) = [0]
[0]
[0]
p(c_71) = [0]
[0]
[0]
p(c_72) = [0]
[0]
[0]
p(c_73) = [0]
[0]
[0]
p(c_74) = [0]
[0]
[0]
p(c_75) = [0]
[0]
[0]
p(c_76) = [0]
[0]
[0]
p(c_77) = [0]
[0]
[0]
p(c_78) = [0]
[0]
[0]
Following rules are strictly oriented:
split#(@m) = [0 1 0] [1]
[1 0 0] @m + [0]
[0 0 1] [1]
> [0 1 0] [0]
[0 0 0] @m + [0]
[0 0 1] [0]
= c_39(split#1#(@m))
Following rules are (at-least) weakly oriented:
matrixMultOld#(@m1,@m2) = [1 1 1] [1]
[1 0 1] @m2 + [1]
[1 1 1] [1]
>= [1 1 0] [1]
[1 0 0] @m2 + [1]
[0 0 0] [1]
= c_30(transpose#(@m2))
split#1#(::(@l,@ls)) = [0 1 1] [1]
[0 0 0] @ls + [1]
[0 1 1] [3]
>= [0 1 1] [1]
[0 0 0] @ls + [1]
[0 1 1] [1]
= c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) = [0 1 1] [0 0 0] [1]
[1 1 1] @ls + [0 0 0] @xs + [1]
[1 0 1] [0 1 1] [1]
>= [0 1 0] [1]
[0 0 1] @ls + [1]
[1 0 1] [1]
= c_42(split#(@ls))
transpose#(@m) = [1 1 0] [1]
[1 0 0] @m + [1]
[1 0 1] [1]
>= [1 1 0] [1]
[0 0 0] @m + [1]
[1 0 1] [1]
= c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) = [1 1 0] [0 0 0] [0 0 0] [1]
[1 0 0] @m + [0 0 0] @xs + [0 0 0] @xss + [2]
[1 0 1] [0 1 1] [1 0 0] [1]
>= [1 1 0] [1]
[1 0 0] @m + [2]
[1 0 1] [1]
= c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) = [1 1 1] [0]
[0 0 0] @m' + [2]
[1 1 1] [0]
>= [1 1 1] [0]
[0 0 0] @m' + [1]
[0 0 0] [0]
= c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) = [0 1 1] [1 1 1] [2]
[0 0 0] @y + [0 0 0] @ys + [2]
[0 1 1] [1 1 1] [3]
>= [0 1 1] [1 1 1] [2]
[0 0 0] @y + [0 0 0] @ys + [1]
[0 1 1] [1 0 0] [2]
= c_52(transpose#(::(@y,@ys)))
split(@m) = [1 0 0] [0]
[0 0 0] @m + [0]
[0 0 0] [1]
>= [1 0 0] [0]
[0 0 0] @m + [0]
[0 0 0] [1]
= split#1(@m)
split#1(::(@l,@ls)) = [0 1 1] [1 0 0] [0]
[0 0 0] @l + [0 0 0] @ls + [0]
[0 0 0] [0 0 0] [1]
>= [0 1 1] [1 0 0] [0]
[0 0 0] @l + [0 0 0] @ls + [0]
[0 0 0] [0 0 0] [1]
= split#2(@l,@ls)
split#1(nil()) = [0]
[0]
[1]
>= [0]
[0]
[1]
= tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) = [1 0 0] [0 1 1] [2]
[0 0 0] @ls + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [1]
>= [1 0 0] [0 1 1] [2]
[0 0 0] @ls + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [1]
= split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) = [1 0 0] [0]
[0 0 0] @ls + [0]
[0 0 0] [1]
>= [0]
[0]
[1]
= tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) = [1 1 1] [0 1 1] [2]
[0 0 0] @m' + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [1]
>= [1 1 1] [0 1 1] [2]
[0 0 0] @m' + [0 0 0] @xs + [0]
[0 0 0] [0 0 0] [1]
= tuple#2(::(@x,@ys),::(@xs,@m'))
********** Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1.b:1.a:2: Assumption WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
Assumption {assumed = Certificate {spaceUB = Unknown, spaceLB = Unknown, timeUB = Poly (Just 0), timeLB = Unknown}}
+ Details:
()
********** Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(1))
+ Considered Problem:
- Weak DPs:
matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
split#(@m) -> c_39(split#1#(@m))
split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
transpose#(@m) -> c_48(transpose#1#(@m,@m))
transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
RemoveWeakSuffixes
+ Details:
Consider the dependency graph
1:W:matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):5
2:W:split#(@m) -> c_39(split#1#(@m))
-->_1 split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)):3
3:W:split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
-->_1 split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)):4
4:W:split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
-->_1 split#(@m) -> c_39(split#1#(@m)):2
5:W:transpose#(@m) -> c_48(transpose#1#(@m,@m))
-->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):6
6:W:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
-->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):7
-->_2 split#(@m) -> c_39(split#1#(@m)):2
7:W:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
-->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):8
8:W:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
-->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):5
The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed.
1: matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2))
5: transpose#(@m) -> c_48(transpose#1#(@m,@m))
8: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys)))
7: transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l))
6: transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m))
2: split#(@m) -> c_39(split#1#(@m))
4: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls))
3: split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls))
********** Step 8.b:3.b:3.b:3.b:4.b:4.b:3.b:1.b:1.b:2: EmptyProcessor WORST_CASE(?,O(1))
+ Considered Problem:
- Weak TRS:
split(@m) -> split#1(@m)
split#1(::(@l,@ls)) -> split#2(@l,@ls)
split#1(nil()) -> tuple#2(nil(),nil())
split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs)
split#2(nil(),@ls) -> tuple#2(nil(),nil())
split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m'))
- Signature:
{#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2
,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2
,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2
,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2
,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2
,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1
,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2
,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1
,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2
,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1
,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/1
,c_23/1,c_24/1,c_25/0,c_26/2,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/0,c_34/1,c_35/1,c_36/1,c_37/1
,c_38/1,c_39/1,c_40/1,c_41/0,c_42/1,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/2,c_50/0,c_51/1,c_52/1
,c_53/0,c_54/1,c_55/0,c_56/1,c_57/2,c_58/1,c_59/2,c_60/0,c_61/0,c_62/0,c_63/0,c_64/1,c_65/1,c_66/0,c_67/1
,c_68/1,c_69/0,c_70/2,c_71/0,c_72/0,c_73/0,c_74/0,c_75/0,c_76/0,c_77/0,c_78/0}
- Obligation:
innermost runtime complexity wrt. defined symbols {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#
,attach#1#,attach#2#,lineMult#,lineMult#1#,m1#,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#
,matrixMult'#1#,matrixMult3#,matrixMultList#,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#
,mult#1#,mult#2#,split#,split#1#,split#2#,split#3#,transAcc#,transAcc#1#,transpose#,transpose#1#
,transpose#2#,transpose#3#,transpose'#} and constructors {#0,#neg,#pos,#s,::,nil,tuple#2}
+ Applied Processor:
EmptyProcessor
+ Details:
The problem is already closed. The intended complexity is O(1).
WORST_CASE(?,O(n^5))