* 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))