WORST_CASE(?,O(n^4)) * Step 1: Sum WORST_CASE(?,O(n^4)) + 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^4)) + 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: PredecessorEstimation WORST_CASE(?,O(n^4)) + 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: 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 4: PredecessorEstimation WORST_CASE(?,O(n^4)) + 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() #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: 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 5: RemoveWeakSuffixes WORST_CASE(?,O(n^4)) + 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() #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: 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 6: SimplifyRHS WORST_CASE(?,O(n^4)) + 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() #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: 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 7: UsableRules WORST_CASE(?,O(n^4)) + 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() #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/1 ,c_38/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: 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() 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)) * Step 8: DecomposeDG WORST_CASE(?,O(n^4)) + 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: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component 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)) 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)) and a lower component 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)) 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)) 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> transAcc#(@m,makeBase(@m)) ** Step 8.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#(@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)) 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: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,9} by application of Pre({1,9}) = {}. Here rules are labelled as follows: 1: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2)) 2: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) 3: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m)) 4: matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2)) 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))) 9: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m)) ** Step 8.a:2: 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),matrixMult#(@acc,@m)) matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2)) 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: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2)) 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: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)):4 4:S:transpose#(@m) -> c_48(transpose#1#(@m,@m)) -->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):5 5: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)):6 6:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)) -->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):7 7:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))) -->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):4 8:W:matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2)) 9:W:transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 9: transpose'#(@m) -> c_54(transAcc#(@m,makeBase(@m)),makeBase#(@m)) 8: matrixMult3#(@m1,@m2,@m3) -> c_26(matrixMult#(matrixMult(@m1,@m2),@m3),matrixMult#(@m1,@m2)) ** Step 8.a:3: SimplifyRHS 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),matrixMult#(@acc,@m)) matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2)) 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/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: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)):4 4:S:transpose#(@m) -> c_48(transpose#1#(@m,@m)) -->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m)),split#(@m)):5 5: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)):6 6:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)) -->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):7 7:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))) -->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):4 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)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m))) ** Step 8.a:4: 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)) matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(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/3 ,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/2,c_47/0,c_48/1,c_49/1,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 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)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(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.a:5: RemoveHeads 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)) matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(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/3 ,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/2,c_47/0,c_48/1,c_49/1,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: RemoveHeads + 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:S:matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2)) -->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):4 4:S:transpose#(@m) -> c_48(transpose#1#(@m,@m)) -->_1 transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m))):5 5:S:transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m))) -->_1 transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)):6 6:S:transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)) -->_1 transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))):7 7:S:transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))) -->_1 transpose#(@m) -> c_48(transpose#1#(@m,@m)):4 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(3,matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2)))] ** Step 8.a:6: WeightGap 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)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(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/3 ,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/2,c_47/0,c_48/1,c_49/1,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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(matrixMultList#) = {1}, uargs(transpose#2#) = {1}, uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [0] p(m2) = [2] x1 + [0] p(m3) = [0] p(m4) = [4] x1 + [1] p(makeBase) = [4] p(makeBase#1) = [4] p(matrixMult) = [1] x2 + [7] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [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) = [2] p(split#1) = [2] p(split#2) = [2] p(split#3) = [1] x1 + [0] p(transAcc) = [1] x1 + [1] x2 + [0] p(transAcc#1) = [1] x1 + [1] x2 + [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#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [0] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [0] p(matrixMultList#) = [1] x1 + [1] x2 + [0] p(matrixMultList#1#) = [1] x1 + [1] x2 + [3] p(matrixMultOld#) = [1] x2 + [0] p(mkBase#) = [0] p(mkBase#1#) = [1] p(mult#) = [2] x2 + [0] p(mult#1#) = [2] x2 + [1] p(mult#2#) = [1] x1 + [1] x2 + [1] x3 + [2] p(split#) = [2] x1 + [2] p(split#1#) = [1] x1 + [1] 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#) = [1] x1 + [0] p(transpose#3#) = [7] 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) = [1] x4 + [2] x5 + [0] p(c_17) = [1] x1 + [4] x3 + [1] x4 + [4] x6 + [1] x7 + [1] x8 + [4] p(c_18) = [1] x1 + [1] x2 + [1] x4 + [0] p(c_19) = [1] p(c_20) = [1] x1 + [1] p(c_21) = [1] p(c_22) = [1] x1 + [1] x3 + [1] p(c_23) = [2] x1 + [1] p(c_24) = [1] x1 + [0] p(c_25) = [0] p(c_26) = [1] x1 + [1] x2 + [1] p(c_27) = [1] x1 + [1] p(c_28) = [1] x1 + [0] p(c_29) = [4] p(c_30) = [4] x1 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] p(c_33) = [1] p(c_34) = [1] x1 + [2] p(c_35) = [4] x1 + [4] p(c_36) = [1] x1 + [1] p(c_37) = [1] x1 + [0] p(c_38) = [0] p(c_39) = [2] x1 + [0] p(c_40) = [0] p(c_41) = [1] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [1] p(c_46) = [1] x1 + [1] x2 + [1] p(c_47) = [0] p(c_48) = [1] x1 + [1] p(c_49) = [1] x1 + [6] p(c_50) = [0] p(c_51) = [1] x1 + [6] p(c_52) = [1] x1 + [4] p(c_53) = [1] p(c_54) = [2] x1 + [1] x2 + [2] p(c_55) = [0] p(c_56) = [2] p(c_57) = [1] x2 + [1] p(c_58) = [0] p(c_59) = [2] p(c_60) = [4] p(c_61) = [0] p(c_62) = [1] p(c_63) = [4] p(c_64) = [1] x1 + [0] p(c_65) = [1] x1 + [1] p(c_66) = [4] p(c_67) = [1] x1 + [0] p(c_68) = [0] p(c_69) = [1] p(c_70) = [1] x2 + [0] p(c_71) = [0] p(c_72) = [1] p(c_73) = [0] p(c_74) = [4] p(c_75) = [4] p(c_76) = [1] p(c_77) = [2] p(c_78) = [1] Following rules are strictly oriented: transpose#3#(::(@y,@ys),@l) = [7] > [4] = c_52(transpose#(::(@y,@ys))) Following rules are (at-least) weakly oriented: matrixMultList#(@acc,@mm) = [1] @acc + [1] @mm + [0] >= [1] @acc + [1] @mm + [4] = c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [1] @m + [1] @ms + [3] >= [1] @m + [1] @ms + [7] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#(@m) = [0] >= [1] = c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) = [0] >= [8] = c_49(transpose#2#(split(@m))) transpose#2#(tuple#2(@l,@m')) = [0] >= [13] = c_51(transpose#3#(@m',@l)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [4] >= [4] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [4] >= [0] = mkBase(@l) makeBase#1(nil()) = [4] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m2 + [7] >= [1] @m2 + [4] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [2] >= [2] = split#1(@m) split#1(::(@l,@ls)) = [2] >= [2] = split#2(@l,@ls) split#1(nil()) = [2] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [2] >= [2] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [2] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [0] >= [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [1] @m + [0] >= [1] @base + [1] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [1] @l + [1] @m' + [0] >= [1] @base + [1] @l + [1] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 8.a:7: WeightGap 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)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m))) transpose#2#(tuple#2(@l,@m')) -> c_51(transpose#3#(@m',@l)) - Weak DPs: 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/3 ,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/2,c_47/0,c_48/1,c_49/1,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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(matrixMultList#) = {1}, uargs(transpose#2#) = {1}, uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [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) = [3] x2 + [5] p(matrixMult') = [1] x2 + [5] p(matrixMult'#1) = [1] x2 + [5] 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) = [4] p(split#1) = [4] p(split#2) = [4] p(split#3) = [1] x1 + [0] p(transAcc) = [2] x1 + [1] x2 + [0] p(transAcc#1) = [2] x1 + [1] x2 + [0] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [0] p(transpose') = [0] p(tuple#2) = [4] 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] x1 + [4] x2 + [5] p(matrixMultList#1#) = [4] x1 + [1] x2 + [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#) = [0] p(transAcc#1#) = [4] x2 + [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [1] x1 + [1] 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) = [1] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [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) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [4] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [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: matrixMultList#(@acc,@mm) = [1] @acc + [4] @mm + [5] > [1] @acc + [4] @mm + [0] = c_27(matrixMultList#1#(@mm,@acc)) transpose#2#(tuple#2(@l,@m')) = [5] > [0] = c_51(transpose#3#(@m',@l)) Following rules are (at-least) weakly oriented: matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [4] @m + [4] @ms + [0] >= [3] @m + [4] @ms + [10] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#(@m) = [0] >= [0] = c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) = [0] >= [9] = c_49(transpose#2#(split(@m))) transpose#3#(::(@y,@ys),@l) = [0] >= [0] = c_52(transpose#(::(@y,@ys))) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [3] @m2 + [5] >= [2] @m2 + [5] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [5] >= [1] @m2 + [5] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [5] >= [1] @m2 + [5] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [5] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [4] >= [4] = split#1(@m) split#1(::(@l,@ls)) = [4] >= [4] = split#2(@l,@ls) split#1(nil()) = [4] >= [4] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [4] >= [4] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [4] >= [4] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [4] >= [4] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [2] @m + [0] >= [1] @base + [2] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [1] @l + [2] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 8.a:8: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(split(@m))) - Weak DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) 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/3 ,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/2,c_47/0,c_48/1,c_49/1,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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(matrixMultList#) = {1}, uargs(transpose#2#) = {1}, uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [4] x1 + [1] x2 + [0] p(attach#1) = [4] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [4] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [2] x1 + [2] p(m2) = [4] p(m3) = [4] x1 + [1] p(m4) = [1] x1 + [1] p(makeBase) = [1] p(makeBase#1) = [1] p(matrixMult) = [1] x1 + [4] x2 + [1] p(matrixMult') = [1] x1 + [1] x2 + [0] p(matrixMult'#1) = [1] x1 + [1] x2 + [0] p(matrixMult3) = [1] x2 + [1] x3 + [4] p(matrixMultList) = [1] x2 + [0] p(matrixMultList#1) = [2] x1 + [2] x2 + [0] p(matrixMultOld) = [1] x1 + [1] 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) = [1] x1 + [0] p(transAcc) = [4] x1 + [1] x2 + [0] p(transAcc#1) = [4] x1 + [1] x2 + [0] p(transpose) = [1] p(transpose#1) = [2] x1 + [0] p(transpose#2) = [1] x1 + [1] p(transpose#3) = [1] x2 + [1] p(transpose') = [1] x1 + [1] p(tuple#2) = [0] p(#abs#) = [1] x1 + [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [2] x2 + [0] p(+#) = [0] p(attach#) = [0] p(attach#1#) = [1] x2 + [2] p(attach#2#) = [4] x1 + [1] p(lineMult#) = [0] p(lineMult#1#) = [0] p(m1#) = [0] p(m2#) = [0] p(m3#) = [2] 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] x1 + [4] x2 + [2] p(matrixMultList#1#) = [4] x1 + [1] x2 + [2] p(matrixMultOld#) = [0] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [2] x2 + [0] p(mult#1#) = [1] x2 + [0] p(mult#2#) = [2] x1 + [1] x2 + [2] x3 + [0] p(split#) = [1] x1 + [2] p(split#1#) = [4] x1 + [4] p(split#2#) = [1] x1 + [1] p(split#3#) = [1] x2 + [0] p(transAcc#) = [4] x1 + [1] x2 + [4] p(transAcc#1#) = [1] x1 + [4] p(transpose#) = [0] p(transpose#1#) = [4] p(transpose#2#) = [1] x1 + [3] 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) = [2] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [1] x2 + [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) = [2] x1 + [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [3] 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) = [0] p(c_46) = [2] x1 + [0] p(c_47) = [0] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [2] p(c_52) = [1] x1 + [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) = [1] x1 + [0] p(c_68) = [1] p(c_69) = [2] p(c_70) = [1] x1 + [0] p(c_71) = [0] p(c_72) = [2] p(c_73) = [0] p(c_74) = [0] p(c_75) = [4] p(c_76) = [4] p(c_77) = [4] p(c_78) = [0] Following rules are strictly oriented: transpose#1#(::(@xs,@xss),@m) = [4] > [3] = c_49(transpose#2#(split(@m))) Following rules are (at-least) weakly oriented: matrixMultList#(@acc,@mm) = [1] @acc + [4] @mm + [2] >= [1] @acc + [4] @mm + [2] = c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [4] @m + [4] @ms + [2] >= [1] @acc + [4] @m + [4] @ms + [6] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#(@m) = [0] >= [4] = c_48(transpose#1#(@m,@m)) transpose#2#(tuple#2(@l,@m')) = [3] >= [2] = c_51(transpose#3#(@m',@l)) transpose#3#(::(@y,@ys),@l) = [0] >= [0] = c_52(transpose#(::(@y,@ys))) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [4] @line + [1] @m + [0] >= [4] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [4] @x + [4] @xs + [0] >= [1] @m + [1] @x + [4] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [4] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [4] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [4] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [1] >= [1] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [1] >= [0] = mkBase(@l) makeBase#1(nil()) = [1] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m1 + [4] @m2 + [1] >= [1] @m1 + [4] @m2 + [1] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m1 + [1] @m2 + [0] >= [1] @m1 + [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @l + [1] @ls + [1] @m2 + [0] >= [1] @ls + [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [0] >= [0] = split#1(@m) split#1(::(@l,@ls)) = [0] >= [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [0] >= [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [0] >= [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [4] @m + [0] >= [1] @base + [4] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [4] @l + [4] @m' + [0] >= [1] @base + [4] @l + [4] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 8.a:9: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) - Weak DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(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/3 ,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/2,c_47/0,c_48/1,c_49/1,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 any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, uargs(c_51) = {1}, uargs(c_52) = {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) = [0] p(#add) = [0] p(#mult) = [6] x2 + [5] p(#natmult) = [3] p(#neg) = [1] x1 + [0] p(#pos) = [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [3] p(*) = [2] x1 + [0] p(+) = [1] x1 + [0] p(::) = [1] x2 + [4] p(attach) = [7] x2 + [1] p(attach#1) = [0] p(attach#2) = [0] p(lineMult) = [0] 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) = [0] p(matrixMult') = [2] x2 + [0] p(matrixMult'#1) = [4] 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) = [1] x2 + [0] p(nil) = [2] p(split) = [0] p(split#1) = [0] p(split#2) = [1] x2 + [0] p(split#3) = [1] x2 + [0] p(transAcc) = [1] p(transAcc#1) = [3] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [0] p(transpose') = [0] p(tuple#2) = [1] x2 + [4] 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#) = [2] x2 + [5] p(matrixMultList#1#) = [2] x1 + [5] 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#) = [1] 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) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [2] x1 + [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [2] x1 + [2] x5 + [2] x6 + [0] p(c_16) = [4] x2 + [1] x3 + [1] x4 + [1] x5 + [1] x6 + [0] p(c_17) = [4] x2 + [0] p(c_18) = [2] x1 + [1] x3 + [1] x4 + [0] p(c_19) = [1] x1 + [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [1] x1 + [1] x2 + [4] x3 + [0] p(c_23) = [0] p(c_24) = [1] x2 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [4] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [2] x1 + [0] p(c_35) = [0] p(c_36) = [1] x1 + [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [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) = [0] p(c_46) = [1] x2 + [1] p(c_47) = [1] p(c_48) = [4] x1 + [0] p(c_49) = [2] x1 + [0] p(c_50) = [2] p(c_51) = [4] x1 + [0] p(c_52) = [4] x1 + [0] p(c_53) = [0] p(c_54) = [4] x1 + [2] x2 + [0] p(c_55) = [0] p(c_56) = [2] x1 + [0] p(c_57) = [1] x1 + [0] p(c_58) = [1] 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) = [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: matrixMultList#1#(::(@m,@ms),@acc) = [2] @ms + [13] > [2] @ms + [9] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) Following rules are (at-least) weakly oriented: matrixMultList#(@acc,@mm) = [2] @mm + [5] >= [2] @mm + [5] = c_27(matrixMultList#1#(@mm,@acc)) transpose#(@m) = [0] >= [0] = c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) = [0] >= [0] = c_49(transpose#2#(split(@m))) transpose#2#(tuple#2(@l,@m')) = [0] >= [0] = c_51(transpose#3#(@m',@l)) transpose#3#(::(@y,@ys),@l) = [0] >= [0] = c_52(transpose#(::(@y,@ys))) ** Step 8.a:10: MI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: transpose#(@m) -> c_48(transpose#1#(@m,@m)) - Weak DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(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/3 ,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/2,c_47/0,c_48/1,c_49/1,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: MI {miKind = Automaton Nothing, miDimension = 3, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules} + Details: We apply a matrix interpretation of kind Automaton Nothing: The following argument positions are considered usable: uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_48) = {1}, uargs(c_49) = {1}, 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) = [1] [0] [1] p(#abs) = [1] [0] [0] p(#add) = [1 0 0] [1 1 0] [1] [1 0 0] x_1 + [1 0 1] x_2 + [0] [1 0 0] [0 0 0] [1] p(#mult) = [0 0 0] [0 0 1] [0] [0 1 1] x_1 + [1 0 0] x_2 + [0] [1 0 0] [0 0 0] [0] p(#natmult) = [1 0 1] [0] [1 0 0] x_2 + [0] [1 0 1] [0] p(#neg) = [1 0 0] [1] [0 0 0] x_1 + [1] [1 0 0] [1] p(#pos) = [0] [1] [0] p(#pred) = [0 1 0] [0] [0 1 0] x_1 + [0] [0 1 0] [0] p(#s) = [1] [0] [0] p(#succ) = [0 1 1] [0] [0 0 0] x_1 + [1] [1 0 0] [1] p(*) = [0 0 0] [0 0 0] [1] [1 0 0] x_1 + [0 1 0] x_2 + [1] [1 1 0] [1 1 0] [0] p(+) = [0 1 1] [0 0 0] [1] [0 0 0] x_1 + [0 0 0] x_2 + [0] [1 1 1] [0 0 1] [0] p(::) = [0 1 0] [0 0 0] [1] [0 0 0] x_1 + [0 1 1] x_2 + [1] [0 1 0] [0 0 0] [0] p(attach) = [0 0 0] [0] [0 0 0] x_2 + [0] [1 0 0] [0] p(attach#1) = [0 0 0] [0] [1 1 0] x_1 + [0] [1 0 0] [1] p(attach#2) = [1 0 0] [1] [1 0 0] x_1 + [1] [0 1 0] [1] p(lineMult) = [0 0 0] [0] [0 1 0] x_2 + [0] [0 0 0] [0] p(lineMult#1) = [1 0 0] [0] [0 1 0] x_1 + [1] [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] [1] [0 0 0] x_1 + [1] [0 1 1] [0] p(makeBase#1) = [0 0 0] [0] [0 0 0] x_1 + [0] [0 0 1] [0] p(matrixMult) = [0] [0] [0] p(matrixMult') = [0 0 0] [0] [0 0 0] x_2 + [0] [0 1 0] [0] p(matrixMult'#1) = [1] [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] [1] [1] p(mkBase#1) = [0 0 0] [0] [1 0 0] x_1 + [0] [1 1 0] [0] p(mult) = [0 0 0] [0] [0 0 0] x_2 + [0] [0 1 1] [1] p(mult#1) = [1 1 0] [0] [0 0 0] x_1 + [0] [1 0 0] [1] p(mult#2) = [0] [0] [0] p(nil) = [0] [0] [0] p(split) = [0 0 1] [0] [0 0 1] x_1 + [0] [0 1 0] [1] p(split#1) = [0 0 1] [0] [0 0 1] x_1 + [0] [0 1 0] [0] p(split#2) = [0 0 0] [0 0 0] [0] [0 1 0] x_1 + [0 0 0] x_2 + [0] [0 0 0] [0 0 1] [0] p(split#3) = [0 0 0] [0 0 0] [0] [0 0 0] x_1 + [0 1 0] x_3 + [1] [1 0 0] [0 0 0] [0] p(transAcc) = [0 0 1] [1 1 0] [0] [0 1 1] x_1 + [1 1 1] x_2 + [0] [0 0 1] [0 0 1] [0] p(transAcc#1) = [0 0 0] [0] [1 0 1] x_1 + [0] [1 0 0] [1] 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 0] x_2 + [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] [0] [1 1 0] x_2 + [1] [0 0 0] [0] p(matrixMultList#1#) = [0 0 0] [0] [1 1 0] x_1 + [1] [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(split#) = [0] [0] [0] p(split#1#) = [0] [0] [0] p(split#2#) = [0] [0] [0] p(split#3#) = [0] [0] [0] p(transAcc#) = [0] [0] [0] p(transAcc#1#) = [0] [0] [0] p(transpose#) = [0 0 1] [1] [0 0 0] x_1 + [1] [0 0 0] [1] p(transpose#1#) = [0 0 0] [0 0 1] [0] [0 1 0] x_1 + [0 0 0] x_2 + [1] [0 0 0] [0 0 0] [1] p(transpose#2#) = [0 1 0] [0] [0 0 0] x_1 + [0] [0 0 0] [1] p(transpose#3#) = [1 0 0] [0] [0 0 0] x_1 + [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) = [1 0 0] [0] [0 1 0] x_1 + [0] [0 0 0] [0] p(c_28) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 0] [0] p(c_29) = [0] [0] [0] p(c_30) = [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) = [0] [0] [0] p(c_40) = [0] [0] [0] p(c_41) = [0] [0] [0] p(c_42) = [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] x_1 + [0] [0 0 0] [0] p(c_49) = [1 0 0] [0] [0 0 1] x_1 + [1] [0 0 0] [0] p(c_50) = [0] [0] [0] p(c_51) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 0] [0] p(c_52) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 1] [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#(@m) = [0 0 1] [1] [0 0 0] @m + [1] [0 0 0] [1] > [0 0 1] [0] [0 0 0] @m + [0] [0 0 0] [0] = c_48(transpose#1#(@m,@m)) Following rules are (at-least) weakly oriented: matrixMultList#(@acc,@mm) = [0 0 0] [0] [1 1 0] @mm + [1] [0 0 0] [0] >= [0 0 0] [0] [1 1 0] @mm + [1] [0 0 0] [0] = c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) = [0 0 0] [0 0 0] [0] [0 1 0] @m + [0 1 1] @ms + [3] [0 1 0] [0 0 0] [1] >= [0] [0] [0] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#1#(::(@xs,@xss),@m) = [0 0 1] [0 0 0] [0] [0 0 0] @m + [0 1 1] @xss + [2] [0 0 0] [0 0 0] [1] >= [0 0 1] [0] [0 0 0] @m + [2] [0 0 0] [0] = c_49(transpose#2#(split(@m))) transpose#2#(tuple#2(@l,@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] [0] = c_51(transpose#3#(@m',@l)) transpose#3#(::(@y,@ys),@l) = [0 1 0] [0 0 0] [1] [0 0 0] @y + [0 0 0] @ys + [1] [0 0 0] [0 1 1] [2] >= [0 1 0] [1] [0 0 0] @y + [0] [0 0 0] [2] = c_52(transpose#(::(@y,@ys))) split(@m) = [0 0 1] [0] [0 0 1] @m + [0] [0 1 0] [1] >= [0 0 1] [0] [0 0 1] @m + [0] [0 1 0] [0] = split#1(@m) split#1(::(@l,@ls)) = [0 1 0] [0 0 0] [0] [0 1 0] @l + [0 0 0] @ls + [0] [0 0 0] [0 1 1] [1] >= [0 0 0] [0 0 0] [0] [0 1 0] @l + [0 0 0] @ls + [0] [0 0 0] [0 0 1] [0] = split#2(@l,@ls) split#1(nil()) = [0] [0] [0] >= [0] [0] [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [0 0 0] [0 0 0] [0] [0 0 0] @ls + [0 1 1] @xs + [1] [0 0 1] [0 0 0] [0] >= [0 0 0] [0 0 0] [0] [0 0 0] @ls + [0 1 0] @xs + [1] [0 0 1] [0 0 0] [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [0 0 0] [0] [0 0 0] @ls + [0] [0 0 1] [0] >= [0] [0] [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [0 0 0] [0] [0 1 0] @xs + [1] [0 0 0] [0] >= [0 0 0] [0] [0 1 0] @xs + [1] [0 0 0] [0] = tuple#2(::(@x,@ys),::(@xs,@m')) ** Step 8.a:11: EmptyProcessor 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)) transpose#(@m) -> c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) -> c_49(transpose#2#(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/3 ,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/2,c_47/0,c_48/1,c_49/1,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:1: DecomposeDG WORST_CASE(?,O(n^3)) + 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)) 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)) - Weak DPs: 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> 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/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: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component 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) -> 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)) matrixMultOld#(@m1,@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(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> transAcc#(@m,makeBase(@m)) and a lower component 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)) 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. makeBase#(@m) -> makeBase#1#(@m) makeBase#1#(::(@l,@m')) -> mkBase#(@l) matrixMult#(@m1,@m2) -> makeBase#(@m2) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) mkBase#(@m) -> mkBase#1#(@m) mkBase#1#(::(@l,@m')) -> mkBase#(@m') split#(@m) -> split#1#(@m) split#1#(::(@l,@ls)) -> split#2#(@l,@ls) split#2#(::(@x,@xs),@ls) -> split#(@ls) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> transAcc#(@m,makeBase(@m)) *** Step 8.b:1.a:1: RemoveHeads WORST_CASE(?,O(n^1)) + 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)) 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(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)) - Weak DPs: 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> 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/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: RemoveHeads + 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)):6 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)):11 -->_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:mkBase#(@m) -> c_31(mkBase#1#(@m)) -->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):7 7:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')) -->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):6 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(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):12 12: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)):11 13:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2) -->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) ,transAcc#(@m2,makeBase(@m2)) ,makeBase#(@m2)):3 14:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) -->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) ,transAcc#(@m2,makeBase(@m2)) ,makeBase#(@m2)):3 15:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):17 -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):16 16:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) -->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) ,transAcc#(@m2,makeBase(@m2)) ,makeBase#(@m2)):3 17:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) -->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):15 18:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) -->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4 19:W:matrixMultOld#(@m1,@m2) -> transpose#(@m2) -->_1 transpose#(@m) -> transpose#1#(@m,@m):20 20:W:transpose#(@m) -> transpose#1#(@m,@m) -->_1 transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)):22 -->_1 transpose#1#(::(@xs,@xss),@m) -> split#(@m):21 21:W:transpose#1#(::(@xs,@xss),@m) -> split#(@m) -->_1 split#(@m) -> c_39(split#1#(@m)):8 22:W:transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) -->_1 transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l):23 23:W:transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) -->_1 transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)):24 24:W:transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) -->_1 transpose#(@m) -> transpose#1#(@m,@m):20 25:W:transpose'#(@m) -> makeBase#(@m) -->_1 makeBase#(@m) -> c_19(makeBase#1#(@m)):1 26:W:transpose'#(@m) -> transAcc#(@m,makeBase(@m)) -->_1 transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)):11 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(13,matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2)) ,(19,matrixMultOld#(@m1,@m2) -> transpose#(@m2)) ,(25,transpose'#(@m) -> makeBase#(@m))] *** Step 8.b:1.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)) 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)) 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(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)) - Weak DPs: 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)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: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)):6 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)):11 -->_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:mkBase#(@m) -> c_31(mkBase#1#(@m)) -->_1 mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')):7 7:S:mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')) -->_1 mkBase#(@m) -> c_31(mkBase#1#(@m)):6 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(attach#(@l,transAcc(@m',@base)),transAcc#(@m',@base)):12 12: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)):11 14:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) -->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) ,transAcc#(@m2,makeBase(@m2)) ,makeBase#(@m2)):3 15:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):17 -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):16 16:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) -->_1 matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) ,transAcc#(@m2,makeBase(@m2)) ,makeBase#(@m2)):3 17:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) -->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):15 18:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) -->_1 matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)):4 20:W:transpose#(@m) -> transpose#1#(@m,@m) -->_1 transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)):22 -->_1 transpose#1#(::(@xs,@xss),@m) -> split#(@m):21 21:W:transpose#1#(::(@xs,@xss),@m) -> split#(@m) -->_1 split#(@m) -> c_39(split#1#(@m)):8 22:W:transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) -->_1 transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l):23 23:W:transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) -->_1 transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)):24 24:W:transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) -->_1 transpose#(@m) -> transpose#1#(@m,@m):20 26:W:transpose'#(@m) -> 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'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@m2)) transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) *** Step 8.b:1.a:3: WeightGap WORST_CASE(?,O(n^1)) + 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)) 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)) - Weak DPs: 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)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(transAcc#) = {2}, uargs(transpose#2#) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [0] p(m2) = [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [1] x1 + [0] p(makeBase#1) = [0] p(matrixMult) = [3] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [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) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [2] x1 + [1] x2 + [0] p(transAcc#1) = [2] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [0] p(transpose#1) = [1] x2 + [0] p(transpose#2) = [1] x1 + [0] p(transpose#3) = [1] x1 + [1] x2 + [0] p(transpose') = [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [1] x1 + [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] p(makeBase#1#) = [6] p(matrixMult#) = [1] x1 + [6] x2 + [0] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [4] p(matrixMult3#) = [1] x1 + [3] x2 + [7] x3 + [1] p(matrixMultList#) = [1] x1 + [6] x2 + [0] p(matrixMultList#1#) = [6] x1 + [1] x2 + [0] p(matrixMultOld#) = [5] x2 + [0] p(mkBase#) = [3] p(mkBase#1#) = [2] 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#) = [4] x1 + [1] x2 + [4] x3 + [0] p(transAcc#) = [1] x2 + [2] p(transAcc#1#) = [1] x2 + [0] p(transpose#) = [1] x1 + [0] p(transpose#1#) = [1] x2 + [0] p(transpose#2#) = [1] x1 + [0] p(transpose#3#) = [1] x1 + [1] x2 + [0] p(transpose'#) = [1] x1 + [3] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [2] 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] x6 + [4] x7 + [1] x8 + [0] p(c_18) = [1] x3 + [1] x4 + [0] p(c_19) = [1] x1 + [3] p(c_20) = [1] x1 + [0] p(c_21) = [4] p(c_22) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_23) = [1] x1 + [5] p(c_24) = [1] x1 + [0] p(c_25) = [0] p(c_26) = [1] x1 + [1] x2 + [0] p(c_27) = [1] x1 + [1] p(c_28) = [1] x1 + [1] x2 + [0] p(c_29) = [1] p(c_30) = [2] p(c_31) = [1] x1 + [1] p(c_32) = [1] x1 + [1] p(c_33) = [2] p(c_34) = [1] x1 + [4] p(c_35) = [2] x1 + [4] p(c_36) = [0] p(c_37) = [0] p(c_38) = [2] x1 + [4] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [0] p(c_41) = [1] p(c_42) = [1] x1 + [6] p(c_43) = [1] p(c_44) = [0] p(c_45) = [1] x1 + [0] p(c_46) = [1] x1 + [1] p(c_47) = [1] p(c_48) = [4] x1 + [4] p(c_49) = [0] p(c_50) = [2] p(c_51) = [2] x1 + [2] p(c_52) = [1] x1 + [1] p(c_53) = [0] p(c_54) = [1] x1 + [0] p(c_55) = [1] p(c_56) = [2] p(c_57) = [1] x1 + [1] p(c_58) = [2] x1 + [1] p(c_59) = [1] x1 + [2] x2 + [1] p(c_60) = [1] p(c_61) = [0] p(c_62) = [1] p(c_63) = [0] p(c_64) = [4] x1 + [2] p(c_65) = [1] x1 + [0] p(c_66) = [1] p(c_67) = [4] x1 + [0] p(c_68) = [1] x1 + [0] p(c_69) = [1] p(c_70) = [1] x1 + [1] x2 + [2] p(c_71) = [0] p(c_72) = [0] p(c_73) = [1] p(c_74) = [1] p(c_75) = [0] p(c_76) = [1] p(c_77) = [4] p(c_78) = [0] Following rules are strictly oriented: makeBase#1#(::(@l,@m')) = [6] > [3] = c_20(mkBase#(@l)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [4] > [1] @m2 + [0] = c_24(matrixMult'#(@ls,@m2)) transAcc#(@m,@base) = [1] @base + [2] > [1] @base + [0] = c_45(transAcc#1#(@m,@base)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [4] >= [9] = c_19(makeBase#1#(@m)) matrixMult#(@m1,@m2) = [1] @m1 + [6] @m2 + [0] >= [4] @m2 + [6] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [9] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult3#(@m1,@m2,@m3) = [1] @m1 + [3] @m2 + [7] @m3 + [1] >= [3] @m2 + [6] @m3 + [0] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [6] @mm + [0] >= [1] @acc + [6] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [6] @m + [6] @ms + [0] >= [1] @acc + [6] @m + [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [6] @m + [6] @ms + [0] >= [3] @m + [6] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [5] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [3] >= [3] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [2] >= [4] = c_32(mkBase#(@m')) split#(@m) = [0] >= [0] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [0] >= [0] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [0] >= [6] = c_42(split#(@ls)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [0] >= [1] @base + [3] = c_46(transAcc#(@m',@base)) transpose#(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = transpose#(::(@y,@ys)) transpose'#(@m) = [1] @m + [3] >= [1] @m + [2] = transAcc#(@m,makeBase(@m)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [1] @m + [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [3] @m2 + [0] >= [3] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [2] @m + [0] >= [1] @base + [2] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [1] @l + [2] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [0] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @l + [1] @y + [1] @ys + [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 8.b:1.a:4: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: makeBase#(@m) -> c_19(makeBase#1#(@m)) 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)) 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#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - Weak DPs: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)) matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@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)) transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(transAcc#) = {2}, uargs(transpose#2#) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [2] x1 + [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [2] p(m2) = [0] p(m3) = [1] p(m4) = [2] x1 + [1] p(makeBase) = [0] p(makeBase#1) = [0] p(matrixMult) = [2] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [0] p(matrixMult3) = [2] x2 + [0] p(matrixMultList) = [1] x1 + [1] p(matrixMultList#1) = [1] x2 + [1] p(matrixMultOld) = [2] x2 + [0] p(mkBase) = [0] p(mkBase#1) = [0] p(mult) = [0] p(mult#1) = [0] p(mult#2) = [0] p(nil) = [0] p(split) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [2] x1 + [1] x2 + [0] p(transAcc#1) = [2] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [0] p(transpose#1) = [1] x2 + [0] p(transpose#2) = [1] x1 + [0] p(transpose#3) = [1] x1 + [1] x2 + [0] p(transpose') = [1] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [0] p(#add#) = [2] x1 + [1] x2 + [1] p(#mult#) = [0] p(#natmult#) = [2] x1 + [1] p(#pred#) = [0] p(#succ#) = [1] x1 + [1] p(*#) = [2] x1 + [2] p(+#) = [0] p(attach#) = [0] p(attach#1#) = [0] p(attach#2#) = [1] x1 + [2] x2 + [1] x3 + [0] p(lineMult#) = [2] p(lineMult#1#) = [1] x2 + [0] p(m1#) = [0] p(m2#) = [0] p(m3#) = [1] p(m4#) = [2] x1 + [2] p(makeBase#) = [0] p(makeBase#1#) = [1] p(matrixMult#) = [1] x1 + [2] x2 + [0] p(matrixMult'#) = [1] x2 + [1] p(matrixMult'#1#) = [1] x2 + [1] p(matrixMult3#) = [2] x1 + [3] x2 + [2] x3 + [0] p(matrixMultList#) = [1] x1 + [2] x2 + [1] p(matrixMultList#1#) = [2] x1 + [1] x2 + [1] p(matrixMultOld#) = [1] x2 + [1] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [2] x2 + [1] p(mult#1#) = [1] p(mult#2#) = [2] x2 + [2] p(split#) = [0] p(split#1#) = [2] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [1] x2 + [1] p(transAcc#1#) = [1] x2 + [0] p(transpose#) = [1] x1 + [0] p(transpose#1#) = [1] x2 + [0] p(transpose#2#) = [1] x1 + [0] p(transpose#3#) = [1] x1 + [1] x2 + [0] p(transpose'#) = [2] x1 + [1] p(c_1) = [1] p(c_2) = [1] p(c_3) = [0] p(c_4) = [1] p(c_5) = [1] x1 + [1] p(c_6) = [0] p(c_7) = [0] p(c_8) = [2] x1 + [0] p(c_9) = [2] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] p(c_13) = [0] p(c_14) = [0] p(c_15) = [1] x1 + [2] x2 + [1] x4 + [0] p(c_16) = [2] x1 + [1] x3 + [1] p(c_17) = [0] p(c_18) = [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [0] p(c_22) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_23) = [1] x1 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [2] x1 + [0] p(c_28) = [1] x1 + [2] x2 + [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] x1 + [2] 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) = [1] x1 + [0] p(c_40) = [1] x1 + [1] p(c_41) = [0] p(c_42) = [1] x1 + [0] p(c_43) = [0] p(c_44) = [2] p(c_45) = [1] x1 + [1] 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) = [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) = [1] x1 + [2] p(c_68) = [1] p(c_69) = [0] p(c_70) = [2] x1 + [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [2] p(c_74) = [2] p(c_75) = [0] p(c_76) = [1] p(c_77) = [0] p(c_78) = [1] Following rules are strictly oriented: split#1#(::(@l,@ls)) = [2] > [1] = c_40(split#2#(@l,@ls)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [1] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [1] >= [0] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [1] @m1 + [2] @m2 + [0] >= [2] @m2 + [2] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [1] >= [1] @m2 + [1] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [1] >= [1] @m2 + [1] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [2] @m1 + [3] @m2 + [2] @m3 + [0] >= [2] @m2 + [2] @m3 + [0] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [2] @mm + [1] >= [1] @acc + [2] @mm + [1] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [1] >= [1] @acc + [2] @m + [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [1] >= [2] @m + [2] @ms + [1] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m2 + [1] >= [1] @m2 + [1] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [2] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [0] >= [0] = c_32(mkBase#(@m')) split#(@m) = [0] >= [2] = c_39(split#1#(@m)) split#2#(::(@x,@xs),@ls) = [0] >= [0] = c_42(split#(@ls)) transAcc#(@m,@base) = [1] @base + [1] >= [1] @base + [1] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [0] >= [1] @base + [1] = c_46(transAcc#(@m',@base)) transpose#(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = transpose#(::(@y,@ys)) transpose'#(@m) = [2] @m + [1] >= [1] = transAcc#(@m,makeBase(@m)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [2] @m2 + [0] >= [2] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [2] @m + [0] >= [1] @base + [2] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [1] @l + [2] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [0] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @l + [1] @y + [1] @ys + [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 8.b:1.a:5: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: makeBase#(@m) -> c_19(makeBase#1#(@m)) 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)) mkBase#(@m) -> c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')) split#(@m) -> c_39(split#1#(@m)) split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)) transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - Weak DPs: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)) matrixMult'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@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)) split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)) transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(transAcc#) = {2}, uargs(transpose#2#) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [0] p(m2) = [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [1] x1 + [0] p(makeBase#1) = [0] p(matrixMult) = [2] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [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) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [1] x1 + [1] x2 + [0] p(transAcc#1) = [1] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [2] p(transpose#1) = [1] x2 + [2] p(transpose#2) = [1] x1 + [2] p(transpose#3) = [1] x1 + [1] x2 + [2] 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#) = [1] p(matrixMult#) = [1] x1 + [3] x2 + [1] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [1] p(matrixMult3#) = [3] x2 + [3] x3 + [1] p(matrixMultList#) = [1] x1 + [3] x2 + [1] p(matrixMultList#1#) = [3] x1 + [1] x2 + [1] p(matrixMultOld#) = [1] x2 + [3] p(mkBase#) = [0] p(mkBase#1#) = [2] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [2] x1 + [1] x3 + [1] p(split#) = [0] p(split#1#) = [1] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [1] x2 + [0] p(transAcc#1#) = [1] x2 + [0] p(transpose#) = [1] x1 + [0] p(transpose#1#) = [1] x2 + [0] p(transpose#2#) = [1] x1 + [0] p(transpose#3#) = [1] x1 + [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) = [2] x1 + [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] x4 + [1] x6 + [0] p(c_17) = [1] x1 + [2] x2 + [2] x4 + [1] x5 + [2] x6 + [2] x7 + [2] p(c_18) = [1] x4 + [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [0] p(c_22) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_23) = [1] x1 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [1] p(c_26) = [0] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [2] p(c_30) = [1] x2 + [1] p(c_31) = [1] x1 + [2] p(c_32) = [1] x1 + [0] p(c_33) = [0] p(c_34) = [1] x1 + [0] p(c_35) = [2] x1 + [0] p(c_36) = [0] p(c_37) = [2] x1 + [0] p(c_38) = [2] p(c_39) = [1] x1 + [1] p(c_40) = [1] x1 + [1] p(c_41) = [1] p(c_42) = [1] x1 + [1] p(c_43) = [0] p(c_44) = [0] p(c_45) = [1] x1 + [0] p(c_46) = [1] x1 + [2] p(c_47) = [2] p(c_48) = [0] p(c_49) = [2] x1 + [2] x2 + [1] p(c_50) = [1] p(c_51) = [1] x1 + [2] p(c_52) = [2] p(c_53) = [0] p(c_54) = [1] x2 + [0] p(c_55) = [2] p(c_56) = [1] p(c_57) = [0] p(c_58) = [0] p(c_59) = [2] x1 + [2] x2 + [2] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [1] p(c_65) = [0] p(c_66) = [0] p(c_67) = [1] p(c_68) = [2] p(c_69) = [1] p(c_70) = [1] x2 + [0] p(c_71) = [0] p(c_72) = [2] p(c_73) = [2] p(c_74) = [0] p(c_75) = [2] p(c_76) = [0] p(c_77) = [0] p(c_78) = [1] Following rules are strictly oriented: matrixMult#(@m1,@m2) = [1] @m1 + [3] @m2 + [1] > [3] @m2 + [0] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) mkBase#1#(::(@l,@m')) = [2] > [0] = c_32(mkBase#(@m')) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [1] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [1] >= [0] = c_20(mkBase#(@l)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [1] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [1] >= [1] @m2 + [0] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [3] @m2 + [3] @m3 + [1] >= [2] @m2 + [3] @m3 + [1] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [3] @mm + [1] >= [1] @acc + [3] @mm + [1] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [1] >= [1] @acc + [3] @m + [1] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [1] >= [2] @m + [3] @ms + [1] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m2 + [3] >= [1] @m2 + [2] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [4] = c_31(mkBase#1#(@m)) split#(@m) = [0] >= [2] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [1] >= [1] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [0] >= [1] = c_42(split#(@ls)) transAcc#(@m,@base) = [1] @base + [0] >= [1] @base + [0] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [0] >= [1] @base + [2] = c_46(transAcc#(@m',@base)) transpose#(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @m' + [0] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @y + [1] @ys + [0] >= [1] @y + [1] @ys + [0] = transpose#(::(@y,@ys)) transpose'#(@m) = [1] @m + [1] >= [1] @m + [0] = transAcc#(@m,makeBase(@m)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [1] @m + [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [2] @m2 + [0] >= [2] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [1] @m + [0] >= [1] @base + [1] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [1] @l + [1] @m' + [0] >= [1] @base + [1] @l + [1] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [2] >= [1] @m + [2] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [2] >= [1] @m + [2] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [2] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [2] >= [1] @l + [1] @m' + [2] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [2] >= [1] @l + [1] @y + [1] @ys + [2] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [2] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 8.b:1.a:6: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: makeBase#(@m) -> c_19(makeBase#1#(@m)) matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)) mkBase#(@m) -> c_31(mkBase#1#(@m)) split#(@m) -> c_39(split#1#(@m)) split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)) transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - Weak DPs: 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'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@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)) mkBase#1#(::(@l,@m')) -> c_32(mkBase#(@m')) split#1#(::(@l,@ls)) -> c_40(split#2#(@l,@ls)) transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(transAcc#) = {2}, uargs(transpose#2#) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [0] p(m2) = [2] x1 + [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [0] p(makeBase#1) = [0] p(matrixMult) = [1] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [0] p(matrixMult3) = [1] x1 + [0] p(matrixMultList) = [1] x1 + [0] p(matrixMultList#1) = [1] x1 + [2] x2 + [1] p(matrixMultOld) = [2] x1 + [2] x2 + [0] p(mkBase) = [0] p(mkBase#1) = [0] p(mult) = [0] p(mult#1) = [0] p(mult#2) = [0] p(nil) = [0] p(split) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [1] x1 + [1] x2 + [0] p(transAcc#1) = [1] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [1] p(transpose#1) = [1] x2 + [1] p(transpose#2) = [1] x1 + [1] p(transpose#3) = [1] x1 + [1] x2 + [1] p(transpose') = [2] x1 + [2] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [1] p(#add#) = [2] x1 + [1] p(#mult#) = [0] p(#natmult#) = [2] x1 + [2] p(#pred#) = [1] x1 + [0] p(#succ#) = [1] p(*#) = [0] p(+#) = [2] p(attach#) = [1] x1 + [0] p(attach#1#) = [2] p(attach#2#) = [1] x1 + [2] x2 + [1] p(lineMult#) = [1] x1 + [0] p(lineMult#1#) = [0] p(m1#) = [2] p(m2#) = [2] x1 + [2] p(m3#) = [2] x1 + [0] p(m4#) = [1] x1 + [0] p(makeBase#) = [0] p(makeBase#1#) = [2] p(matrixMult#) = [1] x1 + [1] x2 + [3] p(matrixMult'#) = [1] x1 + [1] x2 + [2] p(matrixMult'#1#) = [1] x1 + [1] x2 + [2] p(matrixMult3#) = [2] x2 + [1] x3 + [3] p(matrixMultList#) = [1] x1 + [1] x2 + [3] p(matrixMultList#1#) = [1] x1 + [1] x2 + [3] p(matrixMultOld#) = [1] x1 + [1] x2 + [3] p(mkBase#) = [2] p(mkBase#1#) = [2] p(mult#) = [0] p(mult#1#) = [2] x2 + [0] p(mult#2#) = [2] x3 + [0] p(split#) = [1] x1 + [2] p(split#1#) = [1] x1 + [1] p(split#2#) = [1] x1 + [1] x2 + [1] p(split#3#) = [2] x2 + [0] p(transAcc#) = [1] x2 + [0] p(transAcc#1#) = [1] x2 + [0] p(transpose#) = [1] x1 + [2] p(transpose#1#) = [1] x2 + [2] p(transpose#2#) = [1] x1 + [2] p(transpose#3#) = [1] x1 + [1] x2 + [2] p(transpose'#) = [0] p(c_1) = [1] p(c_2) = [0] p(c_3) = [0] p(c_4) = [2] p(c_5) = [0] p(c_6) = [0] p(c_7) = [1] x1 + [0] p(c_8) = [2] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [2] x1 + [0] p(c_13) = [1] x1 + [1] x2 + [0] p(c_14) = [0] p(c_15) = [1] x2 + [1] x3 + [2] x4 + [1] x5 + [2] x6 + [1] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [1] x1 + [2] p(c_20) = [1] x1 + [0] p(c_21) = [0] p(c_22) = [1] x1 + [1] x2 + [1] x3 + [1] p(c_23) = [1] x1 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] x1 + [2] 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) = [1] x1 + [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) = [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) = [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: split#(@m) = [1] @m + [2] > [1] @m + [1] = c_39(split#1#(@m)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [4] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [2] >= [2] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [1] @m1 + [1] @m2 + [3] >= [1] @m1 + [1] @m2 + [3] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m1 + [1] @m2 + [2] >= [1] @m1 + [1] @m2 + [2] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @l + [1] @ls + [1] @m2 + [2] >= [1] @ls + [1] @m2 + [2] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [2] @m2 + [1] @m3 + [3] >= [1] @m2 + [1] @m3 + [3] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [1] @mm + [3] >= [1] @acc + [1] @mm + [3] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [1] @m + [1] @ms + [3] >= [1] @acc + [1] @m + [3] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [1] @m + [1] @ms + [3] >= [1] @m + [1] @ms + [3] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m1 + [1] @m2 + [3] >= [1] @m1 + [1] @m2 + [3] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [2] >= [4] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [2] >= [2] = c_32(mkBase#(@m')) split#1#(::(@l,@ls)) = [1] @l + [1] @ls + [1] >= [1] @l + [1] @ls + [1] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [1] >= [1] @ls + [2] = c_42(split#(@ls)) transAcc#(@m,@base) = [1] @base + [0] >= [1] @base + [0] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [0] >= [1] @base + [0] = c_46(transAcc#(@m',@base)) transpose#(@m) = [1] @m + [2] >= [1] @m + [2] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [2] >= [1] @m + [2] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [2] >= [1] @m + [2] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [1] @l + [1] @m' + [2] >= [1] @l + [1] @m' + [2] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [2] >= [1] @y + [1] @ys + [2] = transpose#(::(@y,@ys)) transpose'#(@m) = [0] >= [0] = transAcc#(@m,makeBase(@m)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [1] @m + [0] >= [1] @base + [1] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [1] @l + [1] @m' + [0] >= [1] @base + [1] @l + [1] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [1] >= [1] @m + [1] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [1] >= [1] @m + [1] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [1] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [1] >= [1] @l + [1] @m' + [1] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [1] >= [1] @l + [1] @y + [1] @ys + [1] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [1] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 8.b:1.a:7: WeightGap WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: makeBase#(@m) -> c_19(makeBase#1#(@m)) matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)) mkBase#(@m) -> c_31(mkBase#1#(@m)) split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)) transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - Weak DPs: 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'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@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)) 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)) transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(transAcc#) = {2}, uargs(transpose#2#) = {1}, uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [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) = [3] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [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) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [3] x1 + [1] x2 + [0] p(transAcc#1) = [3] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [0] p(transpose#1) = [1] x2 + [0] p(transpose#2) = [1] x1 + [0] p(transpose#3) = [1] x1 + [1] x2 + [0] p(transpose') = [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [2] x2 + [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [2] x1 + [1] x2 + [0] p(+#) = [0] p(attach#) = [1] x1 + [0] p(attach#1#) = [0] p(attach#2#) = [2] x1 + [2] x3 + [0] p(lineMult#) = [1] x2 + [1] p(lineMult#1#) = [1] x1 + [0] p(m1#) = [2] x1 + [0] p(m2#) = [2] x1 + [0] p(m3#) = [1] x1 + [1] p(m4#) = [0] p(makeBase#) = [1] p(makeBase#1#) = [0] p(matrixMult#) = [1] x1 + [3] x2 + [1] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [2] p(matrixMult3#) = [3] x2 + [3] x3 + [1] p(matrixMultList#) = [1] x1 + [3] x2 + [1] p(matrixMultList#1#) = [3] x1 + [1] x2 + [1] p(matrixMultOld#) = [2] x2 + [1] p(mkBase#) = [0] p(mkBase#1#) = [3] p(mult#) = [2] x2 + [2] p(mult#1#) = [2] x1 + [0] p(mult#2#) = [1] x1 + [0] p(split#) = [1] x1 + [2] p(split#1#) = [1] x1 + [2] p(split#2#) = [1] x2 + [1] p(split#3#) = [0] p(transAcc#) = [1] x2 + [0] p(transAcc#1#) = [1] x2 + [0] p(transpose#) = [1] x1 + [3] p(transpose#1#) = [1] x2 + [3] p(transpose#2#) = [1] x1 + [3] p(transpose#3#) = [1] x1 + [1] x2 + [3] p(transpose'#) = [0] p(c_1) = [0] p(c_2) = [1] p(c_3) = [0] p(c_4) = [2] p(c_5) = [1] p(c_6) = [2] x1 + [1] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [1] p(c_11) = [2] p(c_12) = [0] p(c_13) = [2] x1 + [2] p(c_14) = [0] p(c_15) = [2] x3 + [1] x5 + [1] x6 + [0] p(c_16) = [1] x1 + [1] x2 + [1] x4 + [1] x6 + [2] p(c_17) = [2] x5 + [2] x8 + [2] p(c_18) = [2] x2 + [1] x3 + [1] x4 + [1] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [2] p(c_22) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_23) = [1] x1 + [1] p(c_24) = [1] x1 + [0] p(c_25) = [2] p(c_26) = [2] x1 + [1] x2 + [2] p(c_27) = [2] p(c_28) = [1] p(c_29) = [1] p(c_30) = [1] x1 + [2] x2 + [1] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [0] p(c_33) = [0] p(c_34) = [2] x1 + [0] p(c_35) = [1] x1 + [0] p(c_36) = [2] p(c_37) = [1] x1 + [1] p(c_38) = [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [1] p(c_41) = [2] p(c_42) = [1] x1 + [0] p(c_43) = [0] p(c_44) = [2] p(c_45) = [1] x1 + [0] p(c_46) = [1] x1 + [0] p(c_47) = [2] p(c_48) = [2] p(c_49) = [2] x1 + [2] p(c_50) = [0] p(c_51) = [1] x1 + [2] p(c_52) = [0] p(c_53) = [0] p(c_54) = [2] x1 + [2] x2 + [2] p(c_55) = [1] p(c_56) = [2] p(c_57) = [0] p(c_58) = [2] x1 + [1] p(c_59) = [2] p(c_60) = [2] p(c_61) = [1] p(c_62) = [2] p(c_63) = [0] p(c_64) = [1] p(c_65) = [1] x1 + [0] p(c_66) = [0] p(c_67) = [2] p(c_68) = [2] x1 + [1] p(c_69) = [2] p(c_70) = [2] p(c_71) = [0] p(c_72) = [1] p(c_73) = [2] p(c_74) = [0] p(c_75) = [0] p(c_76) = [1] p(c_77) = [0] p(c_78) = [1] Following rules are strictly oriented: makeBase#(@m) = [1] > [0] = c_19(makeBase#1#(@m)) Following rules are (at-least) weakly oriented: makeBase#1#(::(@l,@m')) = [0] >= [0] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [1] @m1 + [3] @m2 + [1] >= [3] @m2 + [1] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [3] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [2] >= [1] @m2 + [0] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [3] @m2 + [3] @m3 + [1] >= [3] @m2 + [3] @m3 + [1] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [3] @mm + [1] >= [1] @acc + [3] @mm + [1] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [1] >= [1] @acc + [3] @m + [1] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [1] >= [3] @m + [3] @ms + [1] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [2] @m2 + [1] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [3] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [3] >= [0] = c_32(mkBase#(@m')) split#(@m) = [1] @m + [2] >= [1] @m + [2] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [1] @l + [1] @ls + [2] >= [1] @ls + [2] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [1] @ls + [1] >= [1] @ls + [2] = c_42(split#(@ls)) transAcc#(@m,@base) = [1] @base + [0] >= [1] @base + [0] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [0] >= [1] @base + [0] = c_46(transAcc#(@m',@base)) transpose#(@m) = [1] @m + [3] >= [1] @m + [3] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [3] >= [1] @m + [2] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [3] >= [1] @m + [3] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [1] @l + [1] @m' + [3] >= [1] @l + [1] @m' + [3] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [3] >= [1] @y + [1] @ys + [3] = transpose#(::(@y,@ys)) transpose'#(@m) = [0] >= [0] = transAcc#(@m,makeBase(@m)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [3] @m2 + [0] >= [3] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [3] @m + [0] >= [1] @base + [3] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [3] @l + [3] @m' + [0] >= [1] @base + [1] @l + [3] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [0] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @l + [1] @y + [1] @ys + [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 8.b:1.a:8: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)) mkBase#(@m) -> c_31(mkBase#1#(@m)) split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)) transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - 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'#1#(::(@l,@ls),@m2) -> c_24(matrixMult'#(@ls,@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)) 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)) transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {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) = [3] p(#add) = [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [0] p(#pred) = [0] p(#s) = [3] p(#succ) = [1] p(*) = [0] p(+) = [0] p(::) = [1] x2 + [2] 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 + [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) = [2] 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] p(transAcc) = [4] x2 + [0] p(transAcc#1) = [0] p(transpose) = [0] p(transpose#1) = [1] x1 + [0] p(transpose#2) = [0] p(transpose#3) = [1] x1 + [0] p(transpose') = [0] p(tuple#2) = [2] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [1] x2 + [0] p(attach#) = [0] p(attach#1#) = [1] p(attach#2#) = [4] p(lineMult#) = [0] p(lineMult#1#) = [1] x1 + [1] x2 + [0] p(m1#) = [1] p(m2#) = [1] p(m3#) = [0] p(m4#) = [1] x1 + [0] p(makeBase#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [2] x1 + [6] p(matrixMult'#) = [2] x1 + [1] p(matrixMult'#1#) = [2] x1 + [0] p(matrixMult3#) = [2] x1 + [6] p(matrixMultList#) = [2] x1 + [6] p(matrixMultList#1#) = [2] x2 + [6] p(matrixMultOld#) = [2] x1 + [1] x2 + [4] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [4] x1 + [2] x2 + [0] p(mult#1#) = [4] x1 + [4] p(mult#2#) = [1] x1 + [1] x2 + [1] x3 + [4] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [1] x1 + [1] x3 + [0] p(transAcc#) = [4] p(transAcc#1#) = [4] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [0] p(transpose'#) = [4] p(c_1) = [0] p(c_2) = [0] p(c_3) = [4] p(c_4) = [2] p(c_5) = [1] x1 + [4] p(c_6) = [4] x1 + [1] p(c_7) = [1] p(c_8) = [2] x1 + [1] p(c_9) = [0] p(c_10) = [1] x1 + [4] p(c_11) = [4] p(c_12) = [4] x1 + [4] p(c_13) = [4] x1 + [0] p(c_14) = [1] p(c_15) = [1] x1 + [2] x4 + [4] x5 + [2] x6 + [0] p(c_16) = [1] x2 + [1] x3 + [1] x4 + [1] x5 + [2] p(c_17) = [2] x1 + [1] x3 + [1] x5 + [1] x8 + [1] p(c_18) = [1] x2 + [1] x3 + [2] p(c_19) = [2] x1 + [0] p(c_20) = [4] x1 + [0] p(c_21) = [2] p(c_22) = [1] x1 + [1] x2 + [4] x3 + [1] p(c_23) = [1] x1 + [0] p(c_24) = [1] x1 + [2] p(c_25) = [1] p(c_26) = [1] x1 + [4] p(c_27) = [1] x1 + [4] p(c_28) = [1] x1 + [1] p(c_29) = [2] p(c_30) = [0] p(c_31) = [4] x1 + [0] p(c_32) = [2] x1 + [0] p(c_33) = [0] p(c_34) = [2] x1 + [1] p(c_35) = [4] p(c_36) = [0] p(c_37) = [4] x1 + [2] p(c_38) = [1] x1 + [0] p(c_39) = [2] x1 + [0] p(c_40) = [4] x1 + [0] p(c_41) = [0] p(c_42) = [2] x1 + [0] p(c_43) = [1] p(c_44) = [4] p(c_45) = [1] x1 + [0] p(c_46) = [1] x1 + [0] p(c_47) = [1] p(c_48) = [1] x1 + [1] p(c_49) = [4] p(c_50) = [1] p(c_51) = [4] p(c_52) = [0] p(c_53) = [1] p(c_54) = [2] x1 + [0] p(c_55) = [4] p(c_56) = [0] p(c_57) = [1] p(c_58) = [0] p(c_59) = [1] x1 + [0] p(c_60) = [1] p(c_61) = [4] p(c_62) = [2] p(c_63) = [1] p(c_64) = [1] p(c_65) = [1] x1 + [0] p(c_66) = [0] p(c_67) = [4] x1 + [2] p(c_68) = [1] x1 + [1] p(c_69) = [0] p(c_70) = [1] x2 + [0] p(c_71) = [1] p(c_72) = [1] p(c_73) = [0] p(c_74) = [2] p(c_75) = [4] p(c_76) = [0] p(c_77) = [0] p(c_78) = [2] Following rules are strictly oriented: matrixMult'#(@m1,@m2) = [2] @m1 + [1] > [2] @m1 + [0] = c_23(matrixMult'#1#(@m1,@m2)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [0] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [0] >= [0] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [2] @m1 + [6] >= [2] @m1 + [6] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [2] @ls + [4] >= [2] @ls + [3] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [2] @m1 + [6] >= [2] @m1 + [6] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [2] @acc + [6] >= [2] @acc + [6] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [2] @acc + [6] >= [2] @acc + [6] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [2] @acc + [6] >= [2] @acc + [6] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [2] @m1 + [1] @m2 + [4] >= [2] @m1 + [1] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [0] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [0] >= [0] = c_32(mkBase#(@m')) split#(@m) = [0] >= [0] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [0] >= [0] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [0] >= [0] = c_42(split#(@ls)) transAcc#(@m,@base) = [4] >= [4] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [4] >= [4] = c_46(transAcc#(@m',@base)) transpose#(@m) = [0] >= [0] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [0] >= [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [0] >= [0] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [0] >= [0] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [0] >= [0] = transpose#(::(@y,@ys)) transpose'#(@m) = [4] >= [4] = transAcc#(@m,makeBase(@m)) 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:1.a:9: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: mkBase#(@m) -> c_31(mkBase#1#(@m)) split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)) transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - 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(matrixMult'#(@ls,@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)) 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)) transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {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) = [0] p(#mult) = [2] x2 + [0] p(#natmult) = [3] x1 + [5] p(#neg) = [0] p(#pos) = [1] x1 + [7] p(#pred) = [0] p(#s) = [1] p(#succ) = [0] p(*) = [2] p(+) = [1] x1 + [3] 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) = [1] p(mult#1) = [0] p(mult#2) = [0] p(nil) = [7] p(split) = [0] p(split#1) = [0] p(split#2) = [3] p(split#3) = [1] x2 + [0] p(transAcc) = [0] p(transAcc#1) = [0] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [1] x1 + [5] p(transpose') = [0] p(tuple#2) = [4] 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#) = [5] x1 + [2] p(makeBase#1#) = [5] x1 + [2] p(matrixMult#) = [5] x2 + [2] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [5] x3 + [2] p(matrixMultList#) = [5] x2 + [1] p(matrixMultList#1#) = [5] x1 + [1] p(matrixMultOld#) = [1] x1 + [0] p(mkBase#) = [2] x1 + [2] p(mkBase#1#) = [2] x1 + [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#) = [1] p(transpose#1#) = [1] p(transpose#2#) = [1] p(transpose#3#) = [1] p(transpose'#) = [4] 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) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [1] x7 + [1] x8 + [0] p(c_18) = [1] x3 + [4] x4 + [1] p(c_19) = [1] x1 + [0] p(c_20) = [2] x1 + [0] p(c_21) = [2] p(c_22) = [2] x1 + [1] x2 + [1] x3 + [0] p(c_23) = [2] x1 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] 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) = [0] p(c_39) = [4] x1 + [0] p(c_40) = [2] x1 + [0] p(c_41) = [1] p(c_42) = [4] x1 + [0] p(c_43) = [0] p(c_44) = [2] p(c_45) = [2] x1 + [0] p(c_46) = [4] x1 + [0] p(c_47) = [0] p(c_48) = [2] x1 + [0] p(c_49) = [1] x1 + [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) = [1] x1 + [0] p(c_57) = [1] x1 + [4] x2 + [0] p(c_58) = [1] 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) = [0] p(c_65) = [0] p(c_66) = [2] p(c_67) = [1] x1 + [0] p(c_68) = [1] p(c_69) = [1] 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: mkBase#(@m) = [2] @m + [2] > [2] @m + [0] = c_31(mkBase#1#(@m)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [5] @m + [2] >= [5] @m + [2] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [5] @l + [5] @m' + [7] >= [4] @l + [4] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [5] @m2 + [2] >= [5] @m2 + [2] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [0] >= [0] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [0] >= [0] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [5] @m3 + [2] >= [5] @m3 + [2] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [5] @mm + [1] >= [5] @mm + [1] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [5] @m + [5] @ms + [6] >= [5] @m + [2] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [5] @m + [5] @ms + [6] >= [5] @ms + [1] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m1 + [0] >= [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#1#(::(@l,@m')) = [2] @l + [2] @m' + [2] >= [2] @m' + [2] = c_32(mkBase#(@m')) split#(@m) = [0] >= [0] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [0] >= [0] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [0] >= [0] = c_42(split#(@ls)) 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) = [1] >= [1] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] >= [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] >= [1] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [1] >= [1] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] >= [1] = transpose#(::(@y,@ys)) transpose'#(@m) = [4] >= [0] = transAcc#(@m,makeBase(@m)) *** Step 8.b:1.a:10: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: split#2#(::(@x,@xs),@ls) -> c_42(split#(@ls)) transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - 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(matrixMult'#(@ls,@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)) 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)) transAcc#(@m,@base) -> c_45(transAcc#1#(@m,@base)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {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] p(#abs) = [0] p(#add) = [0] p(#mult) = [4] x1 + [3] x2 + [4] p(#natmult) = [0] p(#neg) = [1] p(#pos) = [0] p(#pred) = [0] p(#s) = [0] p(#succ) = [0] p(*) = [0] p(+) = [4] x2 + [0] p(::) = [1] x2 + [2] p(attach) = [4] x2 + [0] p(attach#1) = [3] x1 + [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) = [1] p(matrixMult) = [0] p(matrixMult') = [0] p(matrixMult'#1) = [0] p(matrixMult3) = [0] p(matrixMultList) = [1] x1 + [0] p(matrixMultList#1) = [0] p(matrixMultOld) = [0] p(mkBase) = [0] p(mkBase#1) = [0] p(mult) = [2] x1 + [0] p(mult#1) = [4] p(mult#2) = [4] p(nil) = [0] p(split) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x2 + [2] p(split#3) = [1] x1 + [2] p(transAcc) = [2] p(transAcc#1) = [1] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [7] 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(+#) = [1] x1 + [0] p(attach#) = [0] p(attach#1#) = [0] p(attach#2#) = [1] x3 + [0] p(lineMult#) = [1] x1 + [0] p(lineMult#1#) = [0] p(m1#) = [0] p(m2#) = [1] x1 + [1] p(m3#) = [4] x1 + [0] p(m4#) = [1] p(makeBase#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [3] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [4] x1 + [1] x2 + [4] x3 + [5] p(matrixMultList#) = [2] x2 + [0] p(matrixMultList#1#) = [2] x1 + [0] p(matrixMultOld#) = [4] x1 + [1] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [4] x2 + [0] p(split#) = [1] x1 + [0] p(split#1#) = [1] x1 + [0] p(split#2#) = [1] x2 + [1] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [0] p(transpose#) = [1] x1 + [0] p(transpose#1#) = [1] x2 + [0] p(transpose#2#) = [1] x1 + [0] p(transpose#3#) = [1] x1 + [0] p(transpose'#) = [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) = [2] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [1] x2 + [0] p(c_14) = [0] p(c_15) = [2] x1 + [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [2] x4 + [0] p(c_19) = [1] x1 + [0] p(c_20) = [4] x1 + [0] p(c_21) = [0] p(c_22) = [4] x1 + [4] x2 + [4] x3 + [2] p(c_23) = [2] x1 + [0] p(c_24) = [4] x1 + [0] p(c_25) = [1] p(c_26) = [4] x2 + [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [4] 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) = [1] x1 + [0] p(c_40) = [1] x1 + [1] 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) = [4] x1 + [0] p(c_47) = [0] p(c_48) = [4] x1 + [0] p(c_49) = [1] x1 + [2] x2 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [1] x2 + [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) = [1] x1 + [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [4] x1 + [0] p(c_68) = [2] x1 + [0] p(c_69) = [0] p(c_70) = [1] x1 + [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: split#2#(::(@x,@xs),@ls) = [1] @ls + [1] > [1] @ls + [0] = c_42(split#(@ls)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [0] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [0] >= [0] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [3] >= [2] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [0] >= [0] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [0] >= [0] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [4] @m1 + [1] @m2 + [4] @m3 + [5] >= [3] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [2] @mm + [0] >= [2] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [2] @ms + [4] >= [3] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [2] @ms + [4] >= [2] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [4] @m1 + [1] >= [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [0] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [0] >= [0] = c_32(mkBase#(@m')) split#(@m) = [1] @m + [0] >= [1] @m + [0] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [1] @ls + [2] >= [1] @ls + [2] = c_40(split#2#(@l,@ls)) 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) = [1] @m + [0] >= [1] @m + [0] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [1] @m' + [0] >= [1] @m' + [0] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @ys + [2] >= [1] @ys + [2] = transpose#(::(@y,@ys)) transpose'#(@m) = [5] >= [0] = transAcc#(@m,makeBase(@m)) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @ls + [2] >= [1] @ls + [2] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [2] >= [1] @ls + [2] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [2] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [2] >= [1] @m' + [2] = tuple#2(::(@x,@ys),::(@xs,@m')) *** Step 8.b:1.a:11: NaturalPI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: transAcc#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - 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(matrixMult'#(@ls,@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)) 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)) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: NaturalPI {shape = Linear, restrict = Restrict, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a polynomial interpretation of kind constructor-based(linear): The following argument positions are considered usable: uargs(c_19) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1,2,3}, uargs(c_23) = {1}, uargs(c_24) = {1}, uargs(c_31) = {1}, uargs(c_32) = {1}, uargs(c_39) = {1}, uargs(c_40) = {1}, uargs(c_42) = {1}, uargs(c_45) = {1}, uargs(c_46) = {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) = 4 p(#add) = 4*x1 p(#mult) = 1 + 5*x2 p(#natmult) = 3 p(#neg) = 2 p(#pos) = 0 p(#pred) = 3 p(#s) = 0 p(#succ) = x1 p(*) = 3 p(+) = 2 + 3*x1 + 3*x2 p(::) = 4 + x1 + x2 p(attach) = 0 p(attach#1) = 0 p(attach#2) = 5 + 4*x3 p(lineMult) = 1 p(lineMult#1) = 2*x1 + 6*x2 p(m1) = 0 p(m2) = 0 p(m3) = 0 p(m4) = 4*x1 p(makeBase) = 1 p(makeBase#1) = 4 + x1 p(matrixMult) = 4 + x1 + 4*x2 p(matrixMult') = 0 p(matrixMult'#1) = 0 p(matrixMult3) = 0 p(matrixMultList) = 0 p(matrixMultList#1) = x1 p(matrixMultOld) = 0 p(mkBase) = 6*x1 p(mkBase#1) = 1 p(mult) = 3*x2 p(mult#1) = 4 p(mult#2) = 2 + 2*x1 + 4*x3 p(nil) = 0 p(split) = 5 p(split#1) = 0 p(split#2) = 3 + 2*x1 + 3*x2 p(split#3) = 7 + x1 + 4*x2 + 7*x3 p(transAcc) = 4 p(transAcc#1) = 0 p(transpose) = 4 p(transpose#1) = 0 p(transpose#2) = 0 p(transpose#3) = 7 + x1 + 4*x2 p(transpose') = 0 p(tuple#2) = 3 + x1 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#) = x1 p(lineMult#1#) = 0 p(m1#) = 2*x1 p(m2#) = 1 p(m3#) = 4*x1 p(m4#) = 2 + x1 p(makeBase#) = 4 p(makeBase#1#) = 0 p(matrixMult#) = 6 + 2*x2 p(matrixMult'#) = 0 p(matrixMult'#1#) = 0 p(matrixMult3#) = 6 + 5*x1 + x2 + 4*x3 p(matrixMultList#) = 6 + 2*x2 p(matrixMultList#1#) = 1 + 2*x1 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#) = 2*x1 p(transAcc#1#) = 2*x1 p(transpose#) = 0 p(transpose#1#) = 0 p(transpose#2#) = 0 p(transpose#3#) = 0 p(transpose'#) = 7 + 4*x1 p(c_1) = 0 p(c_2) = 0 p(c_3) = 0 p(c_4) = 0 p(c_5) = x1 p(c_6) = x1 p(c_7) = 2 p(c_8) = 2 p(c_9) = 0 p(c_10) = 0 p(c_11) = 1 p(c_12) = 1 p(c_13) = 4 p(c_14) = 0 p(c_15) = 0 p(c_16) = 2 + x2 + x4 p(c_17) = 1 + x8 p(c_18) = 4 + x1 p(c_19) = 4 + x1 p(c_20) = x1 p(c_21) = 0 p(c_22) = 1 + x1 + x2 + x3 p(c_23) = x1 p(c_24) = x1 p(c_25) = 0 p(c_26) = x1 + x2 p(c_27) = x1 p(c_28) = x1 + x2 p(c_29) = 0 p(c_30) = x1 + x2 p(c_31) = x1 p(c_32) = x1 p(c_33) = 0 p(c_34) = x1 p(c_35) = x1 p(c_36) = x1 p(c_37) = x1 p(c_38) = x1 p(c_39) = x1 p(c_40) = x1 p(c_41) = 0 p(c_42) = x1 p(c_43) = 2 p(c_44) = 0 p(c_45) = x1 p(c_46) = 1 + x1 p(c_47) = 0 p(c_48) = x1 p(c_49) = x1 + x2 p(c_50) = 0 p(c_51) = x1 p(c_52) = x1 p(c_53) = 0 p(c_54) = x1 + x2 p(c_55) = 0 p(c_56) = 2 p(c_57) = x1 p(c_58) = 4 p(c_59) = 2 p(c_60) = 2 p(c_61) = 2 p(c_62) = 2 p(c_63) = 0 p(c_64) = 1 + x1 p(c_65) = 1 p(c_66) = 1 p(c_67) = 0 p(c_68) = 1 p(c_69) = 0 p(c_70) = 0 p(c_71) = 0 p(c_72) = 0 p(c_73) = 4 p(c_74) = 1 p(c_75) = 4 p(c_76) = 1 p(c_77) = 0 p(c_78) = 2 Following rules are strictly oriented: transAcc#1#(::(@l,@m'),@base) = 8 + 2*@l + 2*@m' > 1 + 2*@m' = c_46(transAcc#(@m',@base)) Following rules are (at-least) weakly oriented: makeBase#(@m) = 4 >= 4 = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = 0 >= 0 = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = 6 + 2*@m2 >= 5 + 2*@m2 = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = 0 >= 0 = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = 0 >= 0 = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = 6 + 5*@m1 + @m2 + 4*@m3 >= 6 + 2*@m3 = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = 6 + 2*@mm >= 1 + 2*@mm = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = 9 + 2*@m + 2*@ms >= 6 + 2*@m = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = 9 + 2*@m + 2*@ms >= 6 + 2*@ms = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = 0 >= 0 = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = 0 >= 0 = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = 0 >= 0 = c_32(mkBase#(@m')) split#(@m) = 0 >= 0 = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = 0 >= 0 = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = 0 >= 0 = c_42(split#(@ls)) transAcc#(@m,@base) = 2*@m >= 2*@m = c_45(transAcc#1#(@m,@base)) transpose#(@m) = 0 >= 0 = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = 0 >= 0 = split#(@m) transpose#1#(::(@xs,@xss),@m) = 0 >= 0 = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = 0 >= 0 = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = 0 >= 0 = transpose#(::(@y,@ys)) transpose'#(@m) = 7 + 4*@m >= 2*@m = transAcc#(@m,makeBase(@m)) *** Step 8.b:1.a:12: EmptyProcessor WORST_CASE(?,O(1)) + Considered Problem: - 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(matrixMult'#(@ls,@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)) 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) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> 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/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: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). *** Step 8.b:1.b:1: DecomposeDG WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: 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)) 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) -> makeBase#1#(@m) makeBase#1#(::(@l,@m')) -> mkBase#(@l) matrixMult#(@m1,@m2) -> makeBase#(@m2) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) mkBase#(@m) -> mkBase#1#(@m) mkBase#1#(::(@l,@m')) -> mkBase#(@m') split#(@m) -> split#1#(@m) split#1#(::(@l,@ls)) -> split#2#(@l,@ls) split#2#(::(@x,@xs),@ls) -> split#(@ls) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> 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/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: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component 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) -> makeBase#1#(@m) makeBase#1#(::(@l,@m')) -> mkBase#(@l) matrixMult#(@m1,@m2) -> makeBase#(@m2) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) mkBase#(@m) -> mkBase#1#(@m) mkBase#1#(::(@l,@m')) -> mkBase#(@m') split#(@m) -> split#1#(@m) split#1#(::(@l,@ls)) -> split#2#(@l,@ls) split#2#(::(@x,@xs),@ls) -> split#(@ls) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> transAcc#(@m,makeBase(@m)) 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. attach#(@line,@m) -> attach#1#(@line,@m) attach#1#(::(@x,@xs),@m) -> attach#2#(@m,@x,@xs) attach#2#(::(@l,@ls),@x,@xs) -> attach#(@xs,@ls) lineMult#(@l,@m2) -> lineMult#1#(@m2,@l) lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs) lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x) makeBase#(@m) -> makeBase#1#(@m) makeBase#1#(::(@l,@m')) -> mkBase#(@l) matrixMult#(@m1,@m2) -> makeBase#(@m2) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) mkBase#(@m) -> mkBase#1#(@m) mkBase#1#(::(@l,@m')) -> mkBase#(@m') split#(@m) -> split#1#(@m) split#1#(::(@l,@ls)) -> split#2#(@l,@ls) split#2#(::(@x,@xs),@ls) -> split#(@ls) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> transAcc#(@m,makeBase(@m)) **** Step 8.b:1.b:1.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)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)) - Weak DPs: makeBase#(@m) -> makeBase#1#(@m) makeBase#1#(::(@l,@m')) -> mkBase#(@l) matrixMult#(@m1,@m2) -> makeBase#(@m2) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) mkBase#(@m) -> mkBase#1#(@m) mkBase#1#(::(@l,@m')) -> mkBase#(@m') split#(@m) -> split#1#(@m) split#1#(::(@l,@ls)) -> split#2#(@l,@ls) split#2#(::(@x,@xs),@ls) -> split#(@ls) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> 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/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: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)) -->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4 6:W:makeBase#(@m) -> makeBase#1#(@m) -->_1 makeBase#1#(::(@l,@m')) -> mkBase#(@l):7 7:W:makeBase#1#(::(@l,@m')) -> mkBase#(@l) -->_1 mkBase#(@m) -> mkBase#1#(@m):21 8:W:matrixMult#(@m1,@m2) -> makeBase#(@m2) -->_1 makeBase#(@m) -> makeBase#1#(@m):6 9:W:matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):11 10:W:matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):26 11:W:matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2) -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2):13 -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2):12 12:W:matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2) -->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4 13:W:matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):11 14:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):10 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):9 -->_1 matrixMult#(@m1,@m2) -> makeBase#(@m2):8 15:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):10 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):9 -->_1 matrixMult#(@m1,@m2) -> makeBase#(@m2):8 16:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):18 -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):17 17:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):10 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):9 -->_1 matrixMult#(@m1,@m2) -> makeBase#(@m2):8 18:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) -->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):16 19:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):11 20:W:matrixMultOld#(@m1,@m2) -> transpose#(@m2) -->_1 transpose#(@m) -> transpose#1#(@m,@m):29 21:W:mkBase#(@m) -> mkBase#1#(@m) -->_1 mkBase#1#(::(@l,@m')) -> mkBase#(@m'):22 22:W:mkBase#1#(::(@l,@m')) -> mkBase#(@m') -->_1 mkBase#(@m) -> mkBase#1#(@m):21 23:W:split#(@m) -> split#1#(@m) -->_1 split#1#(::(@l,@ls)) -> split#2#(@l,@ls):24 24:W:split#1#(::(@l,@ls)) -> split#2#(@l,@ls) -->_1 split#2#(::(@x,@xs),@ls) -> split#(@ls):25 25:W:split#2#(::(@x,@xs),@ls) -> split#(@ls) -->_1 split#(@m) -> split#1#(@m):23 26:W:transAcc#(@m,@base) -> transAcc#1#(@m,@base) -->_1 transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base):28 -->_1 transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)):27 27:W:transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) -->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1 28:W:transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):26 29:W:transpose#(@m) -> transpose#1#(@m,@m) -->_1 transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)):31 -->_1 transpose#1#(::(@xs,@xss),@m) -> split#(@m):30 30:W:transpose#1#(::(@xs,@xss),@m) -> split#(@m) -->_1 split#(@m) -> split#1#(@m):23 31:W:transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) -->_1 transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l):32 32:W:transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) -->_1 transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)):33 33:W:transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) -->_1 transpose#(@m) -> transpose#1#(@m,@m):29 34:W:transpose'#(@m) -> makeBase#(@m) -->_1 makeBase#(@m) -> makeBase#1#(@m):6 35:W:transpose'#(@m) -> transAcc#(@m,makeBase(@m)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):26 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 34: transpose'#(@m) -> makeBase#(@m) 20: matrixMultOld#(@m1,@m2) -> transpose#(@m2) 29: transpose#(@m) -> transpose#1#(@m,@m) 33: transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) 32: transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) 31: transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) 30: transpose#1#(::(@xs,@xss),@m) -> split#(@m) 23: split#(@m) -> split#1#(@m) 25: split#2#(::(@x,@xs),@ls) -> split#(@ls) 24: split#1#(::(@l,@ls)) -> split#2#(@l,@ls) 8: matrixMult#(@m1,@m2) -> makeBase#(@m2) 6: makeBase#(@m) -> makeBase#1#(@m) 7: makeBase#1#(::(@l,@m')) -> mkBase#(@l) 21: mkBase#(@m) -> mkBase#1#(@m) 22: mkBase#1#(::(@l,@m')) -> mkBase#(@m') **** Step 8.b:1.b:1.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)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)) - Weak DPs: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/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 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)) -->_2 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4 9:W:matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):11 10:W:matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):26 11:W:matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2) -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2):13 -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2):12 12:W:matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2) -->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4 13:W:matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):11 14:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):10 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):9 15:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):10 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):9 16:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):18 -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):17 17:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):10 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):9 18:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) -->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):16 19:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):11 26:W:transAcc#(@m,@base) -> transAcc#1#(@m,@base) -->_1 transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base):28 -->_1 transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)):27 27:W:transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) -->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1 28:W:transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):26 35:W:transpose'#(@m) -> transAcc#(@m,makeBase(@m)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):26 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) **** Step 8.b:1.b:1.a:3: RemoveHeads 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)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) - Weak DPs: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/1,c_14/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: RemoveHeads + 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(lineMult#(@l,@xs)):5 5:S:lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) -->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4 6:W:matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):8 7:W:matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):17 8:W:matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2) -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2):10 -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2):9 9:W:matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2) -->_1 lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)):4 10:W:matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):8 11:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):7 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):6 12:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):7 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):6 13:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):15 -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):14 14:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):7 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):6 15:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) -->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):13 16:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):8 17:W:transAcc#(@m,@base) -> transAcc#1#(@m,@base) -->_1 transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base):19 -->_1 transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)):18 18:W:transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) -->_1 attach#(@line,@m) -> c_7(attach#1#(@line,@m)):1 19:W:transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):17 20:W:transpose'#(@m) -> transAcc#(@m,makeBase(@m)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):17 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(11,matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2))] **** Step 8.b:1.b:1.a:4: 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)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) - Weak DPs: matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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#(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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/1,c_14/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: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {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) = [0] p(#add) = [2] x2 + [1] p(#mult) = [2] x1 + [1] x2 + [7] p(#natmult) = [1] x1 + [2] x2 + [0] p(#neg) = [2] p(#pos) = [0] p(#pred) = [1] x1 + [7] p(#s) = [0] p(#succ) = [0] p(*) = [4] p(+) = [2] x1 + [6] p(::) = [1] x1 + [1] x2 + [4] p(attach) = [5] p(attach#1) = [0] p(attach#2) = [0] p(lineMult) = [2] x2 + [2] p(lineMult#1) = [1] x1 + [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) = [2] p(mult) = [2] p(mult#1) = [4] p(mult#2) = [2] x1 + [0] p(nil) = [0] p(split) = [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [0] p(transAcc) = [2] x1 + [0] p(transAcc#1) = [0] p(transpose) = [0] p(transpose#1) = [1] x1 + [0] p(transpose#2) = [0] p(transpose#3) = [2] x1 + [0] p(transpose') = [0] p(tuple#2) = [1] x2 + [5] 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 + [4] p(attach#1#) = [2] x1 + [4] p(attach#2#) = [2] x3 + [6] p(lineMult#) = [0] p(lineMult#1#) = [0] p(m1#) = [0] p(m2#) = [0] p(m3#) = [1] x1 + [2] p(m4#) = [0] p(makeBase#) = [2] p(makeBase#1#) = [1] x1 + [1] p(matrixMult#) = [3] x2 + [1] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [2] x1 + [3] x3 + [1] p(matrixMultList#) = [3] x2 + [0] p(matrixMultList#1#) = [3] 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#) = [2] x1 + [0] p(transAcc#1#) = [2] x1 + [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) = [1] x1 + [0] p(c_8) = [1] x1 + [4] p(c_9) = [0] p(c_10) = [1] x1 + [2] p(c_11) = [0] p(c_12) = [4] x1 + [0] p(c_13) = [2] x1 + [0] p(c_14) = [0] p(c_15) = [4] x1 + [1] x4 + [1] x5 + [0] p(c_16) = [4] x1 + [1] x2 + [4] x4 + [4] x5 + [0] p(c_17) = [4] x1 + [4] x2 + [1] x3 + [1] x4 + [1] x8 + [0] p(c_18) = [4] x1 + [0] p(c_19) = [1] x1 + [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [2] p(c_23) = [1] x1 + [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [1] x2 + [0] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [1] x1 + [1] x2 + [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) = [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) = [4] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [0] p(c_54) = [1] x2 + [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) = [1] 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) = [1] x1 + [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: attach#1#(::(@x,@xs),@m) = [2] @x + [2] @xs + [12] > [2] @xs + [10] = c_8(attach#2#(@m,@x,@xs)) Following rules are (at-least) weakly oriented: attach#(@line,@m) = [2] @line + [4] >= [2] @line + [4] = c_7(attach#1#(@line,@m)) attach#2#(::(@l,@ls),@x,@xs) = [2] @xs + [6] >= [2] @xs + [6] = c_10(attach#(@xs,@ls)) lineMult#(@l,@m2) = [0] >= [0] = c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) = [0] >= [0] = c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) = [3] @m2 + [1] >= [0] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) = [3] @m2 + [1] >= [2] @m2 + [0] = transAcc#(@m2,makeBase(@m2)) matrixMult'#(@m1,@m2) = [0] >= [0] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0] >= [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [2] @m1 + [3] @m3 + [1] >= [3] @m3 + [1] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [3] @mm + [0] >= [3] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [3] @m + [3] @ms + [12] >= [3] @m + [1] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [3] @m + [3] @ms + [12] >= [3] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [0] >= [0] = matrixMult'#(@m1,transpose(@m2)) transAcc#(@m,@base) = [2] @m + [0] >= [2] @m + [0] = transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) = [2] @l + [2] @m' + [8] >= [2] @l + [4] = attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) = [2] @l + [2] @m' + [8] >= [2] @m' + [0] = transAcc#(@m',@base) transpose'#(@m) = [4] @m + [0] >= [2] @m + [0] = transAcc#(@m,makeBase(@m)) **** Step 8.b:1.b:1.a:5: WeightGap WORST_CASE(?,O(n^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)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) - Weak DPs: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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#(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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/1,c_14/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(attach#) = {2}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(transAcc#) = {2}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [2] x1 + [1] x2 + [0] p(attach#1) = [2] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [2] x2 + [2] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [2] x1 + [1] p(m2) = [1] x1 + [0] p(m3) = [2] x1 + [0] p(m4) = [2] p(makeBase) = [0] p(makeBase#1) = [0] p(matrixMult) = [3] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [0] p(matrixMult3) = [1] x3 + [0] p(matrixMultList) = [2] x2 + [2] p(matrixMultList#1) = [0] p(matrixMultOld) = [2] x2 + [2] p(mkBase) = [0] p(mkBase#1) = [0] p(mult) = [0] p(mult#1) = [0] p(mult#2) = [0] p(nil) = [0] p(split) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [2] x1 + [1] x2 + [0] p(transAcc#1) = [2] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [0] p(transpose#1) = [1] x2 + [0] p(transpose#2) = [1] x1 + [0] p(transpose#3) = [1] x1 + [1] x2 + [0] p(transpose') = [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [2] p(#add#) = [0] p(#mult#) = [2] x1 + [1] x2 + [2] p(#natmult#) = [2] x1 + [0] p(#pred#) = [2] p(#succ#) = [1] x1 + [2] p(*#) = [2] x1 + [0] p(+#) = [1] x2 + [0] p(attach#) = [1] x2 + [0] p(attach#1#) = [1] x2 + [0] p(attach#2#) = [1] x1 + [0] p(lineMult#) = [0] p(lineMult#1#) = [2] p(m1#) = [1] x1 + [1] p(m2#) = [0] p(m3#) = [1] p(m4#) = [0] p(makeBase#) = [2] x1 + [2] p(makeBase#1#) = [1] x1 + [2] p(matrixMult#) = [1] x1 + [3] x2 + [0] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [0] p(matrixMult3#) = [3] x2 + [3] x3 + [1] p(matrixMultList#) = [1] x1 + [3] x2 + [0] p(matrixMultList#1#) = [3] x1 + [1] x2 + [0] p(matrixMultOld#) = [1] x1 + [2] x2 + [0] p(mkBase#) = [1] p(mkBase#1#) = [2] p(mult#) = [1] x1 + [2] p(mult#1#) = [2] x1 + [0] p(mult#2#) = [1] x3 + [0] p(split#) = [1] x1 + [2] p(split#1#) = [0] p(split#2#) = [1] p(split#3#) = [1] x1 + [1] x2 + [0] p(transAcc#) = [2] x1 + [1] x2 + [0] p(transAcc#1#) = [2] x1 + [1] x2 + [0] p(transpose#) = [1] p(transpose#1#) = [1] x1 + [2] x2 + [0] p(transpose#2#) = [2] x1 + [2] p(transpose#3#) = [2] x1 + [0] p(transpose'#) = [2] 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) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [0] p(c_14) = [0] p(c_15) = [2] x3 + [2] x4 + [0] p(c_16) = [1] x5 + [0] p(c_17) = [2] x2 + [2] x4 + [1] x6 + [2] x8 + [0] p(c_18) = [1] x3 + [2] x4 + [2] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [2] p(c_57) = [0] p(c_58) = [1] x1 + [0] p(c_59) = [1] x2 + [2] p(c_60) = [0] p(c_61) = [0] p(c_62) = [1] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [2] x1 + [1] p(c_68) = [2] p(c_69) = [2] p(c_70) = [1] p(c_71) = [0] p(c_72) = [2] p(c_73) = [0] p(c_74) = [0] p(c_75) = [2] p(c_76) = [2] p(c_77) = [0] p(c_78) = [2] Following rules are strictly oriented: lineMult#1#(::(@x,@xs),@l) = [2] > [0] = c_13(lineMult#(@l,@xs)) Following rules are (at-least) weakly oriented: attach#(@line,@m) = [1] @m + [0] >= [1] @m + [0] = c_7(attach#1#(@line,@m)) attach#1#(::(@x,@xs),@m) = [1] @m + [0] >= [1] @m + [0] = c_8(attach#2#(@m,@x,@xs)) attach#2#(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [0] >= [1] @ls + [0] = c_10(attach#(@xs,@ls)) lineMult#(@l,@m2) = [0] >= [2] = c_12(lineMult#1#(@m2,@l)) matrixMult#(@m1,@m2) = [1] @m1 + [3] @m2 + [0] >= [2] @m2 + [0] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) = [1] @m1 + [3] @m2 + [0] >= [2] @m2 + [0] = transAcc#(@m2,makeBase(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [3] @m2 + [3] @m3 + [1] >= [3] @m2 + [3] @m3 + [0] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [3] @mm + [0] >= [1] @acc + [3] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [0] >= [1] @acc + [3] @m + [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [0] >= [3] @m + [3] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m1 + [2] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) transAcc#(@m,@base) = [1] @base + [2] @m + [0] >= [1] @base + [2] @m + [0] = transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [2] @m' + [0] = attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [2] @m' + [0] = transAcc#(@m',@base) transpose'#(@m) = [2] @m + [1] >= [2] @m + [0] = transAcc#(@m,makeBase(@m)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [2] @line + [1] @m + [0] >= [2] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [2] @x + [2] @xs + [0] >= [1] @m + [2] @x + [2] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [2] @x + [2] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [2] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [2] @x + [2] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [3] @m2 + [0] >= [2] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [2] @m + [0] >= [1] @base + [2] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [2] @l + [2] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [0] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @l + [1] @y + [1] @ys + [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. **** Step 8.b:1.b:1.a:6: WeightGap WORST_CASE(?,O(n^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)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) - Weak DPs: attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)) lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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#(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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/1,c_14/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(attach#) = {2}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(transAcc#) = {2}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [2] x1 + [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [0] p(m2) = [1] x1 + [0] p(m3) = [0] p(m4) = [2] p(makeBase) = [0] p(makeBase#1) = [0] p(matrixMult) = [1] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [0] p(matrixMult3) = [2] x1 + [2] x2 + [0] p(matrixMultList) = [1] x2 + [0] p(matrixMultList#1) = [1] p(matrixMultOld) = [2] x1 + [2] x2 + [1] p(mkBase) = [0] p(mkBase#1) = [0] p(mult) = [0] p(mult#1) = [0] p(mult#2) = [0] p(nil) = [0] p(split) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [1] x1 + [1] x2 + [0] p(transAcc#1) = [1] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [0] p(transpose#1) = [1] x2 + [0] p(transpose#2) = [1] x1 + [0] p(transpose#3) = [1] x1 + [1] x2 + [0] p(transpose') = [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [1] p(#natmult#) = [1] x2 + [2] p(#pred#) = [2] p(#succ#) = [0] p(*#) = [1] x2 + [0] p(+#) = [2] x1 + [1] p(attach#) = [1] x1 + [1] x2 + [0] p(attach#1#) = [1] x1 + [1] x2 + [2] p(attach#2#) = [1] x1 + [1] x2 + [1] x3 + [1] p(lineMult#) = [0] p(lineMult#1#) = [3] p(m1#) = [1] x1 + [0] p(m2#) = [2] x1 + [1] p(m3#) = [0] p(m4#) = [1] p(makeBase#) = [1] x1 + [1] p(makeBase#1#) = [0] p(matrixMult#) = [1] x1 + [1] x2 + [0] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [0] p(matrixMult3#) = [1] x1 + [1] x2 + [2] x3 + [0] p(matrixMultList#) = [1] x1 + [1] x2 + [0] p(matrixMultList#1#) = [1] x1 + [1] x2 + [0] p(matrixMultOld#) = [2] x2 + [0] p(mkBase#) = [2] x1 + [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#) = [1] x1 + [1] x2 + [0] p(transAcc#1#) = [1] x1 + [1] x2 + [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [1] x1 + [2] x2 + [0] p(transpose'#) = [1] x1 + [2] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [1] p(c_5) = [2] 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 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [2] p(c_13) = [1] x1 + [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [2] x6 + [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] 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) = [2] x1 + [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [1] p(c_76) = [0] p(c_77) = [0] p(c_78) = [0] Following rules are strictly oriented: attach#2#(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [1] > [1] @ls + [1] @xs + [0] = c_10(attach#(@xs,@ls)) Following rules are (at-least) weakly oriented: attach#(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [2] = c_7(attach#1#(@line,@m)) attach#1#(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [2] >= [1] @m + [1] @x + [1] @xs + [1] = c_8(attach#2#(@m,@x,@xs)) lineMult#(@l,@m2) = [0] >= [5] = c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) = [3] >= [0] = c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) = [1] @m1 + [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) = [1] @m1 + [1] @m2 + [0] >= [1] @m2 + [0] = transAcc#(@m2,makeBase(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [1] @m1 + [1] @m2 + [2] @m3 + [0] >= [1] @m2 + [1] @m3 + [0] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [1] @mm + [0] >= [1] @acc + [1] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [1] @m + [1] @ms + [0] >= [1] @acc + [1] @m + [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [1] @m + [1] @ms + [0] >= [1] @m + [1] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [2] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) transAcc#(@m,@base) = [1] @base + [1] @m + [0] >= [1] @base + [1] @m + [0] = transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) = [1] @base + [1] @l + [1] @m' + [0] >= [1] @base + [1] @l + [1] @m' + [0] = attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [1] @l + [1] @m' + [0] >= [1] @base + [1] @m' + [0] = transAcc#(@m',@base) transpose'#(@m) = [1] @m + [2] >= [1] @m + [0] = transAcc#(@m,makeBase(@m)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [0] >= [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [0] >= [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [0] >= [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [0] >= [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [1] @m + [0] >= [1] @base + [1] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [1] @l + [1] @m' + [0] >= [1] @base + [1] @l + [1] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [0] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @l + [1] @y + [1] @ys + [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. **** Step 8.b:1.b:1.a:7: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: attach#(@line,@m) -> c_7(attach#1#(@line,@m)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) - 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)) lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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#(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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/1,c_14/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: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {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 + [1] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [5] p(#pos) = [0] p(#pred) = [0] p(#s) = [0] p(#succ) = [0] p(*) = [0] p(+) = [0] p(::) = [1] x1 + [1] x2 + [4] p(attach) = [4] x2 + [0] p(attach#1) = [0] p(attach#2) = [1] 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) = [4] 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) = [4] p(split) = [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [0] p(transAcc) = [1] x2 + [1] p(transAcc#1) = [2] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [4] p(transpose#3) = [0] p(transpose') = [1] x1 + [2] p(tuple#2) = [4] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(attach#) = [1] x1 + [2] p(attach#1#) = [1] x1 + [0] p(attach#2#) = [1] x3 + [4] 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#) = [1] x2 + [4] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [4] x3 + [4] p(matrixMultList#) = [1] x2 + [0] p(matrixMultList#1#) = [1] 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#) = [1] x1 + [0] p(transAcc#1#) = [1] x1 + [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [2] x1 + [0] p(transpose#3#) = [0] p(transpose'#) = [4] x1 + [0] p(c_1) = [2] p(c_2) = [0] p(c_3) = [0] p(c_4) = [4] p(c_5) = [1] x1 + [1] p(c_6) = [1] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [1] p(c_10) = [1] x1 + [2] p(c_11) = [4] p(c_12) = [4] x1 + [0] p(c_13) = [2] x1 + [0] p(c_14) = [2] p(c_15) = [1] x1 + [1] x2 + [4] x3 + [1] x5 + [0] p(c_16) = [1] x1 + [1] x2 + [4] x5 + [1] x6 + [0] p(c_17) = [1] x2 + [1] x4 + [4] x7 + [0] p(c_18) = [1] x1 + [1] x2 + [1] x3 + [1] p(c_19) = [1] x1 + [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [2] x1 + [1] x3 + [1] p(c_23) = [2] x1 + [0] p(c_24) = [2] p(c_25) = [1] p(c_26) = [4] p(c_27) = [1] x1 + [4] p(c_28) = [1] x1 + [1] x2 + [1] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] x1 + [1] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [1] x1 + [1] p(c_37) = [1] x1 + [1] p(c_38) = [0] p(c_39) = [1] x1 + [1] p(c_40) = [0] p(c_41) = [1] p(c_42) = [0] p(c_43) = [0] p(c_44) = [4] p(c_45) = [0] p(c_46) = [1] x1 + [2] x2 + [1] p(c_47) = [4] p(c_48) = [0] p(c_49) = [1] x1 + [4] x2 + [1] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [1] p(c_53) = [2] p(c_54) = [1] x2 + [0] p(c_55) = [0] p(c_56) = [2] x1 + [1] p(c_57) = [0] p(c_58) = [1] p(c_59) = [2] x1 + [1] p(c_60) = [0] p(c_61) = [1] p(c_62) = [1] p(c_63) = [0] p(c_64) = [1] x1 + [1] p(c_65) = [1] x1 + [0] p(c_66) = [0] p(c_67) = [4] 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) = [1] p(c_74) = [1] p(c_75) = [0] p(c_76) = [0] p(c_77) = [1] p(c_78) = [0] Following rules are strictly oriented: attach#(@line,@m) = [1] @line + [2] > [1] @line + [0] = c_7(attach#1#(@line,@m)) Following rules are (at-least) weakly oriented: attach#1#(::(@x,@xs),@m) = [1] @x + [1] @xs + [4] >= [1] @xs + [4] = c_8(attach#2#(@m,@x,@xs)) attach#2#(::(@l,@ls),@x,@xs) = [1] @xs + [4] >= [1] @xs + [4] = c_10(attach#(@xs,@ls)) lineMult#(@l,@m2) = [0] >= [0] = c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) = [0] >= [0] = c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) = [1] @m2 + [4] >= [0] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) = [1] @m2 + [4] >= [1] @m2 + [0] = transAcc#(@m2,makeBase(@m2)) matrixMult'#(@m1,@m2) = [0] >= [0] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0] >= [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [4] @m3 + [4] >= [1] @m3 + [4] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @mm + [0] >= [1] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @m + [1] @ms + [4] >= [1] @m + [4] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @m + [1] @ms + [4] >= [1] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [0] >= [0] = matrixMult'#(@m1,transpose(@m2)) transAcc#(@m,@base) = [1] @m + [0] >= [1] @m + [0] = transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) = [1] @l + [1] @m' + [4] >= [1] @l + [2] = attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) = [1] @l + [1] @m' + [4] >= [1] @m' + [0] = transAcc#(@m',@base) transpose'#(@m) = [4] @m + [0] >= [1] @m + [0] = transAcc#(@m,makeBase(@m)) **** Step 8.b:1.b:1.a:8: MI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) - 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)) lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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#(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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/1,c_14/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: MI {miKind = Automaton Nothing, miDimension = 3, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules} + Details: We apply a matrix interpretation of kind Automaton Nothing: The following argument positions are considered usable: uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1} 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] [0] p(#abs) = [0] [0] [0] p(#add) = [0 0 1] [0 0 0] [0] [1 0 0] x_1 + [0 0 1] x_2 + [0] [0 0 0] [1 0 0] [0] p(#mult) = [0 0 0] [1 1 1] [0] [0 0 0] x_1 + [0 0 1] x_2 + [0] [0 0 1] [0 0 0] [0] p(#natmult) = [0 0 0] [1 0 0] [0] [0 0 1] x_1 + [0 0 0] x_2 + [0] [1 0 0] [0 0 0] [0] p(#neg) = [0 1 1] [0] [0 0 0] x_1 + [0] [0 0 0] [1] p(#pos) = [0] [0] [0] p(#pred) = [0 0 0] [0] [0 0 1] x_1 + [0] [0 0 0] [0] p(#s) = [0 0 0] [0] [0 0 0] x_1 + [1] [1 1 0] [1] p(#succ) = [0 0 0] [0] [0 0 0] x_1 + [0] [1 0 0] [0] p(*) = [0 0 0] [0 1 0] [0] [0 0 0] x_1 + [0 1 0] x_2 + [0] [0 1 0] [0 0 0] [0] p(+) = [1 1 0] [0 0 0] [0] [0 0 0] x_1 + [0 1 0] x_2 + [0] [0 0 1] [0 0 0] [0] p(::) = [1 0 1] [1 0 1] [0] [0 0 0] x_1 + [0 1 0] x_2 + [1] [0 1 0] [0 0 0] [0] p(attach) = [1 1 1] [1 0 0] [0] [0 0 0] x_1 + [0 1 0] x_2 + [0] [0 0 0] [0 0 1] [1] p(attach#1) = [1 1 1] [1 0 0] [0] [0 0 0] x_1 + [0 1 0] x_2 + [0] [0 0 0] [0 0 1] [1] p(attach#2) = [1 0 0] [1 1 1] [1 1 1] [1] [0 1 0] x_1 + [0 0 0] x_2 + [0 0 0] x_3 + [0] [0 0 1] [0 0 0] [0 0 0] [1] p(lineMult) = [1 0 0] [1 0 0] [1] [0 0 0] x_1 + [1 0 0] x_2 + [1] [0 0 1] [1 1 0] [0] p(lineMult#1) = [0 1 0] [0] [0 0 0] x_1 + [0] [0 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] [1] [0 0 1] x_1 + [0] [0 1 0] [0] p(makeBase#1) = [0 0 0] [1] [0 0 1] x_1 + [0] [0 1 0] [0] p(matrixMult) = [0] [0] [0] p(matrixMult') = [1 0 0] [0 0 1] [1] [1 0 0] x_1 + [0 0 0] x_2 + [0] [1 0 0] [0 0 0] [0] p(matrixMult'#1) = [1 0 0] [0] [0 0 1] x_1 + [0] [0 1 1] [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] [0] [0 1 0] x_1 + [0] [0 0 0] [0] p(mkBase#1) = [0 0 0] [0] [0 1 0] x_1 + [0] [0 0 0] [0] p(mult) = [1 1 0] [0] [1 0 0] x_1 + [1] [0 0 0] [0] p(mult#1) = [0 0 0] [1] [1 1 0] x_1 + [1] [0 0 0] [0] p(mult#2) = [1 1 0] [1] [1 0 0] x_1 + [0] [1 0 0] [0] p(nil) = [0] [0] [0] p(split) = [1 0 0] [0] [1 0 1] x_1 + [1] [0 1 0] [0] p(split#1) = [0 0 0] [0] [1 0 1] x_1 + [1] [0 1 0] [0] p(split#2) = [0 0 0] [0 0 0] [0] [1 1 1] x_1 + [1 0 1] x_2 + [1] [0 0 0] [0 1 0] [1] p(split#3) = [0 0 0] [0 0 0] [0 0 0] [0] [0 1 0] x_1 + [1 1 1] x_2 + [1 1 1] x_3 + [1] [0 0 1] [0 0 0] [0 0 0] [1] p(transAcc) = [1 0 1] [1 1 1] [1] [0 0 0] x_1 + [0 1 0] x_2 + [0] [0 1 0] [0 1 1] [1] p(transAcc#1) = [1 0 1] [1 1 1] [1] [0 0 0] x_1 + [0 1 0] x_2 + [0] [0 1 0] [0 1 1] [1] p(transpose) = [1 0 1] [1] [1 1 1] x_1 + [0] [0 1 0] [0] p(transpose#1) = [0 0 0] [1 0 1] [1] [0 1 0] x_1 + [1 0 1] x_2 + [0] [0 0 0] [0 1 0] [0] p(transpose#2) = [0 1 0] [0] [0 1 0] x_1 + [0] [0 0 1] [0] p(transpose#3) = [1 1 1] [1 0 1] [1] [1 1 1] x_1 + [0 0 0] x_2 + [1] [0 0 0] [0 1 0] [0] p(transpose') = [0] [0] [0] p(tuple#2) = [0 0 0] [0 0 0] [0] [1 0 1] x_1 + [1 1 1] x_2 + [1] [0 1 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#) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 0] [1] p(attach#1#) = [1 0 0] [0 0 0] [0] [0 0 1] x_1 + [0 1 1] x_2 + [0] [0 0 1] [0 1 0] [0] p(attach#2#) = [0 0 0] [0 0 0] [1 0 0] [0] [0 1 0] x_1 + [0 0 0] x_2 + [0 1 0] x_3 + [1] [0 0 0] [1 0 0] [0 0 1] [0] p(lineMult#) = [0 1 0] [1] [0 0 0] x_2 + [1] [0 0 0] [0] p(lineMult#1#) = [0 1 0] [0 0 0] [0] [0 0 0] x_1 + [0 0 1] x_2 + [0] [0 0 0] [0 0 0] [1] 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#) = [1 0 1] [1] [0 0 0] x_2 + [1] [1 1 1] [1] p(matrixMult'#) = [0 1 0] [1] [0 0 0] x_2 + [1] [0 0 0] [0] p(matrixMult'#1#) = [0 1 0] [1] [0 0 0] x_2 + [1] [0 0 0] [0] p(matrixMult3#) = [1 0 1] [0 0 0] [1 0 1] [1] [0 1 0] x_1 + [0 1 1] x_2 + [0 1 1] x_3 + [1] [1 1 0] [0 0 0] [1 1 1] [1] p(matrixMultList#) = [1 0 0] [1] [0 0 0] x_2 + [1] [1 0 1] [1] p(matrixMultList#1#) = [1 0 0] [1] [0 0 0] x_1 + [1] [1 0 1] [1] p(matrixMultOld#) = [0 0 0] [1 1 1] [1] [0 0 0] x_1 + [0 0 1] x_2 + [1] [0 0 1] [0 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] p(split#1#) = [0] [0] [0] p(split#2#) = [0] [0] [0] p(split#3#) = [0] [0] [0] p(transAcc#) = [1 0 0] [0 0 0] [1] [0 0 0] x_1 + [0 0 0] x_2 + [0] [0 1 0] [1 0 0] [0] p(transAcc#1#) = [1 0 0] [0 0 0] [1] [0 0 0] x_1 + [0 0 0] x_2 + [0] [0 1 0] [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'#) = [1 1 0] [1] [1 1 1] x_1 + [0] [1 1 1] [1] 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) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 0] [1] p(c_8) = [1 0 1] [0] [0 0 0] x_1 + [0] [0 0 0] [0] p(c_9) = [0] [0] [0] p(c_10) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 0] [0] p(c_11) = [0] [0] [0] p(c_12) = [1 0 0] [0] [0 0 0] x_1 + [1] [0 0 0] [0] p(c_13) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 1 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) = [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) = [0] [0] [0] p(c_40) = [0] [0] [0] p(c_41) = [0] [0] [0] p(c_42) = [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) = [0] [0] [0] p(c_49) = [0] [0] [0] p(c_50) = [0] [0] [0] p(c_51) = [0] [0] [0] p(c_52) = [0] [0] [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: lineMult#(@l,@m2) = [0 1 0] [1] [0 0 0] @m2 + [1] [0 0 0] [0] > [0 1 0] [0] [0 0 0] @m2 + [1] [0 0 0] [0] = c_12(lineMult#1#(@m2,@l)) Following rules are (at-least) weakly oriented: attach#(@line,@m) = [1 0 0] [0] [0 0 0] @line + [0] [0 0 0] [1] >= [1 0 0] [0] [0 0 0] @line + [0] [0 0 0] [1] = c_7(attach#1#(@line,@m)) attach#1#(::(@x,@xs),@m) = [0 0 0] [1 0 1] [1 0 1] [0] [0 1 1] @m + [0 1 0] @x + [0 0 0] @xs + [0] [0 1 0] [0 1 0] [0 0 0] [0] >= [1 0 0] [1 0 1] [0] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] = c_8(attach#2#(@m,@x,@xs)) attach#2#(::(@l,@ls),@x,@xs) = [0 0 0] [0 0 0] [1 0 0] [0] [0 1 0] @ls + [0 0 0] @x + [0 1 0] @xs + [2] [0 0 0] [1 0 0] [0 0 1] [0] >= [1 0 0] [0] [0 0 0] @xs + [0] [0 0 0] [0] = c_10(attach#(@xs,@ls)) lineMult#1#(::(@x,@xs),@l) = [0 0 0] [0 1 0] [1] [0 0 1] @l + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [1] >= [0 1 0] [1] [0 0 0] @xs + [0] [0 0 0] [1] = c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) = [1 0 1] [1] [0 0 0] @m2 + [1] [1 1 1] [1] >= [0 0 1] [1] [0 0 0] @m2 + [1] [0 0 0] [0] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) = [1 0 1] [1] [0 0 0] @m2 + [1] [1 1 1] [1] >= [1 0 0] [1] [0 0 0] @m2 + [0] [0 1 0] [1] = transAcc#(@m2,makeBase(@m2)) matrixMult'#(@m1,@m2) = [0 1 0] [1] [0 0 0] @m2 + [1] [0 0 0] [0] >= [0 1 0] [1] [0 0 0] @m2 + [1] [0 0 0] [0] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0 1 0] [1] [0 0 0] @m2 + [1] [0 0 0] [0] >= [0 1 0] [1] [0 0 0] @m2 + [1] [0 0 0] [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0 1 0] [1] [0 0 0] @m2 + [1] [0 0 0] [0] >= [0 1 0] [1] [0 0 0] @m2 + [1] [0 0 0] [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [1 0 1] [0 0 0] [1 0 1] [1] [0 1 0] @m1 + [0 1 1] @m2 + [0 1 1] @m3 + [1] [1 1 0] [0 0 0] [1 1 1] [1] >= [1 0 1] [1] [0 0 0] @m3 + [1] [1 1 1] [1] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1 0 0] [1] [0 0 0] @mm + [1] [1 0 1] [1] >= [1 0 0] [1] [0 0 0] @mm + [1] [1 0 1] [1] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1 0 1] [1 0 1] [1] [0 0 0] @m + [0 0 0] @ms + [1] [1 1 1] [1 0 1] [1] >= [1 0 1] [1] [0 0 0] @m + [1] [1 1 1] [1] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1 0 1] [1 0 1] [1] [0 0 0] @m + [0 0 0] @ms + [1] [1 1 1] [1 0 1] [1] >= [1 0 0] [1] [0 0 0] @ms + [1] [1 0 1] [1] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [0 0 0] [1 1 1] [1] [0 0 0] @m1 + [0 0 1] @m2 + [1] [0 0 1] [0 1 0] [0] >= [1 1 1] [1] [0 0 0] @m2 + [1] [0 0 0] [0] = matrixMult'#(@m1,transpose(@m2)) transAcc#(@m,@base) = [0 0 0] [1 0 0] [1] [0 0 0] @base + [0 0 0] @m + [0] [1 0 0] [0 1 0] [0] >= [0 0 0] [1 0 0] [1] [0 0 0] @base + [0 0 0] @m + [0] [1 0 0] [0 1 0] [0] = transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) = [0 0 0] [1 0 1] [1 0 1] [1] [0 0 0] @base + [0 0 0] @l + [0 0 0] @m' + [0] [1 0 0] [0 0 0] [0 1 0] [1] >= [1 0 0] [0] [0 0 0] @l + [0] [0 0 0] [1] = attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) = [0 0 0] [1 0 1] [1 0 1] [1] [0 0 0] @base + [0 0 0] @l + [0 0 0] @m' + [0] [1 0 0] [0 0 0] [0 1 0] [1] >= [0 0 0] [1 0 0] [1] [0 0 0] @base + [0 0 0] @m' + [0] [1 0 0] [0 1 0] [0] = transAcc#(@m',@base) transpose'#(@m) = [1 1 0] [1] [1 1 1] @m + [0] [1 1 1] [1] >= [1 0 0] [1] [0 0 0] @m + [0] [0 1 0] [1] = transAcc#(@m,makeBase(@m)) attach(@line,@m) = [1 1 1] [1 0 0] [0] [0 0 0] @line + [0 1 0] @m + [0] [0 0 0] [0 0 1] [1] >= [1 1 1] [1 0 0] [0] [0 0 0] @line + [0 1 0] @m + [0] [0 0 0] [0 0 1] [1] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1 0 0] [1 1 1] [1 1 1] [1] [0 1 0] @m + [0 0 0] @x + [0 0 0] @xs + [0] [0 0 1] [0 0 0] [0 0 0] [1] >= [1 0 0] [1 1 1] [1 1 1] [1] [0 1 0] @m + [0 0 0] @x + [0 0 0] @xs + [0] [0 0 1] [0 0 0] [0 0 0] [1] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1 0 0] [0] [0 1 0] @m + [0] [0 0 1] [1] >= [0] [0] [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1 0 1] [1 0 1] [1 1 1] [1 1 1] [1] [0 0 0] @l + [0 1 0] @ls + [0 0 0] @x + [0 0 0] @xs + [1] [0 1 0] [0 0 0] [0 0 0] [0 0 0] [1] >= [1 0 1] [1 0 1] [1 1 1] [1 1 1] [1] [0 0 0] @l + [0 1 0] @ls + [0 0 0] @x + [0 0 0] @xs + [1] [0 1 0] [0 0 0] [0 0 0] [0 0 0] [1] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1 1 1] [1 1 1] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [1] >= [0] [0] [0] = nil() makeBase(@m) = [0 0 0] [1] [0 0 1] @m + [0] [0 1 0] [0] >= [0 0 0] [1] [0 0 1] @m + [0] [0 1 0] [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0 0 0] [0 0 0] [1] [0 1 0] @l + [0 0 0] @m' + [0] [0 0 0] [0 1 0] [1] >= [0 0 0] [0] [0 1 0] @l + [0] [0 0 0] [0] = mkBase(@l) makeBase#1(nil()) = [1] [0] [0] >= [0] [0] [0] = nil() mkBase(@m) = [0 0 0] [0] [0 1 0] @m + [0] [0 0 0] [0] >= [0 0 0] [0] [0 1 0] @m + [0] [0 0 0] [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0 0 0] [0] [0 1 0] @m' + [1] [0 0 0] [0] >= [0 0 0] [0] [0 1 0] @m' + [1] [0 0 0] [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] [0] [0] >= [0] [0] [0] = nil() split(@m) = [1 0 0] [0] [1 0 1] @m + [1] [0 1 0] [0] >= [0 0 0] [0] [1 0 1] @m + [1] [0 1 0] [0] = split#1(@m) split#1(::(@l,@ls)) = [0 0 0] [0 0 0] [0] [1 1 1] @l + [1 0 1] @ls + [1] [0 0 0] [0 1 0] [1] >= [0 0 0] [0 0 0] [0] [1 1 1] @l + [1 0 1] @ls + [1] [0 0 0] [0 1 0] [1] = split#2(@l,@ls) split#1(nil()) = [0] [1] [0] >= [0] [1] [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [0 0 0] [0 0 0] [0 0 0] [0] [1 0 1] @ls + [1 1 1] @x + [1 1 1] @xs + [2] [0 1 0] [0 0 0] [0 0 0] [1] >= [0 0 0] [0 0 0] [0 0 0] [0] [1 0 1] @ls + [1 1 1] @x + [1 1 1] @xs + [2] [0 1 0] [0 0 0] [0 0 0] [1] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [0 0 0] [0] [1 0 1] @ls + [1] [0 1 0] [1] >= [0] [1] [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [1 1 1] @m' + [1 1 1] @x + [1 1 1] @xs + [1 0 1] @ys + [2] [0 0 0] [0 0 0] [0 0 0] [0 1 0] [1] >= [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [1 1 1] @m' + [1 1 1] @x + [1 1 1] @xs + [1 0 1] @ys + [2] [0 0 0] [0 0 0] [0 0 0] [0 1 0] [1] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1 1 1] [1 0 1] [1] [0 1 0] @base + [0 0 0] @m + [0] [0 1 1] [0 1 0] [1] >= [1 1 1] [1 0 1] [1] [0 1 0] @base + [0 0 0] @m + [0] [0 1 1] [0 1 0] [1] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1 1 1] [1 1 1] [1 0 1] [1] [0 1 0] @base + [0 0 0] @l + [0 0 0] @m' + [0] [0 1 1] [0 0 0] [0 1 0] [2] >= [1 1 1] [1 1 1] [1 0 1] [1] [0 1 0] @base + [0 0 0] @l + [0 0 0] @m' + [0] [0 1 1] [0 0 0] [0 1 0] [2] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1 1 1] [1] [0 1 0] @base + [0] [0 1 1] [1] >= [1 0 0] [0] [0 1 0] @base + [0] [0 0 1] [0] = @base transpose(@m) = [1 0 1] [1] [1 1 1] @m + [0] [0 1 0] [0] >= [1 0 1] [1] [1 1 1] @m + [0] [0 1 0] [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1 0 1] [0 0 0] [1] [1 0 1] @m + [0 1 0] @xss + [1] [0 1 0] [0 0 0] [0] >= [1 0 1] [1] [1 0 1] @m + [1] [0 1 0] [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1 0 1] [1] [1 0 1] @m + [0] [0 1 0] [0] >= [0] [0] [0] = nil() transpose#2(tuple#2(@l,@m')) = [1 0 1] [1 1 1] [1] [1 0 1] @l + [1 1 1] @m' + [1] [0 1 0] [0 0 0] [0] >= [1 0 1] [1 1 1] [1] [0 0 0] @l + [1 1 1] @m' + [1] [0 1 0] [0 0 0] [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1 0 1] [1 1 1] [1 1 1] [2] [0 0 0] @l + [1 1 1] @y + [1 1 1] @ys + [2] [0 1 0] [0 0 0] [0 0 0] [0] >= [1 0 1] [1 1 1] [1 1 1] [2] [0 0 0] @l + [1 1 1] @y + [1 1 1] @ys + [2] [0 1 0] [0 0 0] [0 0 0] [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1 0 1] [1] [0 0 0] @l + [1] [0 1 0] [0] >= [0] [0] [0] = nil() **** Step 8.b:1.b:1.a:9: EmptyProcessor 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)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) -> c_13(lineMult#(@l,@xs)) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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#(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)) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose'#(@m) -> 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/1,c_14/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: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). **** Step 8.b:1.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: 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: attach#(@line,@m) -> attach#1#(@line,@m) attach#1#(::(@x,@xs),@m) -> attach#2#(@m,@x,@xs) attach#2#(::(@l,@ls),@x,@xs) -> attach#(@xs,@ls) lineMult#(@l,@m2) -> lineMult#1#(@m2,@l) lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs) lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x) makeBase#(@m) -> makeBase#1#(@m) makeBase#1#(::(@l,@m')) -> mkBase#(@l) matrixMult#(@m1,@m2) -> makeBase#(@m2) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) -> 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)) matrixMultOld#(@m1,@m2) -> transpose#(@m2) mkBase#(@m) -> mkBase#1#(@m) mkBase#1#(::(@l,@m')) -> mkBase#(@m') split#(@m) -> split#1#(@m) split#1#(::(@l,@ls)) -> split#2#(@l,@ls) split#2#(::(@x,@xs),@ls) -> split#(@ls) transAcc#(@m,@base) -> transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) transpose#(@m) -> transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) -> split#(@m) transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) transpose'#(@m) -> makeBase#(@m) transpose'#(@m) -> 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/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:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) -->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):2 2: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)):3 3:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)) -->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):1 4:W:attach#(@line,@m) -> attach#1#(@line,@m) -->_1 attach#1#(::(@x,@xs),@m) -> attach#2#(@m,@x,@xs):5 5:W:attach#1#(::(@x,@xs),@m) -> attach#2#(@m,@x,@xs) -->_1 attach#2#(::(@l,@ls),@x,@xs) -> attach#(@xs,@ls):6 6:W:attach#2#(::(@l,@ls),@x,@xs) -> attach#(@xs,@ls) -->_1 attach#(@line,@m) -> attach#1#(@line,@m):4 7:W:lineMult#(@l,@m2) -> lineMult#1#(@m2,@l) -->_1 lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x):9 -->_1 lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs):8 8:W:lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs) -->_1 lineMult#(@l,@m2) -> lineMult#1#(@m2,@l):7 9:W:lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x) -->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):1 10:W:makeBase#(@m) -> makeBase#1#(@m) -->_1 makeBase#1#(::(@l,@m')) -> mkBase#(@l):11 11:W:makeBase#1#(::(@l,@m')) -> mkBase#(@l) -->_1 mkBase#(@m) -> mkBase#1#(@m):25 12:W:matrixMult#(@m1,@m2) -> makeBase#(@m2) -->_1 makeBase#(@m) -> makeBase#1#(@m):10 13:W:matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):15 14:W:matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):30 15:W:matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2) -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2):17 -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2):16 16:W:matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2) -->_1 lineMult#(@l,@m2) -> lineMult#1#(@m2,@l):7 17:W:matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):15 18:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):14 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):13 -->_1 matrixMult#(@m1,@m2) -> makeBase#(@m2):12 19:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):14 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):13 -->_1 matrixMult#(@m1,@m2) -> makeBase#(@m2):12 20:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):22 -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):21 21:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) -->_1 matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)):14 -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):13 -->_1 matrixMult#(@m1,@m2) -> makeBase#(@m2):12 22:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) -->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):20 23:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):15 24:W:matrixMultOld#(@m1,@m2) -> transpose#(@m2) -->_1 transpose#(@m) -> transpose#1#(@m,@m):33 25:W:mkBase#(@m) -> mkBase#1#(@m) -->_1 mkBase#1#(::(@l,@m')) -> mkBase#(@m'):26 26:W:mkBase#1#(::(@l,@m')) -> mkBase#(@m') -->_1 mkBase#(@m) -> mkBase#1#(@m):25 27:W:split#(@m) -> split#1#(@m) -->_1 split#1#(::(@l,@ls)) -> split#2#(@l,@ls):28 28:W:split#1#(::(@l,@ls)) -> split#2#(@l,@ls) -->_1 split#2#(::(@x,@xs),@ls) -> split#(@ls):29 29:W:split#2#(::(@x,@xs),@ls) -> split#(@ls) -->_1 split#(@m) -> split#1#(@m):27 30:W:transAcc#(@m,@base) -> transAcc#1#(@m,@base) -->_1 transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base):32 -->_1 transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)):31 31:W:transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) -->_1 attach#(@line,@m) -> attach#1#(@line,@m):4 32:W:transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):30 33:W:transpose#(@m) -> transpose#1#(@m,@m) -->_1 transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)):35 -->_1 transpose#1#(::(@xs,@xss),@m) -> split#(@m):34 34:W:transpose#1#(::(@xs,@xss),@m) -> split#(@m) -->_1 split#(@m) -> split#1#(@m):27 35:W:transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) -->_1 transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l):36 36:W:transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) -->_1 transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)):37 37:W:transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) -->_1 transpose#(@m) -> transpose#1#(@m,@m):33 38:W:transpose'#(@m) -> makeBase#(@m) -->_1 makeBase#(@m) -> makeBase#1#(@m):10 39:W:transpose'#(@m) -> transAcc#(@m,makeBase(@m)) -->_1 transAcc#(@m,@base) -> transAcc#1#(@m,@base):30 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 39: transpose'#(@m) -> transAcc#(@m,makeBase(@m)) 38: transpose'#(@m) -> makeBase#(@m) 24: matrixMultOld#(@m1,@m2) -> transpose#(@m2) 33: transpose#(@m) -> transpose#1#(@m,@m) 37: transpose#3#(::(@y,@ys),@l) -> transpose#(::(@y,@ys)) 36: transpose#2#(tuple#2(@l,@m')) -> transpose#3#(@m',@l) 35: transpose#1#(::(@xs,@xss),@m) -> transpose#2#(split(@m)) 34: transpose#1#(::(@xs,@xss),@m) -> split#(@m) 27: split#(@m) -> split#1#(@m) 29: split#2#(::(@x,@xs),@ls) -> split#(@ls) 28: split#1#(::(@l,@ls)) -> split#2#(@l,@ls) 14: matrixMult#(@m1,@m2) -> transAcc#(@m2,makeBase(@m2)) 30: transAcc#(@m,@base) -> transAcc#1#(@m,@base) 32: transAcc#1#(::(@l,@m'),@base) -> transAcc#(@m',@base) 31: transAcc#1#(::(@l,@m'),@base) -> attach#(@l,transAcc(@m',@base)) 12: matrixMult#(@m1,@m2) -> makeBase#(@m2) 10: makeBase#(@m) -> makeBase#1#(@m) 11: makeBase#1#(::(@l,@m')) -> mkBase#(@l) 25: mkBase#(@m) -> mkBase#1#(@m) 26: mkBase#1#(::(@l,@m')) -> mkBase#(@m') 4: attach#(@line,@m) -> attach#1#(@line,@m) 6: attach#2#(::(@l,@ls),@x,@xs) -> attach#(@xs,@ls) 5: attach#1#(::(@x,@xs),@m) -> attach#2#(@m,@x,@xs) **** Step 8.b:1.b:1.b:2: RemoveHeads WORST_CASE(?,O(n^1)) + 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)) mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)) - 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)) - Weak TRS: #abs(#0()) -> #0() #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) attach(@line,@m) -> attach#1(@line,@m) attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs) attach#1(nil(),@m) -> nil() attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) -> nil() lineMult(@l,@m2) -> lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) -> nil() makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l,@m')) -> mkBase(@l) makeBase#1(nil()) -> nil() matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) -> nil() mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m')) mkBase#1(nil()) -> nil() mult(@l1,@l2) -> mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs) 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: RemoveHeads + Details: Consider the dependency graph 1:S:mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) -->_1 mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)):2 2: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)):3 3:S:mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)) -->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):1 7:W:lineMult#(@l,@m2) -> lineMult#1#(@m2,@l) -->_1 lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x):9 -->_1 lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs):8 8:W:lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs) -->_1 lineMult#(@l,@m2) -> lineMult#1#(@m2,@l):7 9:W:lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x) -->_1 mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)):1 13:W:matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):15 15:W:matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2) -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2):17 -->_1 matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2):16 16:W:matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2) -->_1 lineMult#(@l,@m2) -> lineMult#1#(@m2,@l):7 17:W:matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):15 18:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2) -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):13 19:W:matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):13 20:W:matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms):22 -->_1 matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m):21 21:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) -->_1 matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))):13 22:W:matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) -->_1 matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc):20 23:W:matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) -->_1 matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2):15 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(18,matrixMult3#(@m1,@m2,@m3) -> matrixMult#(@m1,@m2))] **** Step 8.b:1.b:1.b:3: WeightGap WORST_CASE(?,O(n^1)) + 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)) mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)) - 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#(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/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: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1,2}, uargs(::) = {1,2}, uargs(attach) = {2}, uargs(matrixMult') = {2}, uargs(split#3) = {1}, uargs(transAcc) = {2}, uargs(transpose#2) = {1}, uargs(matrixMult#) = {1}, uargs(matrixMult'#) = {2}, uargs(matrixMultList#) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_37) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#abs) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(+) = [1] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(attach) = [1] x1 + [1] x2 + [0] p(attach#1) = [1] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [1] x3 + [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) = [1] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [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) = [1] x1 + [0] p(split#1) = [1] x1 + [0] p(split#2) = [1] x1 + [1] x2 + [0] p(split#3) = [1] x1 + [1] x2 + [1] x3 + [0] p(transAcc) = [1] x1 + [1] x2 + [0] p(transAcc#1) = [1] x1 + [1] x2 + [0] p(transpose) = [1] x1 + [0] p(transpose#1) = [1] x2 + [0] p(transpose#2) = [1] x1 + [0] p(transpose#3) = [1] x1 + [1] x2 + [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#) = [1] x1 + [1] x2 + [0] p(matrixMult'#) = [1] x1 + [1] x2 + [0] p(matrixMult'#1#) = [1] x1 + [1] x2 + [0] p(matrixMult3#) = [4] x2 + [3] x3 + [1] p(matrixMultList#) = [1] x1 + [1] x2 + [0] p(matrixMultList#1#) = [1] x1 + [1] x2 + [0] p(matrixMultOld#) = [3] x1 + [3] x2 + [4] p(mkBase#) = [0] p(mkBase#1#) = [2] x1 + [0] p(mult#) = [0] p(mult#1#) = [5] p(mult#2#) = [4] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [2] x2 + [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [0] p(transpose'#) = [1] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [1] x1 + [0] p(c_6) = [2] x1 + [0] p(c_7) = [0] p(c_8) = [1] p(c_9) = [0] p(c_10) = [1] x1 + [4] p(c_11) = [1] 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 + [1] x2 + [1] x3 + [0] p(c_23) = [0] p(c_24) = [1] x2 + [0] p(c_25) = [0] p(c_26) = [2] x1 + [1] x2 + [2] p(c_27) = [0] p(c_28) = [4] x1 + [4] p(c_29) = [0] p(c_30) = [1] x1 + [2] x2 + [2] p(c_31) = [2] x1 + [1] p(c_32) = [1] x1 + [1] p(c_33) = [2] p(c_34) = [1] x1 + [2] p(c_35) = [1] x1 + [0] p(c_36) = [1] p(c_37) = [1] x1 + [3] p(c_38) = [4] x1 + [0] p(c_39) = [2] x1 + [0] p(c_40) = [2] x1 + [1] p(c_41) = [0] p(c_42) = [0] p(c_43) = [4] p(c_44) = [1] p(c_45) = [0] p(c_46) = [1] x2 + [4] p(c_47) = [0] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [2] p(c_50) = [0] p(c_51) = [2] p(c_52) = [0] p(c_53) = [1] p(c_54) = [1] x1 + [1] x2 + [4] p(c_55) = [0] p(c_56) = [2] p(c_57) = [1] x1 + [0] p(c_58) = [4] x1 + [2] p(c_59) = [1] x1 + [1] x2 + [0] p(c_60) = [1] p(c_61) = [1] p(c_62) = [4] p(c_63) = [0] p(c_64) = [1] x1 + [1] p(c_65) = [1] x1 + [1] p(c_66) = [0] p(c_67) = [1] x1 + [1] p(c_68) = [1] x1 + [2] p(c_69) = [2] p(c_70) = [1] x2 + [1] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [1] p(c_75) = [4] p(c_76) = [4] p(c_77) = [1] p(c_78) = [2] Following rules are strictly oriented: mult#1#(::(@x,@xs),@l2) = [5] > [4] = c_35(mult#2#(@l2,@x,@xs)) mult#2#(::(@y,@ys),@x,@xs) = [4] > [3] = c_37(mult#(@xs,@ys)) Following rules are (at-least) weakly oriented: lineMult#(@l,@m2) = [0] >= [0] = lineMult#1#(@m2,@l) lineMult#1#(::(@x,@xs),@l) = [0] >= [0] = lineMult#(@l,@xs) lineMult#1#(::(@x,@xs),@l) = [0] >= [0] = mult#(@l,@x) matrixMult#(@m1,@m2) = [1] @m1 + [1] @m2 + [0] >= [1] @m1 + [1] @m2 + [0] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'#(@m1,@m2) = [1] @m1 + [1] @m2 + [0] >= [1] @m1 + [1] @m2 + [0] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @l + [1] @ls + [1] @m2 + [0] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @l + [1] @ls + [1] @m2 + [0] >= [1] @ls + [1] @m2 + [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [4] @m2 + [3] @m3 + [1] >= [1] @m2 + [1] @m3 + [0] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [1] @mm + [0] >= [1] @acc + [1] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [1] @m + [1] @ms + [0] >= [1] @acc + [1] @m + [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [1] @m + [1] @ms + [0] >= [1] @m + [1] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [3] @m1 + [3] @m2 + [4] >= [1] @m1 + [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mult#(@l1,@l2) = [0] >= [7] = c_34(mult#1#(@l1,@l2)) #abs(#0()) = [0] >= [0] = #0() #add(#0(),@y) = [1] @y + [0] >= [1] @y + [0] = @y #add(#neg(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(@y) #add(#neg(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(@y) #add(#pos(#s(#s(@x))),@y) = [1] @y + [0] >= [1] @y + [0] = #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(@y)) = [0] >= [0] = #0() #mult(#0(),#pos(@y)) = [0] >= [0] = #0() #mult(#neg(@x),#0()) = [0] >= [0] = #0() #mult(#neg(@x),#neg(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) = [0] >= [0] = #0() #mult(#pos(@x),#neg(@y)) = [0] >= [0] = #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) = [0] >= [0] = #pos(#natmult(@x,@y)) #natmult(#0(),@y) = [0] >= [0] = #0() #natmult(#s(@x),@y) = [0] >= [0] = #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(@x)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(@x)))) = [1] @x + [0] >= [1] @x + [0] = #neg(#s(@x)) #succ(#pos(#s(@x))) = [1] @x + [0] >= [1] @x + [0] = #pos(#s(#s(@x))) *(@x,@y) = [0] >= [0] = #mult(@x,@y) +(@x,@y) = [1] @x + [1] @y + [0] >= [1] @y + [0] = #add(@x,@y) attach(@line,@m) = [1] @line + [1] @m + [0] >= [1] @line + [1] @m + [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [1] @m + [1] @x + [1] @xs + [0] >= [1] @m + [1] @x + [1] @xs + [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [1] @m + [0] >= [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] @x + [1] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [1] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @x + [1] @xs + [0] >= [0] = nil() lineMult(@l,@m2) = [0] >= [0] = lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) = [0] >= [0] = ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) = [0] >= [0] = nil() makeBase(@m) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [0] >= [0] = nil() mkBase(@m) = [0] >= [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [0] >= [0] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [0] >= [0] = nil() mult(@l1,@l2) = [0] >= [0] = mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) = [0] >= [0] = mult#2(@l2,@x,@xs) mult#1(nil(),@l2) = [0] >= [0] = #abs(#0()) mult#2(::(@y,@ys),@x,@xs) = [0] >= [0] = +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) = [0] >= [0] = #abs(#0()) split(@m) = [1] @m + [0] >= [1] @m + [0] = split#1(@m) split#1(::(@l,@ls)) = [1] @l + [1] @ls + [0] >= [1] @l + [1] @ls + [0] = split#2(@l,@ls) split#1(nil()) = [0] >= [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [1] @x + [1] @xs + [0] >= [1] @ls + [1] @x + [1] @xs + [0] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [0] >= [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] >= [1] @m' + [1] @x + [1] @xs + [1] @ys + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [1] @m + [0] >= [1] @base + [1] @m + [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [1] @l + [1] @m' + [0] >= [1] @base + [1] @l + [1] @m' + [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [0] >= [1] @base + [0] = @base transpose(@m) = [1] @m + [0] >= [1] @m + [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [1] @m + [0] >= [1] @m + [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [1] @m + [0] >= [0] = nil() transpose#2(tuple#2(@l,@m')) = [1] @l + [1] @m' + [0] >= [1] @l + [1] @m' + [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [1] @l + [1] @y + [1] @ys + [0] >= [1] @l + [1] @y + [1] @ys + [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [1] @l + [0] >= [0] = nil() Further, it can be verified that all rules not oriented are covered by the weightgap condition. **** Step 8.b:1.b:1.b:4: MI WORST_CASE(?,O(n^1)) + 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#(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/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: MI {miKind = Automaton Nothing, miDimension = 3, miUArgs = UArgs, miURules = URules, miSelector = Just any strict-rules} + Details: We apply a matrix interpretation of kind Automaton Nothing: 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) = [1] [0] [0] p(#abs) = [0 0 0] [0] [1 0 0] x_1 + [1] [1 0 0] [0] p(#add) = [0 0 0] [1] [0 0 1] x_2 + [0] [0 1 0] [1] p(#mult) = [1 0 0] [0 0 0] [0] [1 0 0] x_1 + [0 0 0] x_2 + [0] [0 0 0] [1 0 0] [0] p(#natmult) = [0 0 0] [0] [0 1 0] x_2 + [0] [1 0 1] [0] p(#neg) = [0] [0] [0] p(#pos) = [0] [0] [0] p(#pred) = [0 0 0] [0] [0 0 0] x_1 + [0] [0 1 0] [1] p(#s) = [0 1 0] [0] [0 0 0] x_1 + [0] [0 0 0] [0] p(#succ) = [0 1 0] [0] [0 0 0] x_1 + [0] [0 1 0] [1] p(*) = [0 0 1] [0] [0 1 0] x_2 + [1] [0 1 0] [0] p(+) = [0 1 1] [0 0 1] [1] [0 0 1] x_1 + [1 0 0] x_2 + [1] [1 0 1] [1 1 0] [0] p(::) = [0 0 0] [0 0 1] [1] [1 1 1] x_1 + [0 1 0] x_2 + [0] [0 0 0] [1 0 0] [0] p(attach) = [1 0 0] [0 0 0] [0] [1 1 1] x_1 + [0 1 0] x_2 + [0] [0 0 1] [0 0 0] [0] p(attach#1) = [1 0 0] [0 0 0] [0] [1 1 1] x_1 + [0 1 0] x_2 + [0] [0 0 1] [0 0 0] [0] p(attach#2) = [0 0 0] [0 0 0] [0 0 1] [1] [0 1 0] x_1 + [1 1 1] x_2 + [1 1 1] x_3 + [1] [0 0 0] [0 0 0] [1 0 0] [0] p(lineMult) = [0 0 0] [0] [0 0 0] x_1 + [0] [1 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) = [1 1 0] [1] [0 0 1] x_1 + [0] [1 1 0] [1] p(makeBase#1) = [0 1 0] [1] [0 0 0] x_1 + [0] [1 1 0] [1] p(matrixMult) = [0] [0] [0] p(matrixMult') = [0 0 0] [0] [0 1 0] x_2 + [0] [0 0 0] [0] p(matrixMult'#1) = [0 0 0] [0] [1 0 0] x_1 + [1] [0 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 1] [1] [0 0 0] x_1 + [0] [1 0 0] [0] p(mkBase#1) = [0 0 1] [1] [0 0 0] x_1 + [0] [1 0 0] [0] p(mult) = [1 1 0] [0] [1 0 0] x_2 + [1] [0 0 1] [0] p(mult#1) = [0 1 0] [0] [0 0 1] x_1 + [0] [0 1 0] [0] p(mult#2) = [0] [1] [0] p(nil) = [0] [0] [0] p(split) = [0 0 0] [0] [1 0 1] x_1 + [0] [0 1 0] [0] p(split#1) = [0 0 0] [0] [1 0 1] x_1 + [0] [0 1 0] [0] p(split#2) = [0 0 0] [0 0 0] [0] [0 0 0] x_1 + [1 0 1] x_2 + [1] [1 1 1] [0 1 0] [0] p(split#3) = [0 0 0] [0 0 0] [0 0 0] [0] [0 1 0] x_1 + [0 0 0] x_2 + [0 0 0] x_3 + [1] [0 0 1] [1 1 1] [1 1 1] [1] p(transAcc) = [0 1 0] [1 1 1] [0] [0 1 0] x_1 + [0 1 0] x_2 + [0] [1 1 0] [1 1 1] [0] p(transAcc#1) = [0 1 0] [1 1 0] [0] [0 1 0] x_1 + [0 1 0] x_2 + [0] [0 1 0] [1 1 1] [0] p(transpose) = [0 1 0] [0] [1 1 1] x_1 + [0] [0 1 0] [0] p(transpose#1) = [0 1 0] [0] [1 1 1] x_2 + [0] [0 1 0] [0] p(transpose#2) = [0 0 1] [0] [0 1 1] x_1 + [0] [0 0 1] [0] p(transpose#3) = [1 1 0] [0 0 0] [0] [1 1 1] x_1 + [1 1 1] x_2 + [0] [0 1 0] [0 0 0] [0] p(transpose') = [0] [0] [0] p(tuple#2) = [0 0 0] [0 0 0] [0] [1 0 1] x_1 + [0 0 0] x_2 + [0] [0 1 0] [1 1 1] [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 1 0] [1] [0 1 0] x_2 + [0] [0 0 0] [0] p(lineMult#1#) = [0 1 0] [1] [0 1 0] x_1 + [0] [0 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 1 1] [1] [1 1 1] x_2 + [0] [0 0 1] [0] p(matrixMult'#) = [0 1 0] [1] [0 1 0] x_2 + [0] [0 0 0] [0] p(matrixMult'#1#) = [0 1 0] [1] [0 1 0] x_2 + [0] [0 0 0] [0] p(matrixMult3#) = [0 0 0] [0 1 1] [1] [1 0 0] x_1 + [1 1 1] x_3 + [0] [0 0 0] [0 1 1] [0] p(matrixMultList#) = [0 1 0] [1] [0 1 0] x_2 + [1] [0 1 0] [0] p(matrixMultList#1#) = [0 1 0] [1] [0 1 0] x_1 + [1] [0 1 0] [0] p(matrixMultOld#) = [0 1 1] [1 1 1] [1] [0 0 0] x_1 + [1 1 1] x_2 + [1] [0 0 0] [0 0 0] [0] p(mkBase#) = [0] [0] [0] p(mkBase#1#) = [0] [0] [0] p(mult#) = [1 0 1] [1] [0 1 0] x_2 + [0] [0 0 0] [0] p(mult#1#) = [1 0 1] [0] [0 0 0] x_2 + [1] [0 0 0] [1] p(mult#2#) = [1 0 1] [0] [0 1 0] x_1 + [0] [0 1 0] [0] p(split#) = [0] [0] [0] p(split#1#) = [0] [0] [0] p(split#2#) = [0] [0] [0] p(split#3#) = [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(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) = [0] [0] [0] p(c_31) = [0] [0] [0] p(c_32) = [0] [0] [0] p(c_33) = [0] [0] [0] p(c_34) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 0] [0] p(c_35) = [1 0 0] [0] [0 0 0] x_1 + [0] [0 0 0] [1] p(c_36) = [0] [0] [0] p(c_37) = [1 0 0] [0] [0 1 0] x_1 + [0] [0 0 0] [0] p(c_38) = [0] [0] [0] p(c_39) = [0] [0] [0] p(c_40) = [0] [0] [0] p(c_41) = [0] [0] [0] p(c_42) = [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) = [0] [0] [0] p(c_49) = [0] [0] [0] p(c_50) = [0] [0] [0] p(c_51) = [0] [0] [0] p(c_52) = [0] [0] [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: mult#(@l1,@l2) = [1 0 1] [1] [0 1 0] @l2 + [0] [0 0 0] [0] > [1 0 1] [0] [0 0 0] @l2 + [0] [0 0 0] [0] = c_34(mult#1#(@l1,@l2)) Following rules are (at-least) weakly oriented: lineMult#(@l,@m2) = [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] >= [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] = lineMult#1#(@m2,@l) lineMult#1#(::(@x,@xs),@l) = [1 1 1] [0 1 0] [1] [1 1 1] @x + [0 1 0] @xs + [0] [0 0 0] [0 0 0] [0] >= [0 1 0] [1] [0 1 0] @xs + [0] [0 0 0] [0] = lineMult#(@l,@xs) lineMult#1#(::(@x,@xs),@l) = [1 1 1] [0 1 0] [1] [1 1 1] @x + [0 1 0] @xs + [0] [0 0 0] [0 0 0] [0] >= [1 0 1] [1] [0 1 0] @x + [0] [0 0 0] [0] = mult#(@l,@x) matrixMult#(@m1,@m2) = [0 1 1] [1] [1 1 1] @m2 + [0] [0 0 1] [0] >= [0 1 1] [1] [0 1 1] @m2 + [0] [0 0 0] [0] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'#(@m1,@m2) = [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] >= [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] >= [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] >= [0 1 0] [1] [0 1 0] @m2 + [0] [0 0 0] [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [0 0 0] [0 1 1] [1] [1 0 0] @m1 + [1 1 1] @m3 + [0] [0 0 0] [0 1 1] [0] >= [0 1 1] [1] [1 1 1] @m3 + [0] [0 0 1] [0] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [0 1 0] [1] [0 1 0] @mm + [1] [0 1 0] [0] >= [0 1 0] [1] [0 1 0] @mm + [1] [0 1 0] [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1 1 1] [0 1 0] [1] [1 1 1] @m + [0 1 0] @ms + [1] [1 1 1] [0 1 0] [0] >= [0 1 1] [1] [1 1 1] @m + [0] [0 0 1] [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1 1 1] [0 1 0] [1] [1 1 1] @m + [0 1 0] @ms + [1] [1 1 1] [0 1 0] [0] >= [0 1 0] [1] [0 1 0] @ms + [1] [0 1 0] [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [0 1 1] [1 1 1] [1] [0 0 0] @m1 + [1 1 1] @m2 + [1] [0 0 0] [0 0 0] [0] >= [1 1 1] [1] [1 1 1] @m2 + [0] [0 0 0] [0] = matrixMult'#(@m1,transpose(@m2)) mult#1#(::(@x,@xs),@l2) = [1 0 1] [0] [0 0 0] @l2 + [1] [0 0 0] [1] >= [1 0 1] [0] [0 0 0] @l2 + [0] [0 0 0] [1] = c_35(mult#2#(@l2,@x,@xs)) mult#2#(::(@y,@ys),@x,@xs) = [0 0 0] [1 0 1] [1] [1 1 1] @y + [0 1 0] @ys + [0] [1 1 1] [0 1 0] [0] >= [1 0 1] [1] [0 1 0] @ys + [0] [0 0 0] [0] = c_37(mult#(@xs,@ys)) attach(@line,@m) = [1 0 0] [0 0 0] [0] [1 1 1] @line + [0 1 0] @m + [0] [0 0 1] [0 0 0] [0] >= [1 0 0] [0 0 0] [0] [1 1 1] @line + [0 1 0] @m + [0] [0 0 1] [0 0 0] [0] = attach#1(@line,@m) attach#1(::(@x,@xs),@m) = [0 0 0] [0 0 0] [0 0 1] [1] [0 1 0] @m + [1 1 1] @x + [1 1 1] @xs + [1] [0 0 0] [0 0 0] [1 0 0] [0] >= [0 0 0] [0 0 0] [0 0 1] [1] [0 1 0] @m + [1 1 1] @x + [1 1 1] @xs + [1] [0 0 0] [0 0 0] [1 0 0] [0] = attach#2(@m,@x,@xs) attach#1(nil(),@m) = [0 0 0] [0] [0 1 0] @m + [0] [0 0 0] [0] >= [0] [0] [0] = nil() attach#2(::(@l,@ls),@x,@xs) = [0 0 0] [0 0 0] [0 0 0] [0 0 1] [1] [1 1 1] @l + [0 1 0] @ls + [1 1 1] @x + [1 1 1] @xs + [1] [0 0 0] [0 0 0] [0 0 0] [1 0 0] [0] >= [0 0 0] [0 0 0] [0 0 0] [0 0 1] [1] [1 1 1] @l + [0 1 0] @ls + [1 1 1] @x + [1 1 1] @xs + [1] [0 0 0] [0 0 0] [0 0 0] [1 0 0] [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [0 0 0] [0 0 1] [1] [1 1 1] @x + [1 1 1] @xs + [1] [0 0 0] [1 0 0] [0] >= [0] [0] [0] = nil() makeBase(@m) = [1 1 0] [1] [0 0 1] @m + [0] [1 1 0] [1] >= [0 1 0] [1] [0 0 0] @m + [0] [1 1 0] [1] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [1 1 1] [0 1 0] [1] [0 0 0] @l + [0 0 0] @m' + [0] [1 1 1] [0 1 1] [2] >= [0 0 1] [1] [0 0 0] @l + [0] [1 0 0] [0] = mkBase(@l) makeBase#1(nil()) = [1] [0] [1] >= [0] [0] [0] = nil() mkBase(@m) = [0 0 1] [1] [0 0 0] @m + [0] [1 0 0] [0] >= [0 0 1] [1] [0 0 0] @m + [0] [1 0 0] [0] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [1 0 0] [1] [0 0 0] @m' + [0] [0 0 1] [1] >= [1 0 0] [1] [0 0 0] @m' + [0] [0 0 1] [1] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [1] [0] [0] >= [0] [0] [0] = nil() split(@m) = [0 0 0] [0] [1 0 1] @m + [0] [0 1 0] [0] >= [0 0 0] [0] [1 0 1] @m + [0] [0 1 0] [0] = split#1(@m) split#1(::(@l,@ls)) = [0 0 0] [0 0 0] [0] [0 0 0] @l + [1 0 1] @ls + [1] [1 1 1] [0 1 0] [0] >= [0 0 0] [0 0 0] [0] [0 0 0] @l + [1 0 1] @ls + [1] [1 1 1] [0 1 0] [0] = split#2(@l,@ls) split#1(nil()) = [0] [0] [0] >= [0] [0] [0] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [0 0 0] [0 0 0] [0 0 0] [0] [1 0 1] @ls + [0 0 0] @x + [0 0 0] @xs + [1] [0 1 0] [1 1 1] [1 1 1] [1] >= [0 0 0] [0 0 0] [0 0 0] [0] [1 0 1] @ls + [0 0 0] @x + [0 0 0] @xs + [1] [0 1 0] [1 1 1] [1 1 1] [1] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [0 0 0] [0] [1 0 1] @ls + [1] [0 1 0] [0] >= [0] [0] [0] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [0 0 0] @m' + [0 0 0] @x + [0 0 0] @xs + [1 0 1] @ys + [1] [1 1 1] [1 1 1] [1 1 1] [0 1 0] [1] >= [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [0 0 0] @m' + [0 0 0] @x + [0 0 0] @xs + [1 0 1] @ys + [1] [1 1 1] [1 1 1] [1 1 1] [0 1 0] [1] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1 1 1] [0 1 0] [0] [0 1 0] @base + [0 1 0] @m + [0] [1 1 1] [1 1 0] [0] >= [1 1 0] [0 1 0] [0] [0 1 0] @base + [0 1 0] @m + [0] [1 1 1] [0 1 0] [0] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1 1 0] [1 1 1] [0 1 0] [0] [0 1 0] @base + [1 1 1] @l + [0 1 0] @m' + [0] [1 1 1] [1 1 1] [0 1 0] [0] >= [0 0 0] [1 0 0] [0 0 0] [0] [0 1 0] @base + [1 1 1] @l + [0 1 0] @m' + [0] [0 0 0] [0 0 1] [0 0 0] [0] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1 1 0] [0] [0 1 0] @base + [0] [1 1 1] [0] >= [1 0 0] [0] [0 1 0] @base + [0] [0 0 1] [0] = @base transpose(@m) = [0 1 0] [0] [1 1 1] @m + [0] [0 1 0] [0] >= [0 1 0] [0] [1 1 1] @m + [0] [0 1 0] [0] = transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) = [0 1 0] [0] [1 1 1] @m + [0] [0 1 0] [0] >= [0 1 0] [0] [1 1 1] @m + [0] [0 1 0] [0] = transpose#2(split(@m)) transpose#1(nil(),@m) = [0 1 0] [0] [1 1 1] @m + [0] [0 1 0] [0] >= [0] [0] [0] = nil() transpose#2(tuple#2(@l,@m')) = [0 1 0] [1 1 1] [0] [1 1 1] @l + [1 1 1] @m' + [0] [0 1 0] [1 1 1] [0] >= [0 0 0] [1 1 0] [0] [1 1 1] @l + [1 1 1] @m' + [0] [0 0 0] [0 1 0] [0] = transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) = [0 0 0] [1 1 1] [0 1 1] [1] [1 1 1] @l + [1 1 1] @y + [1 1 1] @ys + [1] [0 0 0] [1 1 1] [0 1 0] [0] >= [0 0 0] [1 1 1] [0 1 0] [1] [1 1 1] @l + [1 1 1] @y + [1 1 1] @ys + [1] [0 0 0] [1 1 1] [0 1 0] [0] = ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) = [0 0 0] [0] [1 1 1] @l + [0] [0 0 0] [0] >= [0] [0] [0] = nil() **** Step 8.b:1.b:1.b:5: EmptyProcessor 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#(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/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: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). WORST_CASE(?,O(n^4))