WORST_CASE(?,O(n^7)) * Step 1: DependencyPairs WORST_CASE(?,O(n^7)) + 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 2: PredecessorEstimation WORST_CASE(?,O(n^7)) + 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 3: PredecessorEstimation WORST_CASE(?,O(n^7)) + 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 4: RemoveWeakSuffixes WORST_CASE(?,O(n^7)) + 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 5: SimplifyRHS WORST_CASE(?,O(n^7)) + 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 6: UsableRules WORST_CASE(?,O(n^7)) + 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 7: DecomposeDG WORST_CASE(?,O(n^7)) + 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 7.a:1: PredecessorEstimation WORST_CASE(?,O(n^2)) + 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 7.a:2: RemoveWeakSuffixes WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m)) matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2)) 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 7.a:3: SimplifyRHS WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms),matrixMult#(@acc,@m)) matrixMultOld#(@m1,@m2) -> c_30(matrixMult'#(@m1,transpose(@m2)),transpose#(@m2)) 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 7.a:4: UsableRules WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2)) 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 7.a:5: RemoveHeads WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) matrixMultOld#(@m1,@m2) -> c_30(transpose#(@m2)) 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 7.a:6: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) 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) = [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) = [0] p(m2) = [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [1] p(makeBase#1) = [1] p(matrixMult) = [1] x1 + [3] x2 + [2] p(matrixMult') = [1] x2 + [1] p(matrixMult'#1) = [1] x2 + [1] p(matrixMult3) = [0] p(matrixMultList) = [0] p(matrixMultList#1) = [0] p(matrixMultOld) = [0] p(mkBase) = [0] p(mkBase#1) = [0] p(mult) = [0] p(mult#1) = [0] p(mult#2) = [0] p(nil) = [0] p(split) = [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [1] x1 + [0] p(transAcc) = [2] x1 + [1] x2 + [0] p(transAcc#1) = [2] x1 + [1] x2 + [0] p(transpose) = [2] x1 + [0] p(transpose#1) = [1] p(transpose#2) = [1] p(transpose#3) = [1] x2 + [4] p(transpose') = [1] x1 + [2] 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#) = [2] p(lineMult#1#) = [0] p(m1#) = [0] p(m2#) = [0] p(m3#) = [0] p(m4#) = [0] p(makeBase#) = [0] p(makeBase#1#) = [2] p(matrixMult#) = [0] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [2] x1 + [0] p(matrixMultList#) = [1] x1 + [3] x2 + [1] p(matrixMultList#1#) = [3] x1 + [1] x2 + [2] p(matrixMultOld#) = [0] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [0] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [0] p(transpose#) = [7] p(transpose#1#) = [2] p(transpose#2#) = [1] x1 + [5] p(transpose#3#) = [5] 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] 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] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [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 + [7] p(c_52) = [1] x1 + [0] p(c_53) = [0] p(c_54) = [2] x1 + [2] x2 + [0] p(c_55) = [0] p(c_56) = [1] x1 + [0] p(c_57) = [2] x1 + [1] x2 + [1] p(c_58) = [0] p(c_59) = [4] x1 + [4] x2 + [1] p(c_60) = [4] p(c_61) = [1] p(c_62) = [2] p(c_63) = [2] p(c_64) = [1] p(c_65) = [1] x1 + [1] p(c_66) = [1] p(c_67) = [4] x1 + [0] p(c_68) = [2] p(c_69) = [2] p(c_70) = [1] x1 + [1] p(c_71) = [2] p(c_72) = [2] p(c_73) = [0] p(c_74) = [1] p(c_75) = [0] p(c_76) = [2] p(c_77) = [0] p(c_78) = [1] Following rules are strictly oriented: transpose#(@m) = [7] > [2] = c_48(transpose#1#(@m,@m)) Following rules are (at-least) weakly oriented: matrixMultList#(@acc,@mm) = [1] @acc + [3] @mm + [1] >= [1] @acc + [3] @mm + [2] = c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [2] >= [1] @acc + [3] @m + [3] @ms + [3] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#1#(::(@xs,@xss),@m) = [2] >= [9] = c_49(transpose#2#(split(@m))) transpose#2#(tuple#2(@l,@m')) = [5] >= [12] = c_51(transpose#3#(@m',@l)) transpose#3#(::(@y,@ys),@l) = [5] >= [7] = 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) = [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) = [1] >= [1] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [1] >= [0] = mkBase(@l) makeBase#1(nil()) = [1] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m1 + [3] @m2 + [2] >= [2] @m2 + [2] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [1] >= [1] @m2 + [1] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [1] >= [1] @m2 + [1] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [1] >= [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 + [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 Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:7: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) 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 DPs: transpose#(@m) -> c_48(transpose#1#(@m,@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 - Signature: {#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2 ,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2 ,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2 ,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2 ,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1 ,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2 ,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1 ,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2 ,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1 ,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/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) = [2] x1 + [1] x2 + [0] p(attach#1) = [2] x1 + [1] x2 + [0] p(attach#2) = [1] x1 + [1] x2 + [2] x3 + [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) = [1] p(matrixMult) = [1] x1 + [3] x2 + [7] p(matrixMult') = [1] x2 + [1] p(matrixMult'#1) = [1] x2 + [1] p(matrixMult3) = [0] p(matrixMultList) = [0] p(matrixMultList#1) = [0] p(matrixMultOld) = [0] p(mkBase) = [1] p(mkBase#1) = [1] 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] x3 + [0] p(transAcc) = [2] x1 + [1] x2 + [4] p(transAcc#1) = [2] x1 + [1] x2 + [4] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [0] p(transpose') = [0] p(tuple#2) = [1] x2 + [0] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(attach#) = [2] x2 + [0] p(attach#1#) = [0] p(attach#2#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(m1#) = [0] p(m2#) = [0] p(m3#) = [0] p(m4#) = [0] p(makeBase#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [0] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [2] x3 + [0] p(matrixMultList#) = [1] x1 + [3] x2 + [0] p(matrixMultList#1#) = [3] x1 + [1] x2 + [1] p(matrixMultOld#) = [0] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [0] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [1] x1 + [1] x2 + [0] p(transpose#) = [1] x1 + [6] p(transpose#1#) = [1] x2 + [6] p(transpose#2#) = [1] x1 + [4] p(transpose#3#) = [1] x1 + [2] p(transpose'#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [2] x1 + [0] p(c_18) = [2] x3 + [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [1] p(c_22) = [2] x2 + [1] x3 + [1] p(c_23) = [4] x1 + [1] p(c_24) = [0] p(c_25) = [0] p(c_26) = [1] p(c_27) = [1] x1 + [2] 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) = [2] 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] x2 + [0] p(c_47) = [1] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [2] p(c_53) = [1] p(c_54) = [1] x1 + [1] x2 + [1] p(c_55) = [2] p(c_56) = [0] p(c_57) = [2] x1 + [1] p(c_58) = [1] x1 + [0] p(c_59) = [1] x2 + [0] p(c_60) = [2] p(c_61) = [0] p(c_62) = [4] p(c_63) = [2] p(c_64) = [1] p(c_65) = [1] x1 + [1] p(c_66) = [1] p(c_67) = [4] x1 + [0] p(c_68) = [1] p(c_69) = [2] p(c_70) = [1] x1 + [1] x2 + [1] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [1] p(c_75) = [0] p(c_76) = [1] p(c_77) = [0] p(c_78) = [0] Following rules are strictly oriented: transpose#1#(::(@xs,@xss),@m) = [1] @m + [6] > [1] @m + [4] = c_49(transpose#2#(split(@m))) transpose#2#(tuple#2(@l,@m')) = [1] @m' + [4] > [1] @m' + [2] = c_51(transpose#3#(@m',@l)) Following rules are (at-least) weakly oriented: matrixMultList#(@acc,@mm) = [1] @acc + [3] @mm + [0] >= [1] @acc + [3] @mm + [3] = c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [1] >= [1] @acc + [3] @m + [3] @ms + [7] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#(@m) = [1] @m + [6] >= [1] @m + [6] = c_48(transpose#1#(@m,@m)) transpose#3#(::(@y,@ys),@l) = [1] @y + [1] @ys + [2] >= [1] @y + [1] @ys + [8] = 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) = [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 + [1] @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 + [1] @x + [2] @xs + [0] >= [1] @l + [1] @ls + [1] @x + [2] @xs + [0] = ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) = [1] @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) = [1] >= [1] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [1] >= [1] = mkBase(@l) makeBase#1(nil()) = [1] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m1 + [3] @m2 + [7] >= [2] @m2 + [6] = matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) = [1] @m2 + [1] >= [1] @m2 + [1] = matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) = [1] @m2 + [1] >= [1] @m2 + [1] = ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) = [1] @m2 + [1] >= [0] = nil() mkBase(@m) = [1] >= [1] = mkBase#1(@m) mkBase#1(::(@l,@m')) = [1] >= [1] = ::(nil(),mkBase(@m')) mkBase#1(nil()) = [1] >= [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] @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] @xs + [0] >= [1] @m' + [1] @xs + [0] = tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) = [1] @base + [2] @m + [4] >= [1] @base + [2] @m + [4] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [4] >= [1] @base + [2] @l + [2] @m' + [4] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [4] >= [1] @base + [0] = @base Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:8: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))) - Weak DPs: 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 TRS: #abs(#0()) -> #0() #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) attach(@line,@m) -> attach#1(@line,@m) attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs) attach#1(nil(),@m) -> nil() attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) -> nil() lineMult(@l,@m2) -> lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) -> nil() makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l,@m')) -> mkBase(@l) makeBase#1(nil()) -> nil() matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) -> nil() mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m')) mkBase#1(nil()) -> nil() mult(@l1,@l2) -> mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs) 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) = [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [3] x1 + [4] p(makeBase#1) = [1] x1 + [0] p(matrixMult) = [7] x2 + [5] 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) = [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [1] x1 + [0] p(transAcc) = [4] x1 + [1] x2 + [1] p(transAcc#1) = [4] x1 + [1] x2 + [1] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [1] x2 + [0] p(transpose') = [4] x1 + [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 + [7] x2 + [1] p(matrixMultList#1#) = [7] x1 + [1] x2 + [0] p(matrixMultOld#) = [0] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [2] x3 + [0] p(split#) = [1] x1 + [2] p(split#1#) = [0] p(split#2#) = [2] p(split#3#) = [2] x3 + [0] p(transAcc#) = [1] x1 + [0] p(transAcc#1#) = [4] x2 + [1] p(transpose#) = [7] p(transpose#1#) = [7] p(transpose#2#) = [1] x1 + [4] 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) = [2] p(c_11) = [1] p(c_12) = [0] p(c_13) = [2] x2 + [1] p(c_14) = [2] p(c_15) = [1] x1 + [1] x5 + [1] p(c_16) = [2] x2 + [1] x3 + [1] x5 + [1] x6 + [1] p(c_17) = [4] x6 + [1] x7 + [2] x8 + [0] p(c_18) = [1] x3 + [2] x4 + [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [1] p(c_21) = [1] p(c_22) = [1] x1 + [4] p(c_23) = [1] x1 + [0] p(c_24) = [4] x1 + [4] x2 + [1] p(c_25) = [4] p(c_26) = [1] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [1] p(c_29) = [0] p(c_30) = [1] x1 + [1] p(c_31) = [1] p(c_32) = [1] x1 + [0] p(c_33) = [0] p(c_34) = [2] x1 + [2] p(c_35) = [1] x1 + [4] p(c_36) = [1] x1 + [0] p(c_37) = [4] x1 + [4] p(c_38) = [2] x1 + [0] p(c_39) = [1] x1 + [2] p(c_40) = [1] p(c_41) = [1] p(c_42) = [4] x1 + [1] p(c_43) = [1] p(c_44) = [0] p(c_45) = [4] p(c_46) = [1] x1 + [1] x2 + [1] p(c_47) = [1] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [2] p(c_50) = [1] p(c_51) = [1] x1 + [4] p(c_52) = [1] x1 + [0] p(c_53) = [0] p(c_54) = [1] x1 + [4] x2 + [4] p(c_55) = [0] p(c_56) = [0] p(c_57) = [1] x2 + [2] p(c_58) = [2] x1 + [0] p(c_59) = [4] x1 + [1] p(c_60) = [1] p(c_61) = [0] p(c_62) = [0] p(c_63) = [2] p(c_64) = [4] x1 + [4] p(c_65) = [2] x1 + [1] p(c_66) = [2] p(c_67) = [4] x1 + [0] p(c_68) = [4] x1 + [1] p(c_69) = [2] p(c_70) = [1] x2 + [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [2] p(c_74) = [0] p(c_75) = [4] p(c_76) = [1] p(c_77) = [1] p(c_78) = [0] Following rules are strictly oriented: matrixMultList#(@acc,@mm) = [1] @acc + [7] @mm + [1] > [1] @acc + [7] @mm + [0] = c_27(matrixMultList#1#(@mm,@acc)) Following rules are (at-least) weakly oriented: matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [7] @m + [7] @ms + [0] >= [7] @m + [7] @ms + [7] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#(@m) = [7] >= [7] = c_48(transpose#1#(@m,@m)) transpose#1#(::(@xs,@xss),@m) = [7] >= [6] = c_49(transpose#2#(split(@m))) transpose#2#(tuple#2(@l,@m')) = [4] >= [4] = c_51(transpose#3#(@m',@l)) transpose#3#(::(@y,@ys),@l) = [0] >= [7] = 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) = [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) = [3] @m + [4] >= [1] @m + [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [1] @l + [1] @m' + [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [7] @m2 + [5] >= [7] @m2 + [5] = 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) = [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 + [1] >= [1] @base + [4] @m + [1] = transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) = [1] @base + [4] @l + [4] @m' + [1] >= [1] @base + [1] @l + [4] @m' + [1] = attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) = [1] @base + [1] >= [1] @base + [0] = @base Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 7.a:9: NaturalMI WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))) - Weak DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) 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 TRS: #abs(#0()) -> #0() #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) attach(@line,@m) -> attach#1(@line,@m) attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs) attach#1(nil(),@m) -> nil() attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) -> nil() lineMult(@l,@m2) -> lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) -> nil() makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l,@m')) -> mkBase(@l) makeBase#1(nil()) -> nil() matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) -> nil() mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m')) mkBase#1(nil()) -> nil() mult(@l1,@l2) -> mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs) 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) = [3] p(#abs) = [0] p(#add) = [1] x1 + [6] p(#mult) = [1] x1 + [1] x2 + [1] p(#natmult) = [2] x2 + [0] p(#neg) = [1] x1 + [7] p(#pos) = [1] x1 + [0] p(#pred) = [0] p(#s) = [2] p(#succ) = [1] x1 + [3] p(*) = [0] p(+) = [0] p(::) = [1] x2 + [1] p(attach) = [5] x2 + [0] p(attach#1) = [0] p(attach#2) = [0] p(lineMult) = [2] x1 + [3] p(lineMult#1) = [7] p(m1) = [0] p(m2) = [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [1] x1 + [1] p(makeBase#1) = [0] p(matrixMult) = [0] p(matrixMult') = [1] p(matrixMult'#1) = [0] p(matrixMult3) = [0] p(matrixMultList) = [0] p(matrixMultList#1) = [0] p(matrixMultOld) = [0] p(mkBase) = [0] p(mkBase#1) = [6] x1 + [3] p(mult) = [0] p(mult#1) = [5] p(mult#2) = [0] p(nil) = [0] p(split) = [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [1] x1 + [2] p(transAcc) = [3] p(transAcc#1) = [0] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [0] p(transpose') = [0] p(tuple#2) = [2] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(attach#) = [0] p(attach#1#) = [0] p(attach#2#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(m1#) = [0] p(m2#) = [0] p(m3#) = [0] p(m4#) = [0] p(makeBase#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [0] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [0] p(matrixMultList#) = [4] x2 + [0] p(matrixMultList#1#) = [4] x1 + [0] p(matrixMultOld#) = [0] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [0] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [0] p(transpose'#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [1] x1 + [4] x2 + [0] p(c_23) = [4] x1 + [0] p(c_24) = [4] x1 + [0] p(c_25) = [0] p(c_26) = [4] x1 + [2] x2 + [1] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [3] p(c_29) = [1] p(c_30) = [0] p(c_31) = [0] 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) = [1] x1 + [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [4] 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) = [4] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [2] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [2] x1 + [0] p(c_57) = [0] p(c_58) = [2] p(c_59) = [1] x1 + [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [1] x1 + [0] p(c_68) = [2] 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) = [4] @ms + [4] > [4] @ms + [3] = c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) Following rules are (at-least) weakly oriented: matrixMultList#(@acc,@mm) = [4] @mm + [0] >= [4] @mm + [0] = 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 7.a:10: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))) - Weak DPs: matrixMultList#(@acc,@mm) -> c_27(matrixMultList#1#(@mm,@acc)) matrixMultList#1#(::(@m,@ms),@acc) -> c_28(matrixMultList#(matrixMult(@acc,@m),@ms)) 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 TRS: #abs(#0()) -> #0() #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) attach(@line,@m) -> attach#1(@line,@m) attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs) attach#1(nil(),@m) -> nil() attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) -> nil() lineMult(@l,@m2) -> lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) -> nil() makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l,@m')) -> mkBase(@l) makeBase#1(nil()) -> nil() matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) -> nil() mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m')) mkBase#1(nil()) -> nil() mult(@l1,@l2) -> mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs) 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: Ara {araHeuristics = NoHeuristics, minDegree = 2, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(3, 3) #0 :: [] -(0)-> "A"(0, 1) #0 :: [] -(0)-> "A"(0, 0) #0 :: [] -(0)-> "A"(15, 15) #0 :: [] -(0)-> "A"(4, 5) #0 :: [] -(0)-> "A"(12, 7) #0 :: [] -(0)-> "A"(14, 13) #0 :: [] -(0)-> "A"(14, 12) #0 :: [] -(0)-> "A"(12, 10) #0 :: [] -(0)-> "A"(14, 14) #abs :: ["A"(3, 3)] -(0)-> "A"(12, 15) #add :: ["A"(0, 1) x "A"(10, 1)] -(0)-> "A"(10, 1) #mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(2, 2) #natmult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(10, 1) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 1) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #neg :: ["A"(3, 0)] -(0)-> "A"(3, 2) #neg :: ["A"(6, 0)] -(0)-> "A"(6, 8) #neg :: ["A"(10, 0)] -(0)-> "A"(10, 1) #neg :: ["A"(10, 0)] -(0)-> "A"(10, 15) #neg :: ["A"(12, 0)] -(0)-> "A"(12, 12) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 1) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(3, 0)] -(0)-> "A"(3, 2) #pos :: ["A"(15, 0)] -(0)-> "A"(15, 6) #pos :: ["A"(9, 0)] -(0)-> "A"(9, 3) #pos :: ["A"(8, 0)] -(0)-> "A"(8, 7) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 9) #pos :: ["A"(10, 0)] -(0)-> "A"(10, 7) #pos :: ["A"(13, 0)] -(0)-> "A"(13, 13) #pos :: ["A"(10, 0)] -(0)-> "A"(10, 11) #pred :: ["A"(0, 0)] -(0)-> "A"(10, 1) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(3, 0) #s :: ["A"(0, 0)] -(0)-> "A"(15, 0) #s :: ["A"(10, 0)] -(0)-> "A"(10, 10) #s :: ["A"(1, 0)] -(0)-> "A"(10, 1) #s :: ["A"(0, 0)] -(0)-> "A"(1, 0) #s :: ["A"(0, 0)] -(0)-> "A"(14, 0) #s :: ["A"(6, 0)] -(0)-> "A"(13, 6) #s :: ["A"(0, 0)] -(0)-> "A"(12, 0) #succ :: ["A"(0, 0)] -(0)-> "A"(10, 4) * :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(2, 2) + :: ["A"(2, 2) x "A"(10, 1)] -(0)-> "A"(10, 1) :: :: ["A"(3, 0) x "A"(11, 3)] -(11)-> "A"(11, 3) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(0, 0) x "A"(3, 0)] -(3)-> "A"(3, 0) :: :: ["A"(0, 0) x "A"(13, 0)] -(13)-> "A"(13, 0) :: :: ["A"(3, 0) x "A"(9, 3)] -(9)-> "A"(9, 3) :: :: ["A"(12, 0) x "A"(15, 12)] -(15)-> "A"(15, 12) :: :: ["A"(4, 0) x "A"(0, 4)] -(0)-> "A"(0, 4) attach :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) attach#1 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) attach#2 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) lineMult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) lineMult#1 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) makeBase :: ["A"(5, 0)] -(7)-> "A"(0, 4) makeBase#1 :: ["A"(3, 0)] -(5)-> "A"(0, 4) matrixMult :: ["A"(13, 0) x "A"(12, 0)] -(14)-> "A"(13, 0) matrixMult' :: ["A"(13, 0) x "A"(0, 0)] -(0)-> "A"(13, 0) matrixMult'#1 :: ["A"(13, 0) x "A"(0, 0)] -(0)-> "A"(13, 0) mkBase :: ["A"(0, 0)] -(6)-> "A"(0, 4) mkBase#1 :: ["A"(0, 0)] -(6)-> "A"(0, 4) mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(10, 1) mult#1 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(10, 1) mult#2 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(10, 1) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(3, 0) nil :: [] -(0)-> "A"(13, 0) nil :: [] -(0)-> "A"(9, 3) nil :: [] -(0)-> "A"(7, 7) nil :: [] -(0)-> "A"(7, 11) nil :: [] -(0)-> "A"(15, 7) nil :: [] -(0)-> "A"(11, 13) nil :: [] -(0)-> "A"(7, 13) nil :: [] -(0)-> "A"(15, 15) nil :: [] -(0)-> "A"(7, 12) nil :: [] -(0)-> "A"(15, 12) split :: ["A"(9, 3)] -(4)-> "A"(11, 3) split#1 :: ["A"(9, 3)] -(4)-> "A"(11, 3) split#2 :: ["A"(3, 0) x "A"(9, 3)] -(13)-> "A"(11, 3) split#3 :: ["A"(11, 3) x "A"(0, 0) x "A"(3, 0)] -(12)-> "A"(11, 3) transAcc :: ["A"(0, 0) x "A"(0, 2)] -(1)-> "A"(0, 0) transAcc#1 :: ["A"(0, 0) x "A"(0, 2)] -(1)-> "A"(0, 0) tuple#2 :: ["A"(0, 0) x "A"(11, 3)] -(3)-> "A"(11, 3) tuple#2 :: ["A"(0, 0) x "A"(12, 4)] -(4)-> "A"(12, 4) tuple#2 :: ["A"(0, 0) x "A"(12, 8)] -(8)-> "A"(12, 8) matrixMultList# :: ["A"(13, 0) x "A"(15, 12)] -(1)-> "A"(1, 8) matrixMultList#1# :: ["A"(15, 12) x "A"(13, 0)] -(1)-> "A"(13, 1) transpose# :: ["A"(9, 3)] -(4)-> "A"(13, 1) transpose#1# :: ["A"(0, 0) x "A"(9, 3)] -(4)-> "A"(14, 1) transpose#2# :: ["A"(11, 3)] -(0)-> "A"(13, 5) transpose#3# :: ["A"(11, 3) x "A"(0, 0)] -(3)-> "A"(0, 1) c_27 :: ["A"(1, 0)] -(0)-> "A"(1, 10) c_28 :: ["A"(0, 3)] -(0)-> "A"(13, 3) c_48 :: ["A"(14, 0)] -(0)-> "A"(13, 1) c_49 :: ["A"(0, 0)] -(0)-> "A"(14, 6) c_51 :: ["A"(0, 0)] -(0)-> "A"(13, 13) c_52 :: ["A"(0, 0)] -(0)-> "A"(0, 3) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(0) "#neg_A" :: ["A"(0)] -(0)-> "A"(0) "#pos_A" :: ["A"(0)] -(0)-> "A"(0) "#s_A" :: ["A"(0)] -(0)-> "A"(0) "::_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) "c_27_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_27_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_28_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_28_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_48_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_48_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_49_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_49_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_51_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_51_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_52_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_52_A" :: ["A"(0)] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: transpose#3#(::(@y,@ys),@l) -> c_52(transpose#(::(@y,@ys))) 2. Weak: ** Step 7.b:1: DecomposeDG WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: attach#(@line,@m) -> c_7(attach#1#(@line,@m)) attach#1#(::(@x,@xs),@m) -> c_8(attach#2#(@m,@x,@xs)) attach#2#(::(@l,@ls),@x,@xs) -> c_10(attach#(@xs,@ls)) lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) lineMult#1#(::(@x,@xs),@l) -> c_13(mult#(@l,@x),lineMult#(@l,@xs)) makeBase#(@m) -> c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)) matrixMult#(@m1,@m2) -> c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) ,transAcc#(@m2,makeBase(@m2)) ,makeBase#(@m2)) matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) -> c_24(lineMult#(@l,@m2),matrixMult'#(@ls,@m2)) 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 7.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 7.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 7.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) = [0] p(makeBase#1) = [0] p(matrixMult) = [1] x1 + [2] x2 + [0] p(matrixMult') = [1] x1 + [1] x2 + [0] p(matrixMult'#1) = [1] x1 + [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#) = [4] x1 + [2] x2 + [2] p(lineMult#1#) = [2] x1 + [1] x2 + [1] p(m1#) = [1] x1 + [0] p(m2#) = [0] p(m3#) = [0] p(m4#) = [1] p(makeBase#) = [2] x1 + [0] p(makeBase#1#) = [0] p(matrixMult#) = [1] x1 + [4] x2 + [0] p(matrixMult'#) = [1] x2 + [2] p(matrixMult'#1#) = [1] x2 + [0] p(matrixMult3#) = [4] x1 + [3] x2 + [5] x3 + [0] p(matrixMultList#) = [1] x1 + [5] x2 + [3] p(matrixMultList#1#) = [5] x1 + [1] x2 + [3] p(matrixMultOld#) = [1] x1 + [1] x2 + [2] p(mkBase#) = [2] p(mkBase#1#) = [4] p(mult#) = [1] p(mult#1#) = [1] x1 + [2] x2 + [1] p(mult#2#) = [4] x2 + [4] x3 + [0] p(split#) = [0] p(split#1#) = [1] p(split#2#) = [0] p(split#3#) = [1] x2 + [1] x3 + [0] p(transAcc#) = [1] x2 + [6] 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'#) = [2] x1 + [7] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [2] x1 + [0] p(c_6) = [1] p(c_7) = [0] p(c_8) = [1] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [4] x1 + [0] p(c_13) = [1] x2 + [0] p(c_14) = [1] p(c_15) = [1] x1 + [1] x2 + [4] x5 + [1] x6 + [0] p(c_16) = [1] x1 + [1] x3 + [1] x4 + [2] x5 + [4] p(c_17) = [1] x3 + [4] x4 + [1] x5 + [1] x6 + [0] p(c_18) = [2] x1 + [2] x2 + [4] x3 + [1] x4 + [4] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] p(c_22) = [1] x1 + [1] x2 + [1] x3 + [7] p(c_23) = [1] x1 + [2] p(c_24) = [1] x1 + [4] p(c_25) = [0] p(c_26) = [1] x1 + [0] p(c_27) = [1] p(c_28) = [4] x1 + [4] x2 + [4] p(c_29) = [1] p(c_30) = [4] x1 + [2] x2 + [2] p(c_31) = [1] x1 + [4] p(c_32) = [1] x1 + [3] p(c_33) = [0] p(c_34) = [1] p(c_35) = [1] x1 + [0] p(c_36) = [2] p(c_37) = [1] x1 + [1] p(c_38) = [1] x1 + [4] p(c_39) = [1] x1 + [4] p(c_40) = [1] x1 + [1] p(c_41) = [0] 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 + [0] p(c_47) = [1] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [1] x2 + [0] p(c_50) = [0] p(c_51) = [4] x1 + [0] p(c_52) = [2] x1 + [1] p(c_53) = [0] p(c_54) = [1] x1 + [1] p(c_55) = [0] p(c_56) = [2] x1 + [0] p(c_57) = [1] x2 + [0] p(c_58) = [2] x1 + [1] p(c_59) = [1] x1 + [1] x2 + [1] p(c_60) = [0] p(c_61) = [0] p(c_62) = [1] p(c_63) = [2] p(c_64) = [4] x1 + [0] p(c_65) = [2] x1 + [1] p(c_66) = [1] p(c_67) = [1] x1 + [2] p(c_68) = [0] p(c_69) = [0] p(c_70) = [4] x2 + [2] p(c_71) = [4] p(c_72) = [1] p(c_73) = [0] p(c_74) = [1] p(c_75) = [0] p(c_76) = [0] p(c_77) = [1] p(c_78) = [2] Following rules are strictly oriented: transAcc#(@m,@base) = [1] @base + [6] > [1] @base + [0] = c_45(transAcc#1#(@m,@base)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [2] @m + [0] >= [0] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [0] >= [2] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [1] @m1 + [4] @m2 + [0] >= [3] @m2 + [15] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [2] >= [1] @m2 + [2] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [6] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [4] @m1 + [3] @m2 + [5] @m3 + [0] >= [1] @m1 + [2] @m2 + [4] @m3 + [0] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [5] @mm + [3] >= [1] @acc + [5] @mm + [3] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [5] @m + [5] @ms + [3] >= [1] @acc + [4] @m + [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [5] @m + [5] @ms + [3] >= [1] @acc + [2] @m + [5] @ms + [3] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m1 + [1] @m2 + [2] >= [1] @m2 + [2] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [2] >= [8] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [4] >= [5] = c_32(mkBase#(@m')) split#(@m) = [0] >= [5] = 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#1#(::(@l,@m'),@base) = [1] @base + [0] >= [1] @base + [6] = 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) = [2] @m + [7] >= [6] = 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) = [0] >= [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [0] >= [0] = mkBase(@l) makeBase#1(nil()) = [0] >= [0] = nil() matrixMult(@m1,@m2) = [1] @m1 + [2] @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] >= [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) = [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 7.b:1.a:4: 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#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)) 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) = [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#) = [3] p(matrixMult#) = [1] x1 + [3] x2 + [0] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [0] p(matrixMult3#) = [2] x1 + [2] x2 + [3] x3 + [0] p(matrixMultList#) = [1] x1 + [3] x2 + [0] p(matrixMultList#1#) = [3] x1 + [1] x2 + [0] p(matrixMultOld#) = [2] x2 + [0] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [2] x2 + [1] x3 + [0] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [1] x2 + [1] 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'#) = [2] x1 + [2] p(c_1) = [1] p(c_2) = [0] p(c_3) = [1] p(c_4) = [2] p(c_5) = [0] p(c_6) = [1] x1 + [2] p(c_7) = [0] p(c_8) = [2] x1 + [0] p(c_9) = [0] p(c_10) = [2] x1 + [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [2] x1 + [1] x2 + [0] p(c_14) = [1] p(c_15) = [2] x2 + [1] x5 + [0] p(c_16) = [1] x1 + [1] x4 + [2] x6 + [0] p(c_17) = [1] x1 + [2] x4 + [1] x5 + [1] x8 + [1] p(c_18) = [2] x1 + [2] x2 + [1] x3 + [1] x4 + [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [1] 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 + [1] p(c_25) = [0] p(c_26) = [1] x1 + [0] p(c_27) = [2] x1 + [0] p(c_28) = [0] p(c_29) = [2] p(c_30) = [1] x2 + [2] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [0] p(c_33) = [2] p(c_34) = [2] x1 + [0] p(c_35) = [2] p(c_36) = [0] p(c_37) = [0] p(c_38) = [1] x1 + [2] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [2] p(c_41) = [2] p(c_42) = [1] x1 + [1] p(c_43) = [2] p(c_44) = [1] p(c_45) = [1] x1 + [0] p(c_46) = [1] x1 + [0] p(c_47) = [1] p(c_48) = [1] p(c_49) = [0] p(c_50) = [2] p(c_51) = [0] p(c_52) = [2] x1 + [2] p(c_53) = [1] p(c_54) = [0] p(c_55) = [0] p(c_56) = [1] x1 + [0] p(c_57) = [2] x2 + [2] p(c_58) = [0] p(c_59) = [2] x1 + [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [2] p(c_65) = [2] x1 + [1] p(c_66) = [2] p(c_67) = [0] p(c_68) = [1] p(c_69) = [0] p(c_70) = [1] x1 + [0] p(c_71) = [1] p(c_72) = [0] p(c_73) = [1] p(c_74) = [0] p(c_75) = [0] p(c_76) = [1] p(c_77) = [0] p(c_78) = [2] Following rules are strictly oriented: makeBase#1#(::(@l,@m')) = [3] > [1] = c_20(mkBase#(@l)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [3] = c_19(makeBase#1#(@m)) matrixMult#(@m1,@m2) = [1] @m1 + [3] @m2 + [0] >= [3] @m2 + [0] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [1] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [2] @m1 + [2] @m2 + [3] @m3 + [0] >= [1] @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] >= [1] @m + [3] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [2] @m2 + [0] >= [1] @m2 + [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] >= [2] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [0] >= [1] = c_42(split#(@ls)) transAcc#(@m,@base) = [1] @base + [2] @m + [0] >= [1] @base + [2] @m + [0] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [2] @m' + [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] >= [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 + [2] >= [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) = [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 7.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)) 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#1#(::(@l,@m'),@base) -> c_46(transAcc#(@m',@base)) - Weak DPs: makeBase#1#(::(@l,@m')) -> c_20(mkBase#(@l)) 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) = [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] x1 + [2] p(m2) = [0] p(m3) = [1] p(m4) = [1] 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) = [1] p(matrixMultList#1) = [0] p(matrixMultOld) = [2] x1 + [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') = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [1] p(#add#) = [2] x1 + [1] x2 + [2] p(#mult#) = [1] x1 + [0] p(#natmult#) = [2] x1 + [2] x2 + [0] p(#pred#) = [2] 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] x2 + [0] p(matrixMult'#1#) = [1] x2 + [3] p(matrixMult3#) = [2] x1 + [1] x2 + [2] x3 + [1] p(matrixMultList#) = [1] x1 + [1] x2 + [0] p(matrixMultList#1#) = [1] x1 + [1] x2 + [0] p(matrixMultOld#) = [1] x2 + [1] 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] x2 + [1] p(transAcc#1#) = [1] x2 + [1] 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'#) = [2] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [1] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [2] x1 + [1] x4 + [1] x5 + [1] x6 + [0] p(c_16) = [2] x1 + [2] x3 + [1] x4 + [1] x5 + [1] x6 + [0] p(c_17) = [2] x1 + [2] x4 + [1] x6 + [1] x7 + [1] p(c_18) = [0] p(c_19) = [1] x1 + [1] 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 + [1] p(c_24) = [1] x1 + [2] p(c_25) = [0] p(c_26) = [0] p(c_27) = [2] x1 + [1] p(c_28) = [2] p(c_29) = [2] p(c_30) = [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [3] p(c_33) = [0] p(c_34) = [2] x1 + [0] p(c_35) = [1] x1 + [0] p(c_36) = [2] x1 + [0] p(c_37) = [2] p(c_38) = [0] p(c_39) = [1] x1 + [3] 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 + [0] p(c_46) = [1] x1 + [0] p(c_47) = [2] p(c_48) = [2] p(c_49) = [0] p(c_50) = [1] p(c_51) = [1] x1 + [0] p(c_52) = [1] p(c_53) = [0] p(c_54) = [1] p(c_55) = [0] p(c_56) = [2] x1 + [0] p(c_57) = [1] x1 + [2] p(c_58) = [0] p(c_59) = [0] p(c_60) = [1] 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) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [2] p(c_72) = [0] p(c_73) = [1] p(c_74) = [0] p(c_75) = [2] p(c_76) = [2] p(c_77) = [1] p(c_78) = [0] Following rules are strictly oriented: matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [3] > [1] @m2 + [2] = c_24(matrixMult'#(@ls,@m2)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [1] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [0] >= [0] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [1] @m1 + [1] @m2 + [0] >= [1] @m2 + [2] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [4] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult3#(@m1,@m2,@m3) = [2] @m1 + [1] @m2 + [2] @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) = [1] @m2 + [1] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [0] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [0] >= [3] = c_32(mkBase#(@m')) split#(@m) = [0] >= [3] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [0] >= [1] = c_40(split#2#(@l,@ls)) 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 + [1] >= [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] @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) = [2] >= [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) = [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 7.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_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) = [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) = [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) = [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#) = [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#) = [1] x1 + [0] p(makeBase#) = [1] p(makeBase#1#) = [0] p(matrixMult#) = [1] x1 + [3] x2 + [3] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [2] p(matrixMult3#) = [2] x1 + [2] x2 + [3] x3 + [3] p(matrixMultList#) = [1] x1 + [3] x2 + [3] p(matrixMultList#1#) = [3] x1 + [1] x2 + [3] p(matrixMultOld#) = [1] x2 + [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] x2 + [1] 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 + [2] p(transpose'#) = [1] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [1] x1 + [1] 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) = [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) = [0] p(c_37) = [2] x1 + [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 + [2] p(c_43) = [0] p(c_44) = [0] p(c_45) = [1] x1 + [0] p(c_46) = [1] x1 + [2] p(c_47) = [0] p(c_48) = [1] x1 + [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [1] x1 + [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) = [2] x2 + [1] p(c_58) = [1] p(c_59) = [1] x1 + [2] p(c_60) = [1] p(c_61) = [0] p(c_62) = [0] p(c_63) = [2] p(c_64) = [2] x1 + [0] p(c_65) = [1] x1 + [0] p(c_66) = [0] p(c_67) = [2] x1 + [0] p(c_68) = [1] x1 + [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [2] p(c_72) = [2] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [2] p(c_77) = [0] p(c_78) = [2] Following rules are strictly oriented: matrixMult#(@m1,@m2) = [1] @m1 + [3] @m2 + [3] > [2] @m2 + [2] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [1] >= [1] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [0] >= [0] = c_20(mkBase#(@l)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [2] = 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) = [2] @m1 + [2] @m2 + [3] @m3 + [3] >= [2] @m2 + [3] @m3 + [3] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [3] @mm + [3] >= [1] @acc + [3] @mm + [3] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [3] >= [1] @acc + [3] @m + [3] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [3] >= [2] @m + [3] @ms + [3] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [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] >= [2] = c_42(split#(@ls)) transAcc#(@m,@base) = [1] @base + [1] >= [1] @base + [0] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [0] >= [1] @base + [3] = 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] >= [0] = 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] @m' + [2] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @y + [1] @ys + [2] >= [1] @y + [1] @ys + [2] = transpose#(::(@y,@ys)) transpose'#(@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 7.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)) 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#(@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)) 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) = [2] x1 + [1] p(m2) = [1] 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) = [0] p(matrixMultList) = [2] x1 + [2] x2 + [0] p(matrixMultList#1) = [1] x1 + [1] x2 + [0] p(matrixMultOld) = [2] 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) = [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#) = [2] x2 + [0] p(m1#) = [1] x1 + [0] p(m2#) = [0] p(m3#) = [0] p(m4#) = [1] p(makeBase#) = [0] p(makeBase#1#) = [1] p(matrixMult#) = [1] x1 + [3] x2 + [0] p(matrixMult'#) = [1] x1 + [1] x2 + [0] p(matrixMult'#1#) = [1] x1 + [1] x2 + [0] p(matrixMult3#) = [1] x1 + [1] x2 + [3] x3 + [2] p(matrixMultList#) = [1] x1 + [3] x2 + [1] p(matrixMultList#1#) = [3] x1 + [1] x2 + [1] p(matrixMultOld#) = [1] x1 + [2] x2 + [1] p(mkBase#) = [0] p(mkBase#1#) = [1] p(mult#) = [1] x1 + [2] p(mult#1#) = [2] x2 + [2] p(mult#2#) = [2] x2 + [0] p(split#) = [0] p(split#1#) = [2] p(split#2#) = [0] p(split#3#) = [1] x2 + [0] p(transAcc#) = [2] x1 + [1] x2 + [0] p(transAcc#1#) = [2] 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(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [1] p(c_5) = [1] p(c_6) = [0] p(c_7) = [1] p(c_8) = [0] p(c_9) = [1] p(c_10) = [1] p(c_11) = [2] p(c_12) = [0] p(c_13) = [2] x1 + [0] p(c_14) = [2] p(c_15) = [1] x4 + [1] x6 + [1] p(c_16) = [1] x2 + [2] x3 + [2] x4 + [1] x5 + [1] p(c_17) = [2] x2 + [1] p(c_18) = [2] x1 + [2] x4 + [0] 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 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [2] p(c_26) = [1] x1 + [2] x2 + [2] p(c_27) = [1] x1 + [2] p(c_28) = [2] p(c_29) = [0] p(c_30) = [1] x2 + [1] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [0] p(c_33) = [2] p(c_34) = [0] p(c_35) = [0] p(c_36) = [2] p(c_37) = [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [1] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [1] x1 + [3] p(c_43) = [0] p(c_44) = [1] p(c_45) = [1] x1 + [0] p(c_46) = [1] x1 + [0] p(c_47) = [0] p(c_48) = [2] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [2] x1 + [0] p(c_53) = [2] p(c_54) = [2] x1 + [2] x2 + [0] p(c_55) = [0] p(c_56) = [1] p(c_57) = [1] p(c_58) = [1] x1 + [0] p(c_59) = [1] x1 + [2] x2 + [0] p(c_60) = [2] p(c_61) = [2] p(c_62) = [0] p(c_63) = [2] 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) = [1] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [1] p(c_78) = [0] Following rules are strictly oriented: mkBase#1#(::(@l,@m')) = [1] > [0] = c_32(mkBase#(@m')) split#1#(::(@l,@ls)) = [2] > [0] = 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 + [3] @m2 + [0] >= [1] @m1 + [3] @m2 + [0] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m1 + [1] @m2 + [0] >= [1] @m1 + [1] @m2 + [0] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @l + [1] @ls + [1] @m2 + [0] >= [1] @ls + [1] @m2 + [0] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [1] @m1 + [1] @m2 + [3] @m3 + [2] >= [1] @m2 + [3] @m3 + [0] = 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 + [0] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [3] @m + [3] @ms + [1] >= [1] @m + [3] @ms + [1] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m1 + [2] @m2 + [1] >= [1] @m1 + [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [1] = c_31(mkBase#1#(@m)) split#(@m) = [0] >= [3] = c_39(split#1#(@m)) split#2#(::(@x,@xs),@ls) = [0] >= [3] = c_42(split#(@ls)) transAcc#(@m,@base) = [1] @base + [2] @m + [0] >= [1] @base + [2] @m + [0] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [1] @base + [2] @l + [2] @m' + [0] >= [1] @base + [2] @m' + [0] = c_46(transAcc#(@m',@base)) transpose#(@m) = [1] @m + [1] >= [1] @m + [1] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [1] >= [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [1] >= [1] @m + [1] = transpose#2#(split(@m)) 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] @y + [1] @ys + [1] = transpose#(::(@y,@ys)) transpose'#(@m) = [2] @m + [2] >= [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) = [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 7.b:1.a:8: 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) = [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#) = [1] p(matrixMult#) = [1] x1 + [2] x2 + [1] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [1] p(matrixMult3#) = [1] x2 + [2] x3 + [1] p(matrixMultList#) = [1] x1 + [2] x2 + [2] p(matrixMultList#1#) = [2] x1 + [1] x2 + [2] p(matrixMultOld#) = [2] x2 + [2] p(mkBase#) = [0] p(mkBase#1#) = [1] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [1] x1 + [0] p(split#) = [2] p(split#1#) = [1] p(split#2#) = [0] p(split#3#) = [1] x2 + [1] x3 + [0] p(transAcc#) = [1] x2 + [1] 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 + [2] p(transpose'#) = [2] p(c_1) = [0] p(c_2) = [2] p(c_3) = [2] p(c_4) = [1] p(c_5) = [0] p(c_6) = [2] 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) = [2] p(c_13) = [2] x2 + [1] p(c_14) = [0] p(c_15) = [2] x1 + [1] x3 + [2] x4 + [2] p(c_16) = [1] x6 + [0] p(c_17) = [2] x3 + [1] x5 + [1] x7 + [0] p(c_18) = [1] x1 + [2] 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 + [2] p(c_24) = [1] x1 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] x1 + [2] p(c_28) = [0] p(c_29) = [1] p(c_30) = [1] p(c_31) = [1] x1 + [1] p(c_32) = [1] x1 + [1] p(c_33) = [0] p(c_34) = [1] x1 + [2] p(c_35) = [2] p(c_36) = [1] p(c_37) = [2] x1 + [0] p(c_38) = [1] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [1] x1 + [1] p(c_43) = [2] p(c_44) = [1] p(c_45) = [1] x1 + [1] p(c_46) = [1] x1 + [0] p(c_47) = [0] p(c_48) = [2] x1 + [0] p(c_49) = [1] x1 + [2] x2 + [0] p(c_50) = [1] p(c_51) = [2] x1 + [1] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [1] p(c_56) = [0] p(c_57) = [2] p(c_58) = [1] x1 + [0] p(c_59) = [1] x1 + [1] x2 + [0] p(c_60) = [2] p(c_61) = [2] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [2] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [2] x1 + [1] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [2] p(c_77) = [2] p(c_78) = [0] Following rules are strictly oriented: split#(@m) = [2] > [1] = c_39(split#1#(@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] @m1 + [2] @m2 + [1] >= [1] @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 + [1] >= [1] @m2 + [0] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [1] @m2 + [2] @m3 + [1] >= [1] @m2 + [2] @m3 + [1] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [2] @mm + [2] >= [1] @acc + [2] @mm + [2] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [2] >= [1] @acc + [2] @m + [1] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [2] >= [1] @m + [2] @ms + [2] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [2] @m2 + [2] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [2] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [1] >= [1] = c_32(mkBase#(@m')) split#1#(::(@l,@ls)) = [1] >= [0] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [0] >= [3] = 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 + [2] >= [1] @m + [2] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [1] @m + [2] >= [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] @m' + [2] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [1] @y + [1] @ys + [2] >= [1] @y + [1] @ys + [2] = transpose#(::(@y,@ys)) transpose'#(@m) = [2] >= [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))) = [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 7.b:1.a:9: 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) = [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) = [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) = [1] x1 + [0] p(m2) = [0] p(m3) = [0] p(m4) = [2] x1 + [1] 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] x2 + [1] x3 + [0] p(matrixMultList) = [1] x1 + [1] p(matrixMultList#1) = [2] x1 + [1] x2 + [0] 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') = [1] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [0] p(#add#) = [1] p(#mult#) = [2] x1 + [0] p(#natmult#) = [0] p(#pred#) = [1] p(#succ#) = [1] x1 + [0] p(*#) = [2] x1 + [2] x2 + [0] p(+#) = [1] x1 + [0] p(attach#) = [0] p(attach#1#) = [0] p(attach#2#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [1] x1 + [1] x2 + [2] p(m1#) = [2] p(m2#) = [0] p(m3#) = [0] p(m4#) = [1] p(makeBase#) = [1] p(makeBase#1#) = [0] p(matrixMult#) = [1] x1 + [2] x2 + [1] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [0] p(matrixMult3#) = [2] x1 + [2] x2 + [2] x3 + [2] p(matrixMultList#) = [1] x1 + [2] x2 + [2] p(matrixMultList#1#) = [2] x1 + [1] x2 + [2] p(matrixMultOld#) = [2] x1 + [2] x2 + [0] p(mkBase#) = [0] p(mkBase#1#) = [1] p(mult#) = [1] x1 + [0] p(mult#1#) = [0] p(mult#2#) = [2] x1 + [2] x3 + [2] p(split#) = [1] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [2] x2 + [2] x3 + [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'#) = [2] p(c_1) = [1] p(c_2) = [1] p(c_3) = [0] p(c_4) = [2] p(c_5) = [2] x1 + [0] p(c_6) = [2] x1 + [0] p(c_7) = [1] p(c_8) = [2] x1 + [2] p(c_9) = [1] p(c_10) = [2] x1 + [2] p(c_11) = [1] p(c_12) = [1] x1 + [0] p(c_13) = [2] p(c_14) = [1] p(c_15) = [1] x3 + [1] x4 + [0] p(c_16) = [2] x4 + [0] p(c_17) = [2] x1 + [1] x6 + [1] x8 + [0] p(c_18) = [1] x2 + [1] 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 + [1] p(c_24) = [1] x1 + [0] p(c_25) = [2] p(c_26) = [2] x2 + [0] p(c_27) = [2] p(c_28) = [2] p(c_29) = [0] p(c_30) = [1] x1 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [0] p(c_33) = [0] p(c_34) = [1] x1 + [1] p(c_35) = [0] p(c_36) = [1] x1 + [0] p(c_37) = [0] p(c_38) = [1] x1 + [1] p(c_39) = [1] x1 + [1] p(c_40) = [1] x1 + [0] p(c_41) = [0] 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 + [3] p(c_47) = [2] p(c_48) = [1] x1 + [0] p(c_49) = [2] x1 + [1] x2 + [2] p(c_50) = [0] p(c_51) = [2] x1 + [0] p(c_52) = [2] p(c_53) = [0] p(c_54) = [0] p(c_55) = [2] p(c_56) = [0] p(c_57) = [1] p(c_58) = [0] p(c_59) = [2] x1 + [2] x2 + [0] p(c_60) = [0] 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) = [0] p(c_68) = [0] p(c_69) = [2] p(c_70) = [1] x1 + [2] p(c_71) = [2] p(c_72) = [0] p(c_73) = [1] p(c_74) = [0] p(c_75) = [2] p(c_76) = [1] p(c_77) = [0] p(c_78) = [2] 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 + [2] @m2 + [1] >= [1] @m2 + [1] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#(@m1,@m2) = [1] @m2 + [0] >= [1] @m2 + [1] = c_23(matrixMult'#1#(@m1,@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [2] @m1 + [2] @m2 + [2] @m3 + [2] >= [1] @m2 + [2] @m3 + [1] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [2] @mm + [2] >= [1] @acc + [2] @mm + [2] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [2] >= [1] @acc + [2] @m + [1] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [2] >= [1] @m + [2] @ms + [2] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [2] @m1 + [2] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#(@m) = [0] >= [1] = c_31(mkBase#1#(@m)) mkBase#1#(::(@l,@m')) = [1] >= [0] = c_32(mkBase#(@m')) split#(@m) = [1] >= [1] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [0] >= [0] = c_40(split#2#(@l,@ls)) split#2#(::(@x,@xs),@ls) = [0] >= [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 + [3] = 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] = 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) = [2] >= [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))) = [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 7.b:1.a:10: 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: {#abs#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,attach#,attach#1#,attach#2#,lineMult#,lineMult#1#,m1# ,m2#,m3#,m4#,makeBase#,makeBase#1#,matrixMult#,matrixMult'#,matrixMult'#1#,matrixMult3#,matrixMultList# ,matrixMultList#1#,matrixMultOld#,mkBase#,mkBase#1#,mult#,mult#1#,mult#2#,split#,split#1#,split#2#,split#3# ,transAcc#,transAcc#1#,transpose#,transpose#1#,transpose#2#,transpose#3#,transpose'#} TcT has computed the following interpretation: p(#0) = [2] p(#abs) = [2] x1 + [4] p(#add) = [0] p(#mult) = [1] x1 + [4] x2 + [0] p(#natmult) = [4] x2 + [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] p(#pred) = [2] x1 + [0] p(#s) = [6] p(#succ) = [0] p(*) = [2] p(+) = [1] x1 + [1] x2 + [6] p(::) = [1] x1 + [1] x2 + [2] p(attach) = [0] p(attach#1) = [2] x1 + [4] p(attach#2) = [2] x1 + [1] x2 + [1] x3 + [6] p(lineMult) = [4] x1 + [3] x2 + [7] p(lineMult#1) = [2] x1 + [4] p(m1) = [0] p(m2) = [1] x1 + [1] p(m3) = [1] p(m4) = [1] x1 + [0] p(makeBase) = [4] p(makeBase#1) = [2] p(matrixMult) = [1] x2 + [0] p(matrixMult') = [5] x2 + [3] p(matrixMult'#1) = [4] x2 + [0] p(matrixMult3) = [4] x2 + [2] x3 + [1] p(matrixMultList) = [4] x2 + [0] p(matrixMultList#1) = [1] x2 + [0] p(matrixMultOld) = [0] p(mkBase) = [6] p(mkBase#1) = [0] p(mult) = [5] x1 + [2] x2 + [6] p(mult#1) = [1] p(mult#2) = [1] x1 + [0] p(nil) = [4] p(split) = [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [0] p(transAcc) = [1] x1 + [1] p(transAcc#1) = [4] p(transpose) = [3] x1 + [6] p(transpose#1) = [1] x1 + [4] x2 + [4] p(transpose#2) = [3] p(transpose#3) = [2] x1 + [0] p(transpose') = [2] x1 + [1] p(tuple#2) = [2] p(#abs#) = [4] p(#add#) = [1] x1 + [2] x2 + [1] p(#mult#) = [1] x1 + [1] p(#natmult#) = [1] x1 + [1] p(#pred#) = [1] x1 + [1] p(#succ#) = [0] p(*#) = [1] x1 + [4] p(+#) = [1] x2 + [1] p(attach#) = [1] p(attach#1#) = [1] x2 + [1] p(attach#2#) = [4] x3 + [1] p(lineMult#) = [4] x2 + [4] p(lineMult#1#) = [1] x2 + [1] p(m1#) = [1] x1 + [1] p(m2#) = [1] x1 + [0] p(m3#) = [1] x1 + [1] p(m4#) = [1] p(makeBase#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [4] x2 + [4] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [2] x2 + [4] x3 + [6] p(matrixMultList#) = [5] x2 + [2] p(matrixMultList#1#) = [5] x1 + [2] p(matrixMultOld#) = [1] x1 + [4] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [2] x2 + [1] p(mult#1#) = [1] x2 + [1] p(mult#2#) = [2] x1 + [4] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [1] x1 + [1] x2 + [2] p(transAcc#) = [4] x1 + [4] p(transAcc#1#) = [4] x1 + [1] p(transpose#) = [2] p(transpose#1#) = [2] p(transpose#2#) = [2] p(transpose#3#) = [2] p(transpose'#) = [5] x1 + [4] p(c_1) = [1] p(c_2) = [1] p(c_3) = [0] p(c_4) = [1] p(c_5) = [4] x1 + [1] p(c_6) = [0] p(c_7) = [2] p(c_8) = [2] x1 + [4] p(c_9) = [1] p(c_10) = [1] x1 + [1] p(c_11) = [2] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [1] p(c_14) = [1] p(c_15) = [4] x1 + [4] x2 + [1] x3 + [4] x4 + [4] x5 + [1] p(c_16) = [1] x1 + [1] x6 + [0] p(c_17) = [1] x1 + [1] x2 + [1] x3 + [1] x4 + [4] x6 + [1] x7 + [1] p(c_18) = [1] x1 + [1] p(c_19) = [4] x1 + [0] p(c_20) = [1] x1 + [0] p(c_21) = [1] p(c_22) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_23) = [4] x1 + [0] p(c_24) = [1] x1 + [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [4] p(c_28) = [2] x1 + [1] p(c_29) = [0] p(c_30) = [2] x1 + [0] p(c_31) = [4] x1 + [0] p(c_32) = [2] x1 + [0] p(c_33) = [1] p(c_34) = [1] x1 + [4] p(c_35) = [4] p(c_36) = [0] p(c_37) = [1] x1 + [1] p(c_38) = [0] p(c_39) = [2] x1 + [0] p(c_40) = [4] x1 + [0] p(c_41) = [0] p(c_42) = [4] x1 + [0] p(c_43) = [4] p(c_44) = [1] p(c_45) = [1] x1 + [2] p(c_46) = [1] x1 + [4] p(c_47) = [0] p(c_48) = [4] x1 + [1] p(c_49) = [1] x2 + [0] p(c_50) = [0] p(c_51) = [2] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [1] p(c_54) = [1] p(c_55) = [1] p(c_56) = [2] x1 + [0] p(c_57) = [1] x1 + [1] x2 + [4] p(c_58) = [1] x1 + [0] p(c_59) = [1] x2 + [2] p(c_60) = [2] p(c_61) = [1] p(c_62) = [1] p(c_63) = [1] p(c_64) = [1] p(c_65) = [1] p(c_66) = [2] p(c_67) = [1] x1 + [0] p(c_68) = [0] p(c_69) = [1] p(c_70) = [1] x1 + [1] x2 + [0] p(c_71) = [4] p(c_72) = [1] p(c_73) = [0] p(c_74) = [4] p(c_75) = [1] p(c_76) = [0] p(c_77) = [1] p(c_78) = [1] Following rules are strictly oriented: transAcc#1#(::(@l,@m'),@base) = [4] @l + [4] @m' + [9] > [4] @m' + [8] = c_46(transAcc#(@m',@base)) 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) = [4] @m2 + [4] >= [4] @m2 + [4] = 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) = [2] @m2 + [4] @m3 + [6] >= [4] @m3 + [4] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [5] @mm + [2] >= [5] @mm + [2] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [5] @m + [5] @ms + [12] >= [4] @m + [4] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [5] @m + [5] @ms + [12] >= [5] @ms + [2] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m1 + [4] >= [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) = [4] @m + [4] >= [4] @m + [3] = c_45(transAcc#1#(@m,@base)) transpose#(@m) = [2] >= [2] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [2] >= [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [2] >= [2] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [2] >= [2] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [2] >= [2] = transpose#(::(@y,@ys)) transpose'#(@m) = [5] @m + [4] >= [4] @m + [4] = transAcc#(@m,makeBase(@m)) *** Step 7.b:1.a:11: 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)) - 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)) 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: 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) = [3] p(#abs) = [0] p(#add) = [0] p(#mult) = [1] x1 + [1] x2 + [7] p(#natmult) = [0] p(#neg) = [1] p(#pos) = [1] x1 + [4] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [0] p(*) = [3] x2 + [2] p(+) = [1] x1 + [5] x2 + [1] p(::) = [1] x2 + [2] p(attach) = [0] p(attach#1) = [0] p(attach#2) = [2] x1 + [0] p(lineMult) = [2] x1 + [0] p(lineMult#1) = [0] p(m1) = [0] p(m2) = [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [1] x1 + [3] p(makeBase#1) = [2] x1 + [0] p(matrixMult) = [0] p(matrixMult') = [2] 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) = [0] p(split) = [1] x1 + [1] p(split#1) = [1] x1 + [1] p(split#2) = [1] x2 + [3] p(split#3) = [1] x1 + [2] p(transAcc) = [4] x2 + [0] p(transAcc#1) = [1] x1 + [0] p(transpose) = [0] p(transpose#1) = [1] p(transpose#2) = [2] x1 + [1] p(transpose#3) = [0] p(transpose') = [0] p(tuple#2) = [1] x2 + [1] 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#) = [2] p(makeBase#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [2] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [4] x1 + [4] x2 + [4] p(matrixMultList#) = [2] p(matrixMultList#1#) = [2] p(matrixMultOld#) = [1] x2 + [4] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [0] p(split#) = [2] x1 + [0] p(split#1#) = [2] x1 + [0] p(split#2#) = [2] x2 + [1] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [0] p(transpose#) = [4] x1 + [4] p(transpose#1#) = [4] x2 + [4] p(transpose#2#) = [4] x1 + [0] p(transpose#3#) = [4] x1 + [4] p(transpose'#) = [1] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [2] x1 + [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] x8 + [0] p(c_18) = [1] x4 + [1] p(c_19) = [4] x1 + [0] p(c_20) = [4] x1 + [0] p(c_21) = [2] p(c_22) = [2] x1 + [4] x2 + [4] x3 + [0] p(c_23) = [2] x1 + [0] p(c_24) = [2] x1 + [0] p(c_25) = [4] p(c_26) = [2] p(c_27) = [4] x1 + [1] p(c_28) = [1] x1 + [1] x2 + [1] p(c_29) = [1] p(c_30) = [1] x2 + [2] p(c_31) = [4] x1 + [0] p(c_32) = [4] x1 + [0] p(c_33) = [0] p(c_34) = [2] p(c_35) = [1] p(c_36) = [2] x1 + [1] p(c_37) = [0] p(c_38) = [0] p(c_39) = [1] x1 + [0] p(c_40) = [1] x1 + [3] p(c_41) = [1] p(c_42) = [1] x1 + [0] p(c_43) = [0] p(c_44) = [4] p(c_45) = [2] x1 + [0] p(c_46) = [4] x1 + [0] p(c_47) = [0] p(c_48) = [1] x1 + [1] p(c_49) = [2] x1 + [0] p(c_50) = [1] p(c_51) = [1] p(c_52) = [1] x1 + [0] p(c_53) = [0] p(c_54) = [1] x2 + [0] p(c_55) = [2] p(c_56) = [2] x1 + [0] p(c_57) = [1] x1 + [0] p(c_58) = [1] x1 + [0] p(c_59) = [2] x2 + [1] p(c_60) = [1] p(c_61) = [0] p(c_62) = [0] p(c_63) = [4] p(c_64) = [4] p(c_65) = [4] x1 + [4] p(c_66) = [0] p(c_67) = [0] p(c_68) = [1] x1 + [2] p(c_69) = [1] p(c_70) = [4] x1 + [1] x2 + [1] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [4] p(c_75) = [4] p(c_76) = [1] p(c_77) = [0] p(c_78) = [4] Following rules are strictly oriented: split#2#(::(@x,@xs),@ls) = [2] @ls + [1] > [2] @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) = [2] >= [0] = 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 + [4] @m2 + [4] >= [2] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [2] >= [2] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [2] >= [2] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [2] >= [2] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m2 + [4] >= [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) = [2] @m + [0] >= [2] @m + [0] = c_39(split#1#(@m)) split#1#(::(@l,@ls)) = [2] @ls + [4] >= [2] @ls + [4] = 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) = [4] @m + [4] >= [4] @m + [4] = transpose#1#(@m,@m) transpose#1#(::(@xs,@xss),@m) = [4] @m + [4] >= [2] @m + [0] = split#(@m) transpose#1#(::(@xs,@xss),@m) = [4] @m + [4] >= [4] @m + [4] = transpose#2#(split(@m)) transpose#2#(tuple#2(@l,@m')) = [4] @m' + [4] >= [4] @m' + [4] = transpose#3#(@m',@l) transpose#3#(::(@y,@ys),@l) = [4] @ys + [12] >= [4] @ys + [12] = transpose#(::(@y,@ys)) transpose'#(@m) = [1] >= [0] = transAcc#(@m,makeBase(@m)) split(@m) = [1] @m + [1] >= [1] @m + [1] = split#1(@m) split#1(::(@l,@ls)) = [1] @ls + [3] >= [1] @ls + [3] = split#2(@l,@ls) split#1(nil()) = [1] >= [1] = tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) = [1] @ls + [3] >= [1] @ls + [3] = split#3(split(@ls),@x,@xs) split#2(nil(),@ls) = [1] @ls + [3] >= [1] = tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) = [1] @m' + [3] >= [1] @m' + [3] = tuple#2(::(@x,@ys),::(@xs,@m')) *** Step 7.b:1.a:12: 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)) - 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)) 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: 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) = [0] p(#natmult) = [0] p(#neg) = [0] p(#pos) = [0] p(#pred) = [7] p(#s) = [0] p(#succ) = [4] p(*) = [2] x1 + [0] p(+) = [4] x1 + [0] p(::) = [1] x1 + [1] x2 + [2] p(attach) = [0] p(attach#1) = [2] x1 + [0] p(attach#2) = [0] p(lineMult) = [7] p(lineMult#1) = [1] x1 + [2] p(m1) = [0] p(m2) = [0] p(m3) = [0] p(m4) = [0] p(makeBase) = [0] p(makeBase#1) = [0] p(matrixMult) = [0] p(matrixMult') = [5] x2 + [0] p(matrixMult'#1) = [0] p(matrixMult3) = [0] p(matrixMultList) = [0] p(matrixMultList#1) = [0] p(matrixMultOld) = [0] p(mkBase) = [0] p(mkBase#1) = [3] x1 + [0] p(mult) = [6] p(mult#1) = [0] p(mult#2) = [0] p(nil) = [4] p(split) = [0] p(split#1) = [1] x1 + [0] p(split#2) = [0] p(split#3) = [0] p(transAcc) = [2] p(transAcc#1) = [0] p(transpose) = [0] p(transpose#1) = [0] p(transpose#2) = [0] p(transpose#3) = [0] p(transpose') = [0] p(tuple#2) = [1] x1 + [7] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(attach#) = [0] p(attach#1#) = [0] p(attach#2#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(m1#) = [0] p(m2#) = [0] p(m3#) = [0] p(m4#) = [0] p(makeBase#) = [4] x1 + [0] p(makeBase#1#) = [2] x1 + [0] p(matrixMult#) = [6] x2 + [5] p(matrixMult'#) = [0] p(matrixMult'#1#) = [0] p(matrixMult3#) = [1] x1 + [6] x3 + [5] p(matrixMultList#) = [7] x2 + [0] p(matrixMultList#1#) = [7] x1 + [0] p(matrixMultOld#) = [0] p(mkBase#) = [1] x1 + [1] p(mkBase#1#) = [1] 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#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [0] p(transpose'#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [3] p(c_21) = [0] p(c_22) = [2] x1 + [1] x2 + [1] x3 + [0] p(c_23) = [4] x1 + [0] p(c_24) = [4] 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 + [1] 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) = [2] x1 + [0] p(c_41) = [0] p(c_42) = [4] x1 + [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [2] x1 + [0] p(c_46) = [4] 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: mkBase#(@m) = [1] @m + [1] > [1] @m + [0] = c_31(mkBase#1#(@m)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [4] @m + [0] >= [2] @m + [0] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [2] @l + [2] @m' + [4] >= [1] @l + [4] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [6] @m2 + [5] >= [4] @m2 + [0] = 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) = [1] @m1 + [6] @m3 + [5] >= [6] @m3 + [5] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [7] @mm + [0] >= [7] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [7] @m + [7] @ms + [14] >= [6] @m + [5] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [7] @m + [7] @ms + [14] >= [7] @ms + [0] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [0] >= [0] = matrixMult'#(@m1,transpose(@m2)) mkBase#1#(::(@l,@m')) = [1] @l + [1] @m' + [2] >= [1] @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) = [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) = [0] >= [0] = transAcc#(@m,makeBase(@m)) *** Step 7.b:1.a:13: NaturalMI WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: matrixMult'#(@m1,@m2) -> c_23(matrixMult'#1#(@m1,@m2)) - 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#(@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: 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) = [2] x1 + [0] p(#add) = [2] x1 + [5] p(#mult) = [1] x1 + [0] p(#natmult) = [3] x1 + [0] p(#neg) = [1] x1 + [2] p(#pos) = [1] x1 + [2] p(#pred) = [0] p(#s) = [2] p(#succ) = [0] p(*) = [0] p(+) = [0] p(::) = [1] x2 + [2] p(attach) = [0] p(attach#1) = [2] x1 + [0] p(attach#2) = [0] p(lineMult) = [0] p(lineMult#1) = [0] p(m1) = [0] p(m2) = [2] p(m3) = [0] p(m4) = [0] p(makeBase) = [2] x1 + [0] p(makeBase#1) = [0] p(matrixMult) = [1] x1 + [0] p(matrixMult') = [1] x1 + [0] p(matrixMult'#1) = [1] x1 + [0] p(matrixMult3) = [0] p(matrixMultList) = [0] p(matrixMultList#1) = [0] p(matrixMultOld) = [0] p(mkBase) = [0] p(mkBase#1) = [2] p(mult) = [0] p(mult#1) = [2] p(mult#2) = [6] x1 + [2] x3 + [0] p(nil) = [0] p(split) = [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [4] p(transAcc) = [1] x1 + [2] x2 + [3] p(transAcc#1) = [6] p(transpose) = [5] p(transpose#1) = [1] x1 + [7] x2 + [4] p(transpose#2) = [4] x1 + [6] p(transpose#3) = [2] x2 + [2] p(transpose') = [0] p(tuple#2) = [0] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [2] p(#natmult#) = [0] p(#pred#) = [4] p(#succ#) = [1] p(*#) = [0] p(+#) = [2] x2 + [1] p(attach#) = [4] x1 + [2] x2 + [0] p(attach#1#) = [1] x2 + [0] p(attach#2#) = [2] x3 + [2] p(lineMult#) = [1] x2 + [1] p(lineMult#1#) = [4] x1 + [1] p(m1#) = [4] p(m2#) = [4] p(m3#) = [0] p(m4#) = [4] p(makeBase#) = [0] p(makeBase#1#) = [0] p(matrixMult#) = [4] x1 + [7] p(matrixMult'#) = [1] x1 + [1] p(matrixMult'#1#) = [1] x1 + [0] p(matrixMult3#) = [5] x1 + [4] x3 + [7] p(matrixMultList#) = [4] x1 + [4] x2 + [2] p(matrixMultList#1#) = [4] x1 + [4] x2 + [0] p(matrixMultOld#) = [1] x1 + [4] x2 + [4] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [1] x1 + [2] p(mult#2#) = [1] x1 + [0] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [1] p(transAcc#) = [0] p(transAcc#1#) = [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [0] p(transpose'#) = [1] x1 + [1] p(c_1) = [4] p(c_2) = [1] p(c_3) = [1] p(c_4) = [2] p(c_5) = [1] p(c_6) = [1] p(c_7) = [1] p(c_8) = [1] p(c_9) = [1] p(c_10) = [1] p(c_11) = [0] p(c_12) = [0] p(c_13) = [1] x2 + [1] p(c_14) = [2] p(c_15) = [2] x1 + [4] x6 + [0] p(c_16) = [4] x1 + [2] x3 + [0] p(c_17) = [4] x3 + [1] x5 + [0] p(c_18) = [1] p(c_19) = [1] x1 + [0] p(c_20) = [4] x1 + [0] p(c_21) = [0] p(c_22) = [4] x1 + [1] x2 + [4] x3 + [3] p(c_23) = [1] x1 + [0] p(c_24) = [1] x1 + [1] p(c_25) = [1] p(c_26) = [1] x1 + [1] x2 + [0] p(c_27) = [4] x1 + [1] p(c_28) = [2] x2 + [1] p(c_29) = [1] p(c_30) = [1] x1 + [2] x2 + [1] p(c_31) = [4] x1 + [0] p(c_32) = [4] x1 + [0] p(c_33) = [1] p(c_34) = [4] x1 + [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [2] x1 + [0] p(c_38) = [2] x1 + [1] p(c_39) = [4] x1 + [0] p(c_40) = [4] x1 + [0] p(c_41) = [2] p(c_42) = [4] x1 + [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [4] x1 + [0] p(c_46) = [4] x1 + [0] p(c_47) = [1] p(c_48) = [1] x1 + [1] p(c_49) = [2] x2 + [1] p(c_50) = [1] p(c_51) = [2] x1 + [0] p(c_52) = [1] x1 + [1] p(c_53) = [1] p(c_54) = [1] x1 + [1] p(c_55) = [1] p(c_56) = [4] p(c_57) = [1] x1 + [1] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [2] p(c_62) = [2] p(c_63) = [0] p(c_64) = [2] x1 + [2] p(c_65) = [0] p(c_66) = [0] p(c_67) = [4] p(c_68) = [2] x1 + [0] p(c_69) = [1] p(c_70) = [4] x1 + [1] p(c_71) = [2] p(c_72) = [1] p(c_73) = [1] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [1] p(c_78) = [0] Following rules are strictly oriented: matrixMult'#(@m1,@m2) = [1] @m1 + [1] > [1] @m1 + [0] = c_23(matrixMult'#1#(@m1,@m2)) Following rules are (at-least) weakly oriented: makeBase#(@m) = [0] >= [0] = c_19(makeBase#1#(@m)) makeBase#1#(::(@l,@m')) = [0] >= [0] = c_20(mkBase#(@l)) matrixMult#(@m1,@m2) = [4] @m1 + [7] >= [4] @m1 + [7] = c_22(matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))),transAcc#(@m2,makeBase(@m2)),makeBase#(@m2)) matrixMult'#1#(::(@l,@ls),@m2) = [1] @ls + [2] >= [1] @ls + [2] = c_24(matrixMult'#(@ls,@m2)) matrixMult3#(@m1,@m2,@m3) = [5] @m1 + [4] @m3 + [7] >= [4] @m1 + [7] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [4] @acc + [4] @mm + [2] >= [4] @acc + [4] @mm + [0] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [4] @acc + [4] @ms + [8] >= [4] @acc + [7] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [4] @acc + [4] @ms + [8] >= [4] @acc + [4] @ms + [2] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [1] @m1 + [4] @m2 + [4] >= [1] @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) = [0] >= [0] = c_45(transAcc#1#(@m,@base)) transAcc#1#(::(@l,@m'),@base) = [0] >= [0] = 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) = [1] @m + [1] >= [0] = 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 7.b:1.a:14: 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 7.b:1.b:1: 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)) 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 7.b:1.b:1.a:1: RemoveWeakSuffixes 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)) - 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 7.b:1.b:1.a:2: SimplifyRHS 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)) - 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 7.b:1.b:1.a:3: RemoveHeads 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(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 7.b:1.b:1.a:4: WeightGap 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(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: 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) = [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] x1 + [0] p(m2) = [1] x1 + [2] p(m3) = [1] x1 + [1] 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) = [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') = [4] x1 + [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#) = [1] x2 + [0] p(attach#1#) = [1] x2 + [4] p(attach#2#) = [1] x1 + [1] p(lineMult#) = [0] p(lineMult#1#) = [5] p(m1#) = [0] p(m2#) = [0] p(m3#) = [0] p(m4#) = [0] p(makeBase#) = [0] p(makeBase#1#) = [4] x1 + [2] 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#) = [5] x1 + [4] x2 + [1] p(mkBase#) = [0] p(mkBase#1#) = [0] p(mult#) = [0] p(mult#1#) = [0] p(mult#2#) = [0] p(split#) = [2] x1 + [0] p(split#1#) = [1] x1 + [1] p(split#2#) = [4] x1 + [1] x2 + [1] p(split#3#) = [2] x1 + [4] x3 + [1] p(transAcc#) = [1] x1 + [1] x2 + [0] p(transAcc#1#) = [1] x1 + [1] x2 + [0] p(transpose#) = [1] x1 + [0] p(transpose#1#) = [1] x1 + [1] x2 + [2] p(transpose#2#) = [4] x1 + [2] p(transpose#3#) = [2] p(transpose'#) = [1] x1 + [4] p(c_1) = [0] p(c_2) = [4] p(c_3) = [4] p(c_4) = [2] p(c_5) = [4] x1 + [1] p(c_6) = [0] p(c_7) = [1] x1 + [3] p(c_8) = [1] x1 + [0] p(c_9) = [1] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [4] p(c_13) = [1] x1 + [2] p(c_14) = [4] p(c_15) = [4] x3 + [2] x4 + [4] x6 + [4] p(c_16) = [1] x1 + [1] x2 + [1] x4 + [0] p(c_17) = [1] x3 + [1] x6 + [1] x7 + [1] x8 + [1] p(c_18) = [4] x3 + [0] p(c_19) = [1] x1 + [0] p(c_20) = [1] x1 + [2] p(c_21) = [4] p(c_22) = [1] x3 + [0] p(c_23) = [1] p(c_24) = [1] x1 + [2] x2 + [1] p(c_25) = [2] p(c_26) = [1] x1 + [1] x2 + [0] p(c_27) = [2] p(c_28) = [1] x1 + [1] x2 + [1] p(c_29) = [1] p(c_30) = [2] x1 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [2] p(c_33) = [1] p(c_34) = [4] p(c_35) = [0] p(c_36) = [1] x1 + [2] p(c_37) = [1] x1 + [1] p(c_38) = [1] x1 + [0] p(c_39) = [1] x1 + [2] p(c_40) = [4] x1 + [1] p(c_41) = [1] p(c_42) = [1] x1 + [1] p(c_43) = [1] p(c_44) = [1] p(c_45) = [4] x1 + [1] p(c_46) = [2] x1 + [0] p(c_47) = [0] p(c_48) = [4] x1 + [0] p(c_49) = [1] p(c_50) = [4] p(c_51) = [1] x1 + [1] p(c_52) = [2] x1 + [0] p(c_53) = [1] p(c_54) = [4] x1 + [0] p(c_55) = [0] p(c_56) = [2] x1 + [1] p(c_57) = [4] x1 + [0] p(c_58) = [1] x1 + [4] p(c_59) = [1] x2 + [1] p(c_60) = [0] p(c_61) = [1] p(c_62) = [1] p(c_63) = [2] p(c_64) = [1] p(c_65) = [4] x1 + [1] p(c_66) = [1] p(c_67) = [0] p(c_68) = [0] p(c_69) = [2] p(c_70) = [1] x1 + [1] x2 + [1] p(c_71) = [1] p(c_72) = [1] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [1] p(c_77) = [0] p(c_78) = [0] Following rules are strictly oriented: attach#1#(::(@x,@xs),@m) = [1] @m + [4] > [1] @m + [1] = c_8(attach#2#(@m,@x,@xs)) attach#2#(::(@l,@ls),@x,@xs) = [1] @l + [1] @ls + [1] > [1] @ls + [0] = c_10(attach#(@xs,@ls)) lineMult#1#(::(@x,@xs),@l) = [5] > [2] = c_13(lineMult#(@l,@xs)) Following rules are (at-least) weakly oriented: attach#(@line,@m) = [1] @m + [0] >= [1] @m + [7] = c_7(attach#1#(@line,@m)) lineMult#(@l,@m2) = [0] >= [9] = c_12(lineMult#1#(@m2,@l)) 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) = [5] @m1 + [4] @m2 + [1] >= [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] @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 + [4] >= [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 7.b:1.b:1.a:5: NaturalMI WORST_CASE(?,O(n^2)) + 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) = [0] p(#mult) = [7] p(#natmult) = [0] p(#neg) = [1] x1 + [7] p(#pos) = [0] p(#pred) = [0] p(#s) = [4] p(#succ) = [0] p(*) = [0] p(+) = [3] p(::) = [1] x1 + [1] x2 + [1] p(attach) = [1] p(attach#1) = [0] p(attach#2) = [0] p(lineMult) = [2] x1 + [4] x2 + [5] 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') = [1] x2 + [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) = [0] p(split) = [2] x1 + [0] p(split#1) = [0] p(split#2) = [0] p(split#3) = [4] x1 + [4] p(transAcc) = [2] x1 + [0] p(transAcc#1) = [1] p(transpose) = [5] p(transpose#1) = [4] x1 + [5] p(transpose#2) = [2] x1 + [5] p(transpose#3) = [0] p(transpose') = [0] p(tuple#2) = [1] x2 + [0] p(#abs#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(+#) = [0] p(attach#) = [1] x1 + [4] p(attach#1#) = [1] x1 + [3] p(attach#2#) = [1] x2 + [1] x3 + [4] 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#) = [4] p(matrixMult#) = [1] x2 + [3] p(matrixMult'#) = [3] p(matrixMult'#1#) = [3] p(matrixMult3#) = [4] x3 + [4] p(matrixMultList#) = [1] x2 + [5] p(matrixMultList#1#) = [1] x1 + [5] p(matrixMultOld#) = [3] 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 + [3] p(transAcc#1#) = [1] x1 + [3] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [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) = [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) = [4] x1 + [0] p(c_13) = [4] x1 + [0] p(c_14) = [0] p(c_15) = [1] x1 + [1] x2 + [4] x4 + [0] p(c_16) = [1] x3 + [1] x4 + [1] x6 + [0] p(c_17) = [1] x6 + [0] p(c_18) = [2] x2 + [4] x3 + [4] x4 + [0] p(c_19) = [2] x1 + [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [1] x1 + [4] x2 + [1] x3 + [0] p(c_23) = [0] p(c_24) = [1] x2 + [0] p(c_25) = [0] p(c_26) = [1] x1 + [2] x2 + [0] p(c_27) = [0] p(c_28) = [4] x1 + [1] x2 + [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [1] x1 + [0] p(c_36) = [0] p(c_37) = [4] x1 + [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) = [1] x1 + [1] x2 + [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [2] x1 + [0] p(c_50) = [0] p(c_51) = [1] x1 + [0] p(c_52) = [1] x1 + [0] p(c_53) = [0] p(c_54) = [4] x1 + [1] x2 + [0] p(c_55) = [0] p(c_56) = [1] x1 + [0] p(c_57) = [0] p(c_58) = [1] x1 + [0] p(c_59) = [2] x1 + [4] x2 + [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [2] 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) = [2] x2 + [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [0] p(c_78) = [0] Following rules are strictly oriented: attach#(@line,@m) = [1] @line + [4] > [1] @line + [3] = c_7(attach#1#(@line,@m)) Following rules are (at-least) weakly oriented: attach#1#(::(@x,@xs),@m) = [1] @x + [1] @xs + [4] >= [1] @x + [1] @xs + [4] = c_8(attach#2#(@m,@x,@xs)) attach#2#(::(@l,@ls),@x,@xs) = [1] @x + [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 + [3] >= [3] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult#(@m1,@m2) = [1] @m2 + [3] >= [1] @m2 + [3] = transAcc#(@m2,makeBase(@m2)) matrixMult'#(@m1,@m2) = [3] >= [3] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [3] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [3] >= [3] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [4] @m3 + [4] >= [1] @m3 + [3] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @mm + [5] >= [1] @mm + [5] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @m + [1] @ms + [6] >= [1] @m + [3] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @m + [1] @ms + [6] >= [1] @ms + [5] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [3] >= [3] = matrixMult'#(@m1,transpose(@m2)) transAcc#(@m,@base) = [1] @m + [3] >= [1] @m + [3] = transAcc#1#(@m,@base) transAcc#1#(::(@l,@m'),@base) = [1] @l + [1] @m' + [4] >= [1] @l + [4] = attach#(@l,transAcc(@m',@base)) transAcc#1#(::(@l,@m'),@base) = [1] @l + [1] @m' + [4] >= [1] @m' + [3] = transAcc#(@m',@base) transpose'#(@m) = [1] @m + [3] >= [1] @m + [3] = transAcc#(@m,makeBase(@m)) **** Step 7.b:1.b:1.a:6: Ara WORST_CASE(?,O(n^2)) + 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: Ara {araHeuristics = NoHeuristics, minDegree = 2, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(3, 3) #0 :: [] -(0)-> "A"(2, 0) #0 :: [] -(0)-> "A"(0, 0) #0 :: [] -(0)-> "A"(1, 1) #0 :: [] -(0)-> "A"(15, 15) #0 :: [] -(0)-> "A"(15, 5) #0 :: [] -(0)-> "A"(15, 11) #0 :: [] -(0)-> "A"(7, 15) #0 :: [] -(0)-> "A"(15, 13) #0 :: [] -(0)-> "A"(7, 13) #0 :: [] -(0)-> "A"(14, 15) #0 :: [] -(0)-> "A"(14, 14) #abs :: ["A"(3, 3)] -(0)-> "A"(15, 15) #add :: ["A"(2, 0) x "A"(13, 4)] -(0)-> "A"(13, 4) #mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(12, 3) #natmult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(13, 4) #neg :: ["A"(0, 0)] -(0)-> "A"(2, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(1, 1) #neg :: ["A"(0, 0)] -(0)-> "A"(15, 15) #neg :: ["A"(0, 0)] -(0)-> "A"(14, 14) #pos :: ["A"(0, 0)] -(0)-> "A"(2, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(1, 1) #pos :: ["A"(0, 0)] -(0)-> "A"(15, 14) #pos :: ["A"(0, 0)] -(0)-> "A"(15, 15) #pos :: ["A"(0, 0)] -(0)-> "A"(14, 11) #pos :: ["A"(0, 0)] -(0)-> "A"(12, 12) #pos :: ["A"(0, 0)] -(0)-> "A"(14, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(13, 13) #pred :: ["A"(0, 0)] -(0)-> "A"(15, 7) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(0, 12) #s :: ["A"(0, 0)] -(0)-> "A"(0, 14) #s :: ["A"(0, 0)] -(0)-> "A"(5, 15) #s :: ["A"(0, 0)] -(0)-> "A"(0, 7) #s :: ["A"(0, 0)] -(0)-> "A"(8, 11) #s :: ["A"(0, 0)] -(0)-> "A"(1, 9) #s :: ["A"(0, 0)] -(0)-> "A"(4, 4) #s :: ["A"(0, 0)] -(0)-> "A"(6, 15) #s :: ["A"(0, 0)] -(0)-> "A"(4, 6) #succ :: ["A"(1, 1)] -(0)-> "A"(13, 12) * :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(12, 3) + :: ["A"(7, 1) x "A"(13, 4)] -(0)-> "A"(13, 4) :: :: ["A"(1, 1) x "A"(7, 1)] -(7)-> "A"(7, 1) :: :: ["A"(0, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(7, 7) x "A"(9, 7)] -(9)-> "A"(9, 7) :: :: ["A"(0, 0) x "A"(9, 0)] -(9)-> "A"(9, 0) :: :: ["A"(0, 0) x "A"(4, 0)] -(4)-> "A"(4, 0) :: :: ["A"(11, 11) x "A"(1, 11)] -(1)-> "A"(1, 11) :: :: ["A"(11, 11) x "A"(11, 11)] -(11)-> "A"(11, 11) :: :: ["A"(7, 7) x "A"(3, 7)] -(3)-> "A"(3, 7) :: :: ["A"(11, 11) x "A"(9, 11)] -(9)-> "A"(9, 11) :: :: ["A"(0, 0) x "A"(5, 0)] -(5)-> "A"(5, 0) :: :: ["A"(15, 15) x "A"(13, 15)] -(13)-> "A"(13, 15) :: :: ["A"(0, 0) x "A"(6, 0)] -(6)-> "A"(6, 0) :: :: ["A"(2, 2) x "A"(0, 2)] -(0)-> "A"(0, 2) :: :: ["A"(11, 11) x "A"(3, 11)] -(3)-> "A"(3, 11) attach :: ["A"(7, 1) x "A"(1, 0)] -(1)-> "A"(6, 0) attach#1 :: ["A"(7, 1) x "A"(1, 0)] -(1)-> "A"(6, 0) attach#2 :: ["A"(1, 0) x "A"(1, 1) x "A"(7, 1)] -(8)-> "A"(6, 0) lineMult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 2) lineMult#1 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 2) makeBase :: ["A"(10, 8)] -(0)-> "A"(1, 0) makeBase#1 :: ["A"(9, 7)] -(0)-> "A"(1, 0) matrixMult :: ["A"(9, 0) x "A"(14, 15)] -(9)-> "A"(9, 0) matrixMult' :: ["A"(9, 0) x "A"(0, 0)] -(1)-> "A"(9, 0) matrixMult'#1 :: ["A"(9, 0) x "A"(0, 0)] -(1)-> "A"(9, 0) mkBase :: ["A"(4, 0)] -(0)-> "A"(1, 0) mkBase#1 :: ["A"(4, 0)] -(0)-> "A"(1, 0) mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(13, 4) mult#1 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(13, 4) mult#2 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(13, 4) nil :: [] -(0)-> "A"(7, 1) nil :: [] -(0)-> "A"(1, 0) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(9, 7) nil :: [] -(0)-> "A"(9, 0) nil :: [] -(0)-> "A"(4, 0) nil :: [] -(0)-> "A"(1, 11) nil :: [] -(0)-> "A"(11, 11) nil :: [] -(0)-> "A"(3, 7) nil :: [] -(0)-> "A"(9, 11) nil :: [] -(0)-> "A"(13, 7) nil :: [] -(0)-> "A"(7, 5) nil :: [] -(0)-> "A"(7, 7) nil :: [] -(0)-> "A"(15, 7) nil :: [] -(0)-> "A"(7, 13) nil :: [] -(0)-> "A"(15, 15) nil :: [] -(0)-> "A"(15, 13) nil :: [] -(0)-> "A"(7, 15) split :: ["A"(1, 11)] -(1)-> "A"(1, 11) split#1 :: ["A"(1, 11)] -(1)-> "A"(1, 11) split#2 :: ["A"(11, 11) x "A"(1, 11)] -(1)-> "A"(1, 11) split#3 :: ["A"(1, 11) x "A"(7, 1) x "A"(11, 11)] -(11)-> "A"(1, 11) transAcc :: ["A"(3, 7) x "A"(1, 0)] -(2)-> "A"(1, 0) transAcc#1 :: ["A"(3, 7) x "A"(1, 0)] -(1)-> "A"(1, 0) transpose :: ["A"(3, 11)] -(7)-> "A"(1, 0) transpose#1 :: ["A"(1, 0) x "A"(1, 11)] -(6)-> "A"(1, 0) transpose#2 :: ["A"(1, 11)] -(3)-> "A"(1, 0) transpose#3 :: ["A"(9, 11) x "A"(0, 0)] -(4)-> "A"(1, 0) tuple#2 :: ["A"(0, 0) x "A"(11, 11)] -(1)-> "A"(1, 11) tuple#2 :: ["A"(0, 0) x "A"(15, 15)] -(1)-> "A"(1, 15) attach# :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(5, 2) attach#1# :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(13, 9) attach#2# :: ["A"(1, 0) x "A"(0, 0) x "A"(1, 0)] -(0)-> "A"(14, 1) lineMult# :: ["A"(0, 0) x "A"(1, 0)] -(4)-> "A"(2, 1) lineMult#1# :: ["A"(1, 0) x "A"(0, 0)] -(3)-> "A"(1, 11) matrixMult# :: ["A"(8, 0) x "A"(15, 15)] -(5)-> "A"(1, 0) matrixMult'# :: ["A"(5, 0) x "A"(1, 0)] -(1)-> "A"(2, 1) matrixMult'#1# :: ["A"(5, 0) x "A"(1, 0)] -(1)-> "A"(2, 1) matrixMult3# :: ["A"(15, 14) x "A"(14, 15) x "A"(15, 15)] -(14)-> "A"(0, 0) matrixMultList# :: ["A"(9, 0) x "A"(13, 15)] -(1)-> "A"(0, 0) matrixMultList#1# :: ["A"(13, 15) x "A"(9, 0)] -(1)-> "A"(0, 0) matrixMultOld# :: ["A"(11, 14) x "A"(13, 13)] -(15)-> "A"(0, 0) transAcc# :: ["A"(3, 7) x "A"(1, 0)] -(1)-> "A"(5, 2) transAcc#1# :: ["A"(3, 7) x "A"(1, 0)] -(1)-> "A"(5, 2) transpose'# :: ["A"(15, 15)] -(13)-> "A"(2, 0) c_7 :: ["A"(12, 3)] -(0)-> "A"(9, 3) c_8 :: ["A"(0, 0)] -(0)-> "A"(13, 13) c_10 :: ["A"(0, 0)] -(0)-> "A"(14, 7) c_12 :: ["A"(1, 1)] -(0)-> "A"(11, 1) c_13 :: ["A"(0, 0)] -(0)-> "A"(1, 11) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(0) "#neg_A" :: ["A"(0)] -(0)-> "A"(0) "#pos_A" :: ["A"(0)] -(0)-> "A"(0) "#s_A" :: ["A"(0)] -(0)-> "A"(0) "::_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) "c_10_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_10_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_12_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_12_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_13_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_13_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_7_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_8_A" :: ["A"(0)] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: lineMult#(@l,@m2) -> c_12(lineMult#1#(@m2,@l)) 2. Weak: **** Step 7.b:1.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)) 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 7.b:1.b:1.b:2: RemoveHeads WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)) 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 7.b:1.b:1.b:3: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)) 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) = [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) = [1] p(m2) = [1] p(m3) = [1] p(m4) = [1] p(makeBase) = [2] x1 + [0] p(makeBase#1) = [1] x1 + [0] p(matrixMult) = [3] x2 + [0] p(matrixMult') = [1] x2 + [0] p(matrixMult'#1) = [1] x2 + [0] p(matrixMult3) = [1] x2 + [2] x3 + [1] p(matrixMultList) = [2] x1 + [1] p(matrixMultList#1) = [1] x2 + [0] p(matrixMultOld) = [4] 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') = [1] x1 + [2] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#abs#) = [2] x1 + [1] p(#add#) = [2] x2 + [1] p(#mult#) = [2] x1 + [1] x2 + [0] p(#natmult#) = [1] x2 + [2] p(#pred#) = [1] p(#succ#) = [1] x1 + [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#) = [2] x1 + [0] p(makeBase#1#) = [0] p(matrixMult#) = [1] x1 + [3] x2 + [0] p(matrixMult'#) = [1] x2 + [0] p(matrixMult'#1#) = [1] x2 + [0] p(matrixMult3#) = [4] x2 + [3] x3 + [0] p(matrixMultList#) = [1] x1 + [3] x2 + [0] p(matrixMultList#1#) = [3] x1 + [1] x2 + [0] p(matrixMultOld#) = [1] x1 + [5] x2 + [0] p(mkBase#) = [0] p(mkBase#1#) = [2] x1 + [0] p(mult#) = [0] p(mult#1#) = [3] p(mult#2#) = [5] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [0] p(transpose'#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [2] x7 + [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) = [1] x1 + [0] p(c_35) = [1] x1 + [0] p(c_36) = [0] p(c_37) = [1] x1 + [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) = [2] 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: mult#2#(::(@y,@ys),@x,@xs) = [5] > [0] = 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 + [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] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [4] @m2 + [3] @m3 + [0] >= [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 + [5] @m2 + [0] >= [1] @m2 + [0] = matrixMult'#(@m1,transpose(@m2)) mult#(@l1,@l2) = [0] >= [3] = c_34(mult#1#(@l1,@l2)) mult#1#(::(@x,@xs),@l2) = [3] >= [5] = c_35(mult#2#(@l2,@x,@xs)) #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) = [2] @m + [0] >= [1] @m + [0] = makeBase#1(@m) makeBase#1(::(@l,@m')) = [1] @l + [1] @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 + [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 7.b:1.b:1.b:4: WeightGap WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) mult#1#(::(@x,@xs),@l2) -> c_35(mult#2#(@l2,@x,@xs)) - Weak DPs: lineMult#(@l,@m2) -> lineMult#1#(@m2,@l) lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs) lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) -> matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) -> matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) -> matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) -> matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) -> matrixMult'#(@m1,transpose(@m2)) mult#2#(::(@y,@ys),@x,@xs) -> c_37(mult#(@xs,@ys)) - Weak TRS: #abs(#0()) -> #0() #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) attach(@line,@m) -> attach#1(@line,@m) attach#1(::(@x,@xs),@m) -> attach#2(@m,@x,@xs) attach#1(nil(),@m) -> nil() attach#2(::(@l,@ls),@x,@xs) -> ::(::(@x,@l),attach(@xs,@ls)) attach#2(nil(),@x,@xs) -> nil() lineMult(@l,@m2) -> lineMult#1(@m2,@l) lineMult#1(::(@x,@xs),@l) -> ::(mult(@l,@x),lineMult(@l,@xs)) lineMult#1(nil(),@l) -> nil() makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l,@m')) -> mkBase(@l) makeBase#1(nil()) -> nil() matrixMult(@m1,@m2) -> matrixMult'(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'(@m1,@m2) -> matrixMult'#1(@m1,@m2) matrixMult'#1(::(@l,@ls),@m2) -> ::(lineMult(@l,@m2),matrixMult'(@ls,@m2)) matrixMult'#1(nil(),@m2) -> nil() mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l,@m')) -> ::(nil(),mkBase(@m')) mkBase#1(nil()) -> nil() mult(@l1,@l2) -> mult#1(@l1,@l2) mult#1(::(@x,@xs),@l2) -> mult#2(@l2,@x,@xs) mult#1(nil(),@l2) -> #abs(#0()) mult#2(::(@y,@ys),@x,@xs) -> +(*(@x,@y),mult(@xs,@ys)) mult#2(nil(),@x,@xs) -> #abs(#0()) split(@m) -> split#1(@m) split#1(::(@l,@ls)) -> split#2(@l,@ls) split#1(nil()) -> tuple#2(nil(),nil()) split#2(::(@x,@xs),@ls) -> split#3(split(@ls),@x,@xs) split#2(nil(),@ls) -> tuple#2(nil(),nil()) split#3(tuple#2(@ys,@m'),@x,@xs) -> tuple#2(::(@x,@ys),::(@xs,@m')) transAcc(@m,@base) -> transAcc#1(@m,@base) transAcc#1(::(@l,@m'),@base) -> attach(@l,transAcc(@m',@base)) transAcc#1(nil(),@base) -> @base transpose(@m) -> transpose#1(@m,@m) transpose#1(::(@xs,@xss),@m) -> transpose#2(split(@m)) transpose#1(nil(),@m) -> nil() transpose#2(tuple#2(@l,@m')) -> transpose#3(@m',@l) transpose#3(::(@y,@ys),@l) -> ::(@l,transpose(::(@y,@ys))) transpose#3(nil(),@l) -> nil() - Signature: {#abs/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,attach/2,attach#1/2,attach#2/3,lineMult/2 ,lineMult#1/2,m1/1,m2/1,m3/1,m4/1,makeBase/1,makeBase#1/1,matrixMult/2,matrixMult'/2,matrixMult'#1/2 ,matrixMult3/3,matrixMultList/2,matrixMultList#1/2,matrixMultOld/2,mkBase/1,mkBase#1/1,mult/2,mult#1/2 ,mult#2/3,split/1,split#1/1,split#2/2,split#3/3,transAcc/2,transAcc#1/2,transpose/1,transpose#1/2 ,transpose#2/1,transpose#3/2,transpose'/1,#abs#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,attach#/2,attach#1#/2,attach#2#/3,lineMult#/2,lineMult#1#/2,m1#/1,m2#/1,m3#/1,m4#/1,makeBase#/1 ,makeBase#1#/1,matrixMult#/2,matrixMult'#/2,matrixMult'#1#/2,matrixMult3#/3,matrixMultList#/2 ,matrixMultList#1#/2,matrixMultOld#/2,mkBase#/1,mkBase#1#/1,mult#/2,mult#1#/2,mult#2#/3,split#/1,split#1#/1 ,split#2#/2,split#3#/3,transAcc#/2,transAcc#1#/2,transpose#/1,transpose#1#/2,transpose#2#/1,transpose#3#/2 ,transpose'#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,nil/0,tuple#2/2,c_1/0,c_2/0,c_3/0,c_4/0,c_5/1,c_6/1,c_7/1 ,c_8/1,c_9/0,c_10/1,c_11/0,c_12/1,c_13/2,c_14/0,c_15/6,c_16/6,c_17/8,c_18/4,c_19/1,c_20/1,c_21/0,c_22/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) = [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) = [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 + [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#) = [4] x2 + [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 + [2] x2 + [4] p(matrixMult'#) = [1] x1 + [1] x2 + [1] p(matrixMult'#1#) = [1] x1 + [1] x2 + [1] p(matrixMult3#) = [2] x2 + [3] x3 + [4] p(matrixMultList#) = [1] x1 + [2] x2 + [4] p(matrixMultList#1#) = [2] x1 + [1] x2 + [4] p(matrixMultOld#) = [4] x1 + [5] x2 + [2] p(mkBase#) = [0] p(mkBase#1#) = [2] x1 + [0] p(mult#) = [0] p(mult#1#) = [1] p(mult#2#) = [0] p(split#) = [0] p(split#1#) = [0] p(split#2#) = [0] p(split#3#) = [0] p(transAcc#) = [0] p(transAcc#1#) = [0] p(transpose#) = [0] p(transpose#1#) = [0] p(transpose#2#) = [0] p(transpose#3#) = [0] p(transpose'#) = [4] x1 + [0] p(c_1) = [0] p(c_2) = [1] p(c_3) = [1] p(c_4) = [2] p(c_5) = [1] p(c_6) = [2] x1 + [2] p(c_7) = [1] p(c_8) = [0] p(c_9) = [0] p(c_10) = [1] p(c_11) = [1] p(c_12) = [2] p(c_13) = [2] x1 + [2] p(c_14) = [0] p(c_15) = [1] x4 + [2] x5 + [1] x6 + [2] p(c_16) = [4] x2 + [4] x4 + [1] x5 + [4] x6 + [0] p(c_17) = [1] x1 + [1] x3 + [2] x4 + [1] x5 + [4] x6 + [2] x8 + [1] p(c_18) = [1] x2 + [1] x4 + [0] p(c_19) = [4] p(c_20) = [2] x1 + [1] p(c_21) = [2] p(c_22) = [1] x1 + [2] x2 + [1] x3 + [0] p(c_23) = [2] x1 + [1] p(c_24) = [2] x1 + [0] p(c_25) = [0] p(c_26) = [1] x2 + [4] p(c_27) = [1] p(c_28) = [4] p(c_29) = [0] p(c_30) = [2] x2 + [2] p(c_31) = [2] p(c_32) = [0] p(c_33) = [1] p(c_34) = [1] x1 + [4] p(c_35) = [1] x1 + [0] p(c_36) = [1] p(c_37) = [1] x1 + [0] p(c_38) = [4] p(c_39) = [0] p(c_40) = [0] p(c_41) = [2] p(c_42) = [1] x1 + [2] p(c_43) = [1] p(c_44) = [1] p(c_45) = [2] x1 + [2] p(c_46) = [1] x2 + [2] p(c_47) = [1] p(c_48) = [2] x1 + [1] p(c_49) = [1] x1 + [4] x2 + [4] p(c_50) = [0] p(c_51) = [2] x1 + [1] p(c_52) = [1] p(c_53) = [1] p(c_54) = [1] x1 + [4] x2 + [0] p(c_55) = [0] p(c_56) = [1] p(c_57) = [1] p(c_58) = [1] x1 + [1] p(c_59) = [1] x1 + [1] x2 + [1] p(c_60) = [0] p(c_61) = [0] p(c_62) = [1] p(c_63) = [4] p(c_64) = [2] x1 + [0] p(c_65) = [1] p(c_66) = [0] p(c_67) = [1] x1 + [0] p(c_68) = [1] x1 + [0] p(c_69) = [1] p(c_70) = [1] x1 + [0] p(c_71) = [1] p(c_72) = [0] p(c_73) = [0] p(c_74) = [1] p(c_75) = [1] p(c_76) = [1] p(c_77) = [1] p(c_78) = [0] Following rules are strictly oriented: mult#1#(::(@x,@xs),@l2) = [1] > [0] = c_35(mult#2#(@l2,@x,@xs)) 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 + [2] @m2 + [4] >= [1] @m1 + [1] @m2 + [1] = matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'#(@m1,@m2) = [1] @m1 + [1] @m2 + [1] >= [1] @m1 + [1] @m2 + [1] = matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @l + [1] @ls + [1] @m2 + [1] >= [0] = lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) = [1] @l + [1] @ls + [1] @m2 + [1] >= [1] @ls + [1] @m2 + [1] = matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) = [2] @m2 + [3] @m3 + [4] >= [2] @m2 + [2] @m3 + [4] = matrixMult#(matrixMult(@m1,@m2),@m3) matrixMultList#(@acc,@mm) = [1] @acc + [2] @mm + [4] >= [1] @acc + [2] @mm + [4] = matrixMultList#1#(@mm,@acc) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [4] >= [1] @acc + [2] @m + [4] = matrixMult#(@acc,@m) matrixMultList#1#(::(@m,@ms),@acc) = [1] @acc + [2] @m + [2] @ms + [4] >= [2] @m + [2] @ms + [4] = matrixMultList#(matrixMult(@acc,@m),@ms) matrixMultOld#(@m1,@m2) = [4] @m1 + [5] @m2 + [2] >= [1] @m1 + [1] @m2 + [1] = matrixMult'#(@m1,transpose(@m2)) mult#(@l1,@l2) = [0] >= [5] = c_34(mult#1#(@l1,@l2)) mult#2#(::(@y,@ys),@x,@xs) = [0] >= [0] = c_37(mult#(@xs,@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) = [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] >= [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 7.b:1.b:1.b:5: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) - Weak DPs: lineMult#(@l,@m2) -> lineMult#1#(@m2,@l) lineMult#1#(::(@x,@xs),@l) -> lineMult#(@l,@xs) lineMult#1#(::(@x,@xs),@l) -> mult#(@l,@x) matrixMult#(@m1,@m2) -> matrixMult'#(@m1,transAcc(@m2,makeBase(@m2))) matrixMult'#(@m1,@m2) -> matrixMult'#1#(@m1,@m2) matrixMult'#1#(::(@l,@ls),@m2) -> lineMult#(@l,@m2) matrixMult'#1#(::(@l,@ls),@m2) -> matrixMult'#(@ls,@m2) matrixMult3#(@m1,@m2,@m3) -> matrixMult#(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: Ara {araHeuristics = NoHeuristics, minDegree = 2, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(3, 3) #0 :: [] -(0)-> "A"(0, 0) #0 :: [] -(0)-> "A"(1, 0) #0 :: [] -(0)-> "A"(5, 5) #0 :: [] -(0)-> "A"(15, 15) #0 :: [] -(0)-> "A"(13, 7) #0 :: [] -(0)-> "A"(13, 15) #0 :: [] -(0)-> "A"(13, 13) #0 :: [] -(0)-> "A"(7, 13) #0 :: [] -(0)-> "A"(15, 14) #abs :: ["A"(3, 3)] -(0)-> "A"(15, 15) #add :: ["A"(0, 0) x "A"(6, 9)] -(0)-> "A"(6, 9) #mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(6, 0) #natmult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(6, 9) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(1, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(5, 5) #neg :: ["A"(0, 0)] -(0)-> "A"(14, 9) #neg :: ["A"(0, 0)] -(0)-> "A"(8, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(11, 11) #neg :: ["A"(0, 0)] -(0)-> "A"(11, 13) #neg :: ["A"(0, 0)] -(0)-> "A"(14, 13) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(1, 0) #pos :: ["A"(5, 0)] -(0)-> "A"(5, 5) #pos :: ["A"(9, 0)] -(0)-> "A"(5, 9) #pos :: ["A"(8, 0)] -(0)-> "A"(1, 8) #pos :: ["A"(0, 0)] -(0)-> "A"(15, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(7, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(3, 0) #pos :: ["A"(11, 0)] -(0)-> "A"(11, 11) #pos :: ["A"(13, 0)] -(0)-> "A"(11, 13) #pos :: ["A"(14, 0)] -(0)-> "A"(11, 14) #pred :: ["A"(1, 0)] -(0)-> "A"(7, 11) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(5, 0) #s :: ["A"(0, 0)] -(0)-> "A"(9, 0) #s :: ["A"(0, 0)] -(0)-> "A"(12, 0) #s :: ["A"(5, 0)] -(0)-> "A"(8, 5) #s :: ["A"(0, 0)] -(0)-> "A"(13, 0) #s :: ["A"(0, 0)] -(0)-> "A"(1, 0) #s :: ["A"(0, 0)] -(0)-> "A"(15, 0) #s :: ["A"(3, 0)] -(0)-> "A"(14, 3) #s :: ["A"(0, 0)] -(0)-> "A"(4, 0) #succ :: ["A"(5, 5)] -(0)-> "A"(10, 13) * :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(4, 0) + :: ["A"(1, 0) x "A"(6, 9)] -(0)-> "A"(6, 9) :: :: ["A"(6, 6) x "A"(7, 6)] -(7)-> "A"(7, 6) :: :: ["A"(1, 1) x "A"(0, 1)] -(0)-> "A"(0, 1) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(8, 8) x "A"(1, 8)] -(1)-> "A"(1, 8) :: :: ["A"(0, 0) x "A"(12, 0)] -(12)-> "A"(12, 0) :: :: ["A"(2, 2) x "A"(8, 2)] -(8)-> "A"(8, 2) :: :: ["A"(1, 1) x "A"(8, 1)] -(8)-> "A"(8, 1) :: :: ["A"(1, 1) x "A"(1, 1)] -(1)-> "A"(1, 1) :: :: ["A"(7, 7) x "A"(7, 7)] -(7)-> "A"(7, 7) :: :: ["A"(0, 0) x "A"(5, 0)] -(5)-> "A"(5, 0) :: :: ["A"(15, 15) x "A"(15, 15)] -(15)-> "A"(15, 15) :: :: ["A"(0, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) :: :: ["A"(2, 2) x "A"(0, 2)] -(0)-> "A"(0, 2) :: :: ["A"(13, 13) x "A"(8, 13)] -(8)-> "A"(8, 13) attach :: ["A"(7, 6) x "A"(0, 1)] -(7)-> "A"(1, 1) attach#1 :: ["A"(7, 6) x "A"(0, 1)] -(7)-> "A"(1, 1) attach#2 :: ["A"(0, 1) x "A"(3, 3) x "A"(7, 6)] -(14)-> "A"(1, 1) lineMult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 2) lineMult#1 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 2) makeBase :: ["A"(1, 8)] -(0)-> "A"(8, 12) makeBase#1 :: ["A"(1, 8)] -(0)-> "A"(8, 12) matrixMult :: ["A"(12, 0) x "A"(11, 15)] -(12)-> "A"(12, 0) matrixMult' :: ["A"(12, 0) x "A"(0, 0)] -(1)-> "A"(12, 0) matrixMult'#1 :: ["A"(12, 0) x "A"(0, 0)] -(1)-> "A"(12, 0) mkBase :: ["A"(8, 2)] -(1)-> "A"(8, 13) mkBase#1 :: ["A"(8, 2)] -(1)-> "A"(8, 13) mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(6, 9) mult#1 :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(6, 9) mult#2 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(6, 9) nil :: [] -(0)-> "A"(7, 6) nil :: [] -(0)-> "A"(0, 1) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(1, 8) nil :: [] -(0)-> "A"(12, 0) nil :: [] -(0)-> "A"(8, 2) nil :: [] -(0)-> "A"(8, 1) nil :: [] -(0)-> "A"(1, 1) nil :: [] -(0)-> "A"(7, 7) nil :: [] -(0)-> "A"(7, 5) nil :: [] -(0)-> "A"(15, 15) nil :: [] -(0)-> "A"(15, 7) nil :: [] -(0)-> "A"(15, 13) nil :: [] -(0)-> "A"(6, 7) split :: ["A"(8, 1)] -(0)-> "A"(8, 1) split#1 :: ["A"(8, 1)] -(0)-> "A"(8, 1) split#2 :: ["A"(1, 1) x "A"(8, 1)] -(8)-> "A"(8, 1) split#3 :: ["A"(8, 1) x "A"(1, 1) x "A"(1, 1)] -(9)-> "A"(8, 1) transAcc :: ["A"(7, 7) x "A"(1, 8)] -(0)-> "A"(0, 1) transAcc#1 :: ["A"(7, 7) x "A"(1, 8)] -(0)-> "A"(0, 1) transpose :: ["A"(8, 1)] -(0)-> "A"(0, 1) transpose#1 :: ["A"(0, 0) x "A"(8, 1)] -(0)-> "A"(0, 1) transpose#2 :: ["A"(8, 1)] -(0)-> "A"(0, 1) transpose#3 :: ["A"(8, 1) x "A"(1, 1)] -(0)-> "A"(0, 1) tuple#2 :: ["A"(1, 1) x "A"(8, 1)] -(0)-> "A"(8, 1) tuple#2 :: ["A"(8, 8) x "A"(8, 8)] -(0)-> "A"(8, 8) tuple#2 :: ["A"(11, 11) x "A"(13, 11)] -(0)-> "A"(13, 11) lineMult# :: ["A"(0, 0) x "A"(0, 1)] -(1)-> "A"(1, 11) lineMult#1# :: ["A"(0, 1) x "A"(0, 0)] -(1)-> "A"(1, 11) matrixMult# :: ["A"(8, 0) x "A"(14, 15)] -(3)-> "A"(0, 0) matrixMult'# :: ["A"(5, 0) x "A"(0, 1)] -(0)-> "A"(0, 4) matrixMult'#1# :: ["A"(5, 0) x "A"(0, 1)] -(0)-> "A"(0, 4) matrixMult3# :: ["A"(14, 14) x "A"(13, 15) x "A"(14, 15)] -(15)-> "A"(0, 0) matrixMultList# :: ["A"(12, 0) x "A"(15, 15)] -(0)-> "A"(0, 0) matrixMultList#1# :: ["A"(15, 15) x "A"(12, 0)] -(0)-> "A"(0, 0) matrixMultOld# :: ["A"(11, 14) x "A"(14, 15)] -(8)-> "A"(0, 2) mult# :: ["A"(0, 0) x "A"(1, 0)] -(1)-> "A"(8, 13) mult#1# :: ["A"(0, 0) x "A"(1, 0)] -(0)-> "A"(1, 1) mult#2# :: ["A"(1, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(3, 3) c_34 :: ["A"(0, 0)] -(0)-> "A"(8, 15) c_35 :: ["A"(2, 1)] -(0)-> "A"(1, 1) c_37 :: ["A"(0, 3)] -(0)-> "A"(3, 3) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(0) "#neg_A" :: ["A"(0)] -(0)-> "A"(0) "#pos_A" :: ["A"(0)] -(0)-> "A"(0) "#s_A" :: ["A"(0)] -(0)-> "A"(0) "::_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) "c_34_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_34_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_35_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_35_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_37_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_37_A" :: ["A"(0)] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(0) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: mult#(@l1,@l2) -> c_34(mult#1#(@l1,@l2)) 2. Weak: WORST_CASE(?,O(n^7))