YES(O(1),O(n^3)) 767.45/212.83 YES(O(1),O(n^3)) 767.45/212.83 767.45/212.83 We are left with following problem, upon which TcT provides the 767.45/212.83 certificate YES(O(1),O(n^3)). 767.45/212.83 767.45/212.83 Strict Trs: 767.45/212.83 { m1(@x) -> 767.45/212.83 ::(::(#abs(#pos(#s(#0()))), 767.45/212.83 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#0()))))), nil()))), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()))), 767.45/212.83 nil())) 767.45/212.83 , matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) 767.45/212.83 , m4(@x) -> 767.45/212.83 ::(::(#abs(#pos(#s(#0()))), nil()), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#0())))), nil()), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#s(#0()))))), nil()), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()), nil())))) 767.45/212.83 , attach(@line, @m) -> attach#1(@line, @m) 767.45/212.83 , split(@m) -> split#1(@m) 767.45/212.83 , matrixMult3(@m1, @m2, @m3) -> 767.45/212.83 matrixMult(matrixMult(@m1, @m2), @m3) 767.45/212.83 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.83 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.83 , transpose'(@m) -> transAcc(@m, makeBase(@m)) 767.45/212.83 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.83 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.83 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.83 , m2(@x) -> 767.45/212.83 ::(::(#abs(#pos(#s(#0()))), ::(#abs(#pos(#s(#s(#0())))), nil())), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#0()))))), nil())), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())), 767.45/212.83 nil()))) 767.45/212.83 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.83 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.83 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.83 , +(@x, @y) -> #add(@x, @y) 767.45/212.83 , transAcc#1(nil(), @base) -> @base 767.45/212.83 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.83 attach(@l, transAcc(@m', @base)) 767.45/212.83 , matrixMultList#1(nil(), @acc) -> @acc 767.45/212.83 , matrixMultList#1(::(@m, @ms), @acc) -> 767.45/212.83 matrixMultList(matrixMult(@acc, @m), @ms) 767.45/212.83 , *(@x, @y) -> #mult(@x, @y) 767.45/212.83 , mkBase#1(nil()) -> nil() 767.45/212.83 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.83 , transpose#3(nil(), @l) -> nil() 767.45/212.83 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.83 , attach#1(nil(), @m) -> nil() 767.45/212.83 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.83 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.83 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.83 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.83 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.83 , matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) 767.45/212.83 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.83 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.83 , mkBase(@m) -> mkBase#1(@m) 767.45/212.83 , makeBase(@m) -> makeBase#1(@m) 767.45/212.83 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.83 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.83 , lineMult#1(nil(), @l) -> nil() 767.45/212.83 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.83 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.83 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.83 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.83 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.83 , makeBase#1(nil()) -> nil() 767.45/212.83 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.83 , m3(@x) -> 767.45/212.83 ::(::(#abs(#pos(#s(#0()))), 767.45/212.83 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.83 nil())) 767.45/212.83 , matrixMult(@m1, @m2) -> 767.45/212.83 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.83 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.83 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.83 , #abs(#0()) -> #0() 767.45/212.83 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.83 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.83 , transpose#1(nil(), @m) -> nil() 767.45/212.83 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.83 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.83 tuple#2(::(@x, @ys), ::(@xs, @m')) } 767.45/212.83 Weak Trs: 767.45/212.83 { #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.83 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.83 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.83 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.83 , #add(#0(), @y) -> @y 767.45/212.83 , #natmult(#0(), @y) -> #0() 767.45/212.83 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.83 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.83 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.83 , #mult(#neg(@x), #0()) -> #0() 767.45/212.83 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.83 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.83 , #mult(#pos(@x), #0()) -> #0() 767.45/212.83 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.83 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.83 , #mult(#0(), #0()) -> #0() 767.45/212.83 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.83 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.83 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.83 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.83 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.83 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.83 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.83 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.83 Obligation: 767.45/212.83 innermost runtime complexity 767.45/212.83 Answer: 767.45/212.83 YES(O(1),O(n^3)) 767.45/212.83 767.45/212.83 We add the following dependency tuples: 767.45/212.83 767.45/212.83 Strict DPs: 767.45/212.83 { m1^#(@x) -> 767.45/212.83 c_1(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.83 , #abs^#(#neg(@x)) -> c_47() 767.45/212.83 , #abs^#(#pos(@x)) -> c_48() 767.45/212.83 , #abs^#(#0()) -> c_49() 767.45/212.83 , #abs^#(#s(@x)) -> c_50() 767.45/212.83 , matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 767.45/212.83 , matrixMultList#1^#(nil(), @acc) -> c_20() 767.45/212.83 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.83 c_21(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.83 matrixMult^#(@acc, @m)) 767.45/212.83 , m4^#(@x) -> 767.45/212.83 c_3(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.83 , attach^#(@line, @m) -> c_4(attach#1^#(@line, @m)) 767.45/212.83 , attach#1^#(nil(), @m) -> c_27() 767.45/212.83 , attach#1^#(::(@x, @xs), @m) -> c_28(attach#2^#(@m, @x, @xs)) 767.45/212.83 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.83 , split#1^#(nil()) -> c_10() 767.45/212.83 , split#1^#(::(@l, @ls)) -> c_11(split#2^#(@l, @ls)) 767.45/212.83 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.83 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.83 matrixMult^#(@m1, @m2)) 767.45/212.83 , matrixMult^#(@m1, @m2) -> 767.45/212.83 c_46(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.83 transAcc^#(@m2, makeBase(@m2)), 767.45/212.83 makeBase^#(@m2)) 767.45/212.83 , mult#2^#(nil(), @x, @xs) -> c_7(#abs^#(#0())) 767.45/212.83 , mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.83 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.83 , +^#(@x, @y) -> c_17(#add^#(@x, @y)) 767.45/212.83 , *^#(@x, @y) -> c_22(#mult^#(@x, @y)) 767.45/212.83 , mult^#(@l1, @l2) -> c_16(mult#1^#(@l1, @l2)) 767.45/212.83 , transpose'^#(@m) -> 767.45/212.83 c_9(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.83 , transAcc^#(@m, @base) -> c_15(transAcc#1^#(@m, @base)) 767.45/212.83 , makeBase^#(@m) -> c_36(makeBase#1^#(@m)) 767.45/212.83 , split#2^#(nil(), @ls) -> c_33() 767.45/212.83 , split#2^#(::(@x, @xs), @ls) -> 767.45/212.83 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) 767.45/212.83 , transpose^#(@m) -> c_12(transpose#1^#(@m, @m)) 767.45/212.83 , transpose#1^#(nil(), @m) -> c_52() 767.45/212.83 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.83 c_53(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.83 , m2^#(@x) -> 767.45/212.83 c_13(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.83 , matrixMult'^#(@m1, @m2) -> c_14(matrixMult'#1^#(@m1, @m2)) 767.45/212.83 , matrixMult'#1^#(nil(), @m2) -> c_30() 767.45/212.83 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.83 c_31(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.83 , transAcc#1^#(nil(), @base) -> c_18() 767.45/212.83 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.83 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.83 , mult#1^#(nil(), @l2) -> c_37(#abs^#(#0())) 767.45/212.83 , mult#1^#(::(@x, @xs), @l2) -> c_38(mult#2^#(@l2, @x, @xs)) 767.45/212.83 , mkBase#1^#(nil()) -> c_23() 767.45/212.83 , mkBase#1^#(::(@l, @m')) -> c_24(mkBase^#(@m')) 767.45/212.83 , mkBase^#(@m) -> c_35(mkBase#1^#(@m)) 767.45/212.83 , transpose#3^#(nil(), @l) -> c_25() 767.45/212.83 , transpose#3^#(::(@y, @ys), @l) -> c_26(transpose^#(::(@y, @ys))) 767.45/212.83 , attach#2^#(nil(), @x, @xs) -> c_41() 767.45/212.83 , attach#2^#(::(@l, @ls), @x, @xs) -> c_42(attach^#(@xs, @ls)) 767.45/212.83 , transpose#2^#(tuple#2(@l, @m')) -> c_29(transpose#3^#(@m', @l)) 767.45/212.83 , lineMult^#(@l, @m2) -> c_51(lineMult#1^#(@m2, @l)) 767.45/212.83 , matrixMultOld^#(@m1, @m2) -> 767.45/212.83 c_32(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.83 , split#3^#(tuple#2(@ys, @m'), @x, @xs) -> c_54() 767.45/212.83 , makeBase#1^#(nil()) -> c_43() 767.45/212.83 , makeBase#1^#(::(@l, @m')) -> c_44(mkBase^#(@l)) 767.45/212.83 , lineMult#1^#(nil(), @l) -> c_39() 767.45/212.83 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.83 c_40(mult^#(@l, @x), lineMult^#(@l, @xs)) 767.45/212.83 , m3^#(@x) -> 767.45/212.83 c_45(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#s(#0()))))))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) } 767.45/212.83 Weak DPs: 767.45/212.83 { #add^#(#neg(#s(#0())), @y) -> c_55(#pred^#(@y)) 767.45/212.83 , #add^#(#neg(#s(#s(@x))), @y) -> 767.45/212.83 c_56(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.83 , #add^#(#pos(#s(#0())), @y) -> c_57(#succ^#(@y)) 767.45/212.83 , #add^#(#pos(#s(#s(@x))), @y) -> 767.45/212.83 c_58(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.83 , #add^#(#0(), @y) -> c_59() 767.45/212.83 , #mult^#(#neg(@x), #neg(@y)) -> c_62(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#neg(@x), #pos(@y)) -> c_63(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#neg(@x), #0()) -> c_64() 767.45/212.83 , #mult^#(#pos(@x), #neg(@y)) -> c_65(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#pos(@x), #pos(@y)) -> c_66(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#pos(@x), #0()) -> c_67() 767.45/212.83 , #mult^#(#0(), #neg(@y)) -> c_68() 767.45/212.83 , #mult^#(#0(), #pos(@y)) -> c_69() 767.45/212.83 , #mult^#(#0(), #0()) -> c_70() 767.45/212.83 , #pred^#(#neg(#s(@x))) -> c_75() 767.45/212.83 , #pred^#(#pos(#s(#0()))) -> c_76() 767.45/212.83 , #pred^#(#pos(#s(#s(@x)))) -> c_77() 767.45/212.83 , #pred^#(#0()) -> c_78() 767.45/212.83 , #succ^#(#neg(#s(#0()))) -> c_71() 767.45/212.83 , #succ^#(#neg(#s(#s(@x)))) -> c_72() 767.45/212.83 , #succ^#(#pos(#s(@x))) -> c_73() 767.45/212.83 , #succ^#(#0()) -> c_74() 767.45/212.83 , #natmult^#(#0(), @y) -> c_60() 767.45/212.83 , #natmult^#(#s(@x), @y) -> 767.45/212.83 c_61(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) } 767.45/212.83 767.45/212.83 and mark the set of starting terms. 767.45/212.83 767.45/212.83 We are left with following problem, upon which TcT provides the 767.45/212.83 certificate YES(O(1),O(n^3)). 767.45/212.83 767.45/212.83 Strict DPs: 767.45/212.83 { m1^#(@x) -> 767.45/212.83 c_1(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.83 , #abs^#(#neg(@x)) -> c_47() 767.45/212.83 , #abs^#(#pos(@x)) -> c_48() 767.45/212.83 , #abs^#(#0()) -> c_49() 767.45/212.83 , #abs^#(#s(@x)) -> c_50() 767.45/212.83 , matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 767.45/212.83 , matrixMultList#1^#(nil(), @acc) -> c_20() 767.45/212.83 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.83 c_21(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.83 matrixMult^#(@acc, @m)) 767.45/212.83 , m4^#(@x) -> 767.45/212.83 c_3(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.83 , attach^#(@line, @m) -> c_4(attach#1^#(@line, @m)) 767.45/212.83 , attach#1^#(nil(), @m) -> c_27() 767.45/212.83 , attach#1^#(::(@x, @xs), @m) -> c_28(attach#2^#(@m, @x, @xs)) 767.45/212.83 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.83 , split#1^#(nil()) -> c_10() 767.45/212.83 , split#1^#(::(@l, @ls)) -> c_11(split#2^#(@l, @ls)) 767.45/212.83 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.83 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.83 matrixMult^#(@m1, @m2)) 767.45/212.83 , matrixMult^#(@m1, @m2) -> 767.45/212.83 c_46(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.83 transAcc^#(@m2, makeBase(@m2)), 767.45/212.83 makeBase^#(@m2)) 767.45/212.83 , mult#2^#(nil(), @x, @xs) -> c_7(#abs^#(#0())) 767.45/212.83 , mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.83 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.83 , +^#(@x, @y) -> c_17(#add^#(@x, @y)) 767.45/212.83 , *^#(@x, @y) -> c_22(#mult^#(@x, @y)) 767.45/212.83 , mult^#(@l1, @l2) -> c_16(mult#1^#(@l1, @l2)) 767.45/212.83 , transpose'^#(@m) -> 767.45/212.83 c_9(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.83 , transAcc^#(@m, @base) -> c_15(transAcc#1^#(@m, @base)) 767.45/212.83 , makeBase^#(@m) -> c_36(makeBase#1^#(@m)) 767.45/212.83 , split#2^#(nil(), @ls) -> c_33() 767.45/212.83 , split#2^#(::(@x, @xs), @ls) -> 767.45/212.83 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) 767.45/212.83 , transpose^#(@m) -> c_12(transpose#1^#(@m, @m)) 767.45/212.83 , transpose#1^#(nil(), @m) -> c_52() 767.45/212.83 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.83 c_53(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.83 , m2^#(@x) -> 767.45/212.83 c_13(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.83 , matrixMult'^#(@m1, @m2) -> c_14(matrixMult'#1^#(@m1, @m2)) 767.45/212.83 , matrixMult'#1^#(nil(), @m2) -> c_30() 767.45/212.83 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.83 c_31(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.83 , transAcc#1^#(nil(), @base) -> c_18() 767.45/212.83 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.83 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.83 , mult#1^#(nil(), @l2) -> c_37(#abs^#(#0())) 767.45/212.83 , mult#1^#(::(@x, @xs), @l2) -> c_38(mult#2^#(@l2, @x, @xs)) 767.45/212.83 , mkBase#1^#(nil()) -> c_23() 767.45/212.83 , mkBase#1^#(::(@l, @m')) -> c_24(mkBase^#(@m')) 767.45/212.83 , mkBase^#(@m) -> c_35(mkBase#1^#(@m)) 767.45/212.83 , transpose#3^#(nil(), @l) -> c_25() 767.45/212.83 , transpose#3^#(::(@y, @ys), @l) -> c_26(transpose^#(::(@y, @ys))) 767.45/212.83 , attach#2^#(nil(), @x, @xs) -> c_41() 767.45/212.83 , attach#2^#(::(@l, @ls), @x, @xs) -> c_42(attach^#(@xs, @ls)) 767.45/212.83 , transpose#2^#(tuple#2(@l, @m')) -> c_29(transpose#3^#(@m', @l)) 767.45/212.83 , lineMult^#(@l, @m2) -> c_51(lineMult#1^#(@m2, @l)) 767.45/212.83 , matrixMultOld^#(@m1, @m2) -> 767.45/212.83 c_32(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.83 , split#3^#(tuple#2(@ys, @m'), @x, @xs) -> c_54() 767.45/212.83 , makeBase#1^#(nil()) -> c_43() 767.45/212.83 , makeBase#1^#(::(@l, @m')) -> c_44(mkBase^#(@l)) 767.45/212.83 , lineMult#1^#(nil(), @l) -> c_39() 767.45/212.83 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.83 c_40(mult^#(@l, @x), lineMult^#(@l, @xs)) 767.45/212.83 , m3^#(@x) -> 767.45/212.83 c_45(#abs^#(#pos(#s(#0()))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#s(#0()))))))), 767.45/212.83 #abs^#(#pos(#s(#s(#0())))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.83 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) } 767.45/212.83 Weak DPs: 767.45/212.83 { #add^#(#neg(#s(#0())), @y) -> c_55(#pred^#(@y)) 767.45/212.83 , #add^#(#neg(#s(#s(@x))), @y) -> 767.45/212.83 c_56(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.83 , #add^#(#pos(#s(#0())), @y) -> c_57(#succ^#(@y)) 767.45/212.83 , #add^#(#pos(#s(#s(@x))), @y) -> 767.45/212.83 c_58(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.83 , #add^#(#0(), @y) -> c_59() 767.45/212.83 , #mult^#(#neg(@x), #neg(@y)) -> c_62(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#neg(@x), #pos(@y)) -> c_63(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#neg(@x), #0()) -> c_64() 767.45/212.83 , #mult^#(#pos(@x), #neg(@y)) -> c_65(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#pos(@x), #pos(@y)) -> c_66(#natmult^#(@x, @y)) 767.45/212.83 , #mult^#(#pos(@x), #0()) -> c_67() 767.45/212.83 , #mult^#(#0(), #neg(@y)) -> c_68() 767.45/212.83 , #mult^#(#0(), #pos(@y)) -> c_69() 767.45/212.83 , #mult^#(#0(), #0()) -> c_70() 767.45/212.83 , #pred^#(#neg(#s(@x))) -> c_75() 767.45/212.83 , #pred^#(#pos(#s(#0()))) -> c_76() 767.45/212.83 , #pred^#(#pos(#s(#s(@x)))) -> c_77() 767.45/212.83 , #pred^#(#0()) -> c_78() 767.45/212.83 , #succ^#(#neg(#s(#0()))) -> c_71() 767.45/212.83 , #succ^#(#neg(#s(#s(@x)))) -> c_72() 767.45/212.83 , #succ^#(#pos(#s(@x))) -> c_73() 767.45/212.83 , #succ^#(#0()) -> c_74() 767.45/212.83 , #natmult^#(#0(), @y) -> c_60() 767.45/212.83 , #natmult^#(#s(@x), @y) -> 767.45/212.83 c_61(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) } 767.45/212.83 Weak Trs: 767.45/212.83 { m1(@x) -> 767.45/212.83 ::(::(#abs(#pos(#s(#0()))), 767.45/212.83 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#0()))))), nil()))), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.83 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()))), 767.45/212.83 nil())) 767.45/212.83 , matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) 767.45/212.83 , m4(@x) -> 767.45/212.83 ::(::(#abs(#pos(#s(#0()))), nil()), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#0())))), nil()), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#s(#0()))))), nil()), 767.45/212.83 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()), nil())))) 767.45/212.83 , attach(@line, @m) -> attach#1(@line, @m) 767.45/212.83 , split(@m) -> split#1(@m) 767.45/212.84 , matrixMult3(@m1, @m2, @m3) -> 767.45/212.84 matrixMult(matrixMult(@m1, @m2), @m3) 767.45/212.84 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.84 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.84 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.84 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.84 , #add(#0(), @y) -> @y 767.45/212.84 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.84 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.84 , transpose'(@m) -> transAcc(@m, makeBase(@m)) 767.45/212.84 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.84 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.84 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.84 , m2(@x) -> 767.45/212.84 ::(::(#abs(#pos(#s(#0()))), ::(#abs(#pos(#s(#s(#0())))), nil())), 767.45/212.84 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#0()))))), nil())), 767.45/212.84 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())), 767.45/212.84 nil()))) 767.45/212.84 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.84 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.84 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.84 , +(@x, @y) -> #add(@x, @y) 767.45/212.84 , transAcc#1(nil(), @base) -> @base 767.45/212.84 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.84 attach(@l, transAcc(@m', @base)) 767.45/212.84 , matrixMultList#1(nil(), @acc) -> @acc 767.45/212.84 , matrixMultList#1(::(@m, @ms), @acc) -> 767.45/212.84 matrixMultList(matrixMult(@acc, @m), @ms) 767.45/212.84 , *(@x, @y) -> #mult(@x, @y) 767.45/212.84 , mkBase#1(nil()) -> nil() 767.45/212.84 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.84 , transpose#3(nil(), @l) -> nil() 767.45/212.84 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.84 , attach#1(nil(), @m) -> nil() 767.45/212.84 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.84 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.84 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.84 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.84 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.84 , #natmult(#0(), @y) -> #0() 767.45/212.84 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.84 , matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) 767.45/212.84 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.84 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.84 , mkBase(@m) -> mkBase#1(@m) 767.45/212.84 , makeBase(@m) -> makeBase#1(@m) 767.45/212.84 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.84 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.84 , lineMult#1(nil(), @l) -> nil() 767.45/212.84 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.84 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.84 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.84 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.84 , #mult(#neg(@x), #0()) -> #0() 767.45/212.84 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.84 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.84 , #mult(#pos(@x), #0()) -> #0() 767.45/212.84 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.84 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.84 , #mult(#0(), #0()) -> #0() 767.45/212.84 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.84 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.84 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.84 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.84 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.84 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.84 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.84 , makeBase#1(nil()) -> nil() 767.45/212.84 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.84 , m3(@x) -> 767.45/212.84 ::(::(#abs(#pos(#s(#0()))), 767.45/212.84 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.84 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.84 nil())) 767.45/212.84 , matrixMult(@m1, @m2) -> 767.45/212.84 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.84 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.84 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.84 , #abs(#0()) -> #0() 767.45/212.84 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.84 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.84 , transpose#1(nil(), @m) -> nil() 767.45/212.84 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.84 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.84 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.84 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.84 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.84 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.84 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.84 Obligation: 767.45/212.84 innermost runtime complexity 767.45/212.84 Answer: 767.45/212.84 YES(O(1),O(n^3)) 767.45/212.84 767.45/212.84 We estimate the number of application of 767.45/212.84 {2,3,4,5,7,11,14,20,21,26,29,33,35,39,42,44,49,50,52} by 767.45/212.84 applications of 767.45/212.84 Pre({2,3,4,5,7,11,14,20,21,26,29,33,35,39,42,44,49,50,52}) = 767.45/212.84 {1,6,9,10,12,13,15,18,19,24,25,27,28,31,32,37,41,46,47,54}. Here 767.45/212.84 rules are labeled as follows: 767.45/212.84 767.45/212.84 DPs: 767.45/212.84 { 1: m1^#(@x) -> 767.45/212.84 c_1(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.84 , 2: #abs^#(#neg(@x)) -> c_47() 767.45/212.84 , 3: #abs^#(#pos(@x)) -> c_48() 767.45/212.84 , 4: #abs^#(#0()) -> c_49() 767.45/212.84 , 5: #abs^#(#s(@x)) -> c_50() 767.45/212.84 , 6: matrixMultList^#(@acc, @mm) -> 767.45/212.84 c_2(matrixMultList#1^#(@mm, @acc)) 767.45/212.84 , 7: matrixMultList#1^#(nil(), @acc) -> c_20() 767.45/212.84 , 8: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.84 c_21(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.84 matrixMult^#(@acc, @m)) 767.45/212.84 , 9: m4^#(@x) -> 767.45/212.84 c_3(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.84 , 10: attach^#(@line, @m) -> c_4(attach#1^#(@line, @m)) 767.45/212.84 , 11: attach#1^#(nil(), @m) -> c_27() 767.45/212.84 , 12: attach#1^#(::(@x, @xs), @m) -> c_28(attach#2^#(@m, @x, @xs)) 767.45/212.84 , 13: split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.84 , 14: split#1^#(nil()) -> c_10() 767.45/212.84 , 15: split#1^#(::(@l, @ls)) -> c_11(split#2^#(@l, @ls)) 767.45/212.84 , 16: matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.84 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.84 matrixMult^#(@m1, @m2)) 767.45/212.84 , 17: matrixMult^#(@m1, @m2) -> 767.45/212.84 c_46(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.84 transAcc^#(@m2, makeBase(@m2)), 767.45/212.84 makeBase^#(@m2)) 767.45/212.84 , 18: mult#2^#(nil(), @x, @xs) -> c_7(#abs^#(#0())) 767.45/212.84 , 19: mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.84 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.84 , 20: +^#(@x, @y) -> c_17(#add^#(@x, @y)) 767.45/212.84 , 21: *^#(@x, @y) -> c_22(#mult^#(@x, @y)) 767.45/212.84 , 22: mult^#(@l1, @l2) -> c_16(mult#1^#(@l1, @l2)) 767.45/212.84 , 23: transpose'^#(@m) -> 767.45/212.84 c_9(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.84 , 24: transAcc^#(@m, @base) -> c_15(transAcc#1^#(@m, @base)) 767.45/212.84 , 25: makeBase^#(@m) -> c_36(makeBase#1^#(@m)) 767.45/212.84 , 26: split#2^#(nil(), @ls) -> c_33() 767.45/212.84 , 27: split#2^#(::(@x, @xs), @ls) -> 767.45/212.84 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) 767.45/212.84 , 28: transpose^#(@m) -> c_12(transpose#1^#(@m, @m)) 767.45/212.84 , 29: transpose#1^#(nil(), @m) -> c_52() 767.45/212.84 , 30: transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.84 c_53(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.84 , 31: m2^#(@x) -> 767.45/212.84 c_13(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.84 , 32: matrixMult'^#(@m1, @m2) -> c_14(matrixMult'#1^#(@m1, @m2)) 767.45/212.84 , 33: matrixMult'#1^#(nil(), @m2) -> c_30() 767.45/212.84 , 34: matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.84 c_31(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.84 , 35: transAcc#1^#(nil(), @base) -> c_18() 767.45/212.84 , 36: transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.84 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.84 , 37: mult#1^#(nil(), @l2) -> c_37(#abs^#(#0())) 767.45/212.84 , 38: mult#1^#(::(@x, @xs), @l2) -> c_38(mult#2^#(@l2, @x, @xs)) 767.45/212.84 , 39: mkBase#1^#(nil()) -> c_23() 767.45/212.84 , 40: mkBase#1^#(::(@l, @m')) -> c_24(mkBase^#(@m')) 767.45/212.84 , 41: mkBase^#(@m) -> c_35(mkBase#1^#(@m)) 767.45/212.84 , 42: transpose#3^#(nil(), @l) -> c_25() 767.45/212.84 , 43: transpose#3^#(::(@y, @ys), @l) -> 767.45/212.84 c_26(transpose^#(::(@y, @ys))) 767.45/212.84 , 44: attach#2^#(nil(), @x, @xs) -> c_41() 767.45/212.84 , 45: attach#2^#(::(@l, @ls), @x, @xs) -> c_42(attach^#(@xs, @ls)) 767.45/212.84 , 46: transpose#2^#(tuple#2(@l, @m')) -> 767.45/212.84 c_29(transpose#3^#(@m', @l)) 767.45/212.84 , 47: lineMult^#(@l, @m2) -> c_51(lineMult#1^#(@m2, @l)) 767.45/212.84 , 48: matrixMultOld^#(@m1, @m2) -> 767.45/212.84 c_32(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.84 , 49: split#3^#(tuple#2(@ys, @m'), @x, @xs) -> c_54() 767.45/212.84 , 50: makeBase#1^#(nil()) -> c_43() 767.45/212.84 , 51: makeBase#1^#(::(@l, @m')) -> c_44(mkBase^#(@l)) 767.45/212.84 , 52: lineMult#1^#(nil(), @l) -> c_39() 767.45/212.84 , 53: lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.84 c_40(mult^#(@l, @x), lineMult^#(@l, @xs)) 767.45/212.84 , 54: m3^#(@x) -> 767.45/212.84 c_45(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#s(#0()))))))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.84 , 55: #add^#(#neg(#s(#0())), @y) -> c_55(#pred^#(@y)) 767.45/212.84 , 56: #add^#(#neg(#s(#s(@x))), @y) -> 767.45/212.84 c_56(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.84 , 57: #add^#(#pos(#s(#0())), @y) -> c_57(#succ^#(@y)) 767.45/212.84 , 58: #add^#(#pos(#s(#s(@x))), @y) -> 767.45/212.84 c_58(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.84 , 59: #add^#(#0(), @y) -> c_59() 767.45/212.84 , 60: #mult^#(#neg(@x), #neg(@y)) -> c_62(#natmult^#(@x, @y)) 767.45/212.84 , 61: #mult^#(#neg(@x), #pos(@y)) -> c_63(#natmult^#(@x, @y)) 767.45/212.84 , 62: #mult^#(#neg(@x), #0()) -> c_64() 767.45/212.84 , 63: #mult^#(#pos(@x), #neg(@y)) -> c_65(#natmult^#(@x, @y)) 767.45/212.84 , 64: #mult^#(#pos(@x), #pos(@y)) -> c_66(#natmult^#(@x, @y)) 767.45/212.84 , 65: #mult^#(#pos(@x), #0()) -> c_67() 767.45/212.84 , 66: #mult^#(#0(), #neg(@y)) -> c_68() 767.45/212.84 , 67: #mult^#(#0(), #pos(@y)) -> c_69() 767.45/212.84 , 68: #mult^#(#0(), #0()) -> c_70() 767.45/212.84 , 69: #pred^#(#neg(#s(@x))) -> c_75() 767.45/212.84 , 70: #pred^#(#pos(#s(#0()))) -> c_76() 767.45/212.84 , 71: #pred^#(#pos(#s(#s(@x)))) -> c_77() 767.45/212.84 , 72: #pred^#(#0()) -> c_78() 767.45/212.84 , 73: #succ^#(#neg(#s(#0()))) -> c_71() 767.45/212.84 , 74: #succ^#(#neg(#s(#s(@x)))) -> c_72() 767.45/212.84 , 75: #succ^#(#pos(#s(@x))) -> c_73() 767.45/212.84 , 76: #succ^#(#0()) -> c_74() 767.45/212.84 , 77: #natmult^#(#0(), @y) -> c_60() 767.45/212.84 , 78: #natmult^#(#s(@x), @y) -> 767.45/212.84 c_61(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) } 767.45/212.84 767.45/212.84 We are left with following problem, upon which TcT provides the 767.45/212.84 certificate YES(O(1),O(n^3)). 767.45/212.84 767.45/212.84 Strict DPs: 767.45/212.84 { m1^#(@x) -> 767.45/212.84 c_1(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.84 , matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 767.45/212.84 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.84 c_21(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.84 matrixMult^#(@acc, @m)) 767.45/212.84 , m4^#(@x) -> 767.45/212.84 c_3(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.84 , attach^#(@line, @m) -> c_4(attach#1^#(@line, @m)) 767.45/212.84 , attach#1^#(::(@x, @xs), @m) -> c_28(attach#2^#(@m, @x, @xs)) 767.45/212.84 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.84 , split#1^#(::(@l, @ls)) -> c_11(split#2^#(@l, @ls)) 767.45/212.84 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.84 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.84 matrixMult^#(@m1, @m2)) 767.45/212.84 , matrixMult^#(@m1, @m2) -> 767.45/212.84 c_46(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.84 transAcc^#(@m2, makeBase(@m2)), 767.45/212.84 makeBase^#(@m2)) 767.45/212.84 , mult#2^#(nil(), @x, @xs) -> c_7(#abs^#(#0())) 767.45/212.84 , mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.84 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.84 , mult^#(@l1, @l2) -> c_16(mult#1^#(@l1, @l2)) 767.45/212.84 , transpose'^#(@m) -> 767.45/212.84 c_9(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.84 , transAcc^#(@m, @base) -> c_15(transAcc#1^#(@m, @base)) 767.45/212.84 , makeBase^#(@m) -> c_36(makeBase#1^#(@m)) 767.45/212.84 , split#2^#(::(@x, @xs), @ls) -> 767.45/212.84 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) 767.45/212.84 , transpose^#(@m) -> c_12(transpose#1^#(@m, @m)) 767.45/212.84 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.84 c_53(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.84 , m2^#(@x) -> 767.45/212.84 c_13(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.84 , matrixMult'^#(@m1, @m2) -> c_14(matrixMult'#1^#(@m1, @m2)) 767.45/212.84 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.84 c_31(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.84 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.84 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.84 , mult#1^#(nil(), @l2) -> c_37(#abs^#(#0())) 767.45/212.84 , mult#1^#(::(@x, @xs), @l2) -> c_38(mult#2^#(@l2, @x, @xs)) 767.45/212.84 , mkBase#1^#(::(@l, @m')) -> c_24(mkBase^#(@m')) 767.45/212.84 , mkBase^#(@m) -> c_35(mkBase#1^#(@m)) 767.45/212.84 , transpose#3^#(::(@y, @ys), @l) -> c_26(transpose^#(::(@y, @ys))) 767.45/212.84 , attach#2^#(::(@l, @ls), @x, @xs) -> c_42(attach^#(@xs, @ls)) 767.45/212.84 , transpose#2^#(tuple#2(@l, @m')) -> c_29(transpose#3^#(@m', @l)) 767.45/212.84 , lineMult^#(@l, @m2) -> c_51(lineMult#1^#(@m2, @l)) 767.45/212.84 , matrixMultOld^#(@m1, @m2) -> 767.45/212.84 c_32(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.84 , makeBase#1^#(::(@l, @m')) -> c_44(mkBase^#(@l)) 767.45/212.84 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.84 c_40(mult^#(@l, @x), lineMult^#(@l, @xs)) 767.45/212.84 , m3^#(@x) -> 767.45/212.84 c_45(#abs^#(#pos(#s(#0()))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#s(#0()))))))), 767.45/212.84 #abs^#(#pos(#s(#s(#0())))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.84 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) } 767.45/212.84 Weak DPs: 767.45/212.84 { #abs^#(#neg(@x)) -> c_47() 767.45/212.84 , #abs^#(#pos(@x)) -> c_48() 767.45/212.84 , #abs^#(#0()) -> c_49() 767.45/212.84 , #abs^#(#s(@x)) -> c_50() 767.45/212.84 , matrixMultList#1^#(nil(), @acc) -> c_20() 767.45/212.84 , attach#1^#(nil(), @m) -> c_27() 767.45/212.84 , split#1^#(nil()) -> c_10() 767.45/212.84 , +^#(@x, @y) -> c_17(#add^#(@x, @y)) 767.45/212.84 , *^#(@x, @y) -> c_22(#mult^#(@x, @y)) 767.45/212.84 , split#2^#(nil(), @ls) -> c_33() 767.45/212.84 , transpose#1^#(nil(), @m) -> c_52() 767.45/212.84 , matrixMult'#1^#(nil(), @m2) -> c_30() 767.45/212.84 , transAcc#1^#(nil(), @base) -> c_18() 767.45/212.84 , #add^#(#neg(#s(#0())), @y) -> c_55(#pred^#(@y)) 767.45/212.84 , #add^#(#neg(#s(#s(@x))), @y) -> 767.45/212.84 c_56(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.84 , #add^#(#pos(#s(#0())), @y) -> c_57(#succ^#(@y)) 767.45/212.84 , #add^#(#pos(#s(#s(@x))), @y) -> 767.45/212.84 c_58(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.84 , #add^#(#0(), @y) -> c_59() 767.45/212.84 , #mult^#(#neg(@x), #neg(@y)) -> c_62(#natmult^#(@x, @y)) 767.45/212.84 , #mult^#(#neg(@x), #pos(@y)) -> c_63(#natmult^#(@x, @y)) 767.45/212.84 , #mult^#(#neg(@x), #0()) -> c_64() 767.45/212.84 , #mult^#(#pos(@x), #neg(@y)) -> c_65(#natmult^#(@x, @y)) 767.45/212.84 , #mult^#(#pos(@x), #pos(@y)) -> c_66(#natmult^#(@x, @y)) 767.45/212.84 , #mult^#(#pos(@x), #0()) -> c_67() 767.45/212.84 , #mult^#(#0(), #neg(@y)) -> c_68() 767.45/212.84 , #mult^#(#0(), #pos(@y)) -> c_69() 767.45/212.84 , #mult^#(#0(), #0()) -> c_70() 767.45/212.84 , mkBase#1^#(nil()) -> c_23() 767.45/212.84 , transpose#3^#(nil(), @l) -> c_25() 767.45/212.84 , attach#2^#(nil(), @x, @xs) -> c_41() 767.45/212.84 , split#3^#(tuple#2(@ys, @m'), @x, @xs) -> c_54() 767.45/212.84 , makeBase#1^#(nil()) -> c_43() 767.45/212.84 , lineMult#1^#(nil(), @l) -> c_39() 767.45/212.84 , #pred^#(#neg(#s(@x))) -> c_75() 767.45/212.84 , #pred^#(#pos(#s(#0()))) -> c_76() 767.45/212.84 , #pred^#(#pos(#s(#s(@x)))) -> c_77() 767.45/212.84 , #pred^#(#0()) -> c_78() 767.45/212.84 , #succ^#(#neg(#s(#0()))) -> c_71() 767.45/212.84 , #succ^#(#neg(#s(#s(@x)))) -> c_72() 767.45/212.84 , #succ^#(#pos(#s(@x))) -> c_73() 767.45/212.84 , #succ^#(#0()) -> c_74() 767.45/212.84 , #natmult^#(#0(), @y) -> c_60() 767.45/212.84 , #natmult^#(#s(@x), @y) -> 767.45/212.84 c_61(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) } 767.45/212.84 Weak Trs: 767.45/212.84 { m1(@x) -> 767.45/212.84 ::(::(#abs(#pos(#s(#0()))), 767.45/212.84 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#0()))))), nil()))), 767.45/212.84 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.84 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()))), 767.45/212.84 nil())) 767.45/212.84 , matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) 767.45/212.84 , m4(@x) -> 767.45/212.84 ::(::(#abs(#pos(#s(#0()))), nil()), 767.45/212.84 ::(::(#abs(#pos(#s(#s(#0())))), nil()), 767.45/212.84 ::(::(#abs(#pos(#s(#s(#s(#0()))))), nil()), 767.45/212.84 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()), nil())))) 767.45/212.85 , attach(@line, @m) -> attach#1(@line, @m) 767.45/212.85 , split(@m) -> split#1(@m) 767.45/212.85 , matrixMult3(@m1, @m2, @m3) -> 767.45/212.85 matrixMult(matrixMult(@m1, @m2), @m3) 767.45/212.85 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.85 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.85 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.85 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.85 , #add(#0(), @y) -> @y 767.45/212.85 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.85 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.85 , transpose'(@m) -> transAcc(@m, makeBase(@m)) 767.45/212.85 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.85 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.85 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.85 , m2(@x) -> 767.45/212.85 ::(::(#abs(#pos(#s(#0()))), ::(#abs(#pos(#s(#s(#0())))), nil())), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#0()))))), nil())), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())), 767.45/212.85 nil()))) 767.45/212.85 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.85 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.85 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.85 , +(@x, @y) -> #add(@x, @y) 767.45/212.85 , transAcc#1(nil(), @base) -> @base 767.45/212.85 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.85 attach(@l, transAcc(@m', @base)) 767.45/212.85 , matrixMultList#1(nil(), @acc) -> @acc 767.45/212.85 , matrixMultList#1(::(@m, @ms), @acc) -> 767.45/212.85 matrixMultList(matrixMult(@acc, @m), @ms) 767.45/212.85 , *(@x, @y) -> #mult(@x, @y) 767.45/212.85 , mkBase#1(nil()) -> nil() 767.45/212.85 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.85 , transpose#3(nil(), @l) -> nil() 767.45/212.85 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.85 , attach#1(nil(), @m) -> nil() 767.45/212.85 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.85 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.85 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.85 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.85 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.85 , #natmult(#0(), @y) -> #0() 767.45/212.85 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.85 , matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) 767.45/212.85 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.85 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.85 , mkBase(@m) -> mkBase#1(@m) 767.45/212.85 , makeBase(@m) -> makeBase#1(@m) 767.45/212.85 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.85 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.85 , lineMult#1(nil(), @l) -> nil() 767.45/212.85 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.85 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.85 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.85 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.85 , #mult(#neg(@x), #0()) -> #0() 767.45/212.85 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.85 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.85 , #mult(#pos(@x), #0()) -> #0() 767.45/212.85 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.85 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.85 , #mult(#0(), #0()) -> #0() 767.45/212.85 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.85 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.85 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.85 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.85 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.85 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.85 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.85 , makeBase#1(nil()) -> nil() 767.45/212.85 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.85 , m3(@x) -> 767.45/212.85 ::(::(#abs(#pos(#s(#0()))), 767.45/212.85 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.85 nil())) 767.45/212.85 , matrixMult(@m1, @m2) -> 767.45/212.85 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.85 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.85 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.85 , #abs(#0()) -> #0() 767.45/212.85 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.85 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.85 , transpose#1(nil(), @m) -> nil() 767.45/212.85 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.85 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.85 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.85 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.85 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.85 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.85 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.85 Obligation: 767.45/212.85 innermost runtime complexity 767.45/212.85 Answer: 767.45/212.85 YES(O(1),O(n^3)) 767.45/212.85 767.45/212.85 We estimate the number of application of {1,4,11,20,24,35} by 767.45/212.85 applications of Pre({1,4,11,20,24,35}) = {13,25}. Here rules are 767.45/212.85 labeled as follows: 767.45/212.85 767.45/212.85 DPs: 767.45/212.85 { 1: m1^#(@x) -> 767.45/212.85 c_1(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.85 , 2: matrixMultList^#(@acc, @mm) -> 767.45/212.85 c_2(matrixMultList#1^#(@mm, @acc)) 767.45/212.85 , 3: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.85 c_21(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.85 matrixMult^#(@acc, @m)) 767.45/212.85 , 4: m4^#(@x) -> 767.45/212.85 c_3(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.85 , 5: attach^#(@line, @m) -> c_4(attach#1^#(@line, @m)) 767.45/212.85 , 6: attach#1^#(::(@x, @xs), @m) -> c_28(attach#2^#(@m, @x, @xs)) 767.45/212.85 , 7: split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.85 , 8: split#1^#(::(@l, @ls)) -> c_11(split#2^#(@l, @ls)) 767.45/212.85 , 9: matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.85 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.85 matrixMult^#(@m1, @m2)) 767.45/212.85 , 10: matrixMult^#(@m1, @m2) -> 767.45/212.85 c_46(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.85 transAcc^#(@m2, makeBase(@m2)), 767.45/212.85 makeBase^#(@m2)) 767.45/212.85 , 11: mult#2^#(nil(), @x, @xs) -> c_7(#abs^#(#0())) 767.45/212.85 , 12: mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.85 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.85 , 13: mult^#(@l1, @l2) -> c_16(mult#1^#(@l1, @l2)) 767.45/212.85 , 14: transpose'^#(@m) -> 767.45/212.85 c_9(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.85 , 15: transAcc^#(@m, @base) -> c_15(transAcc#1^#(@m, @base)) 767.45/212.85 , 16: makeBase^#(@m) -> c_36(makeBase#1^#(@m)) 767.45/212.85 , 17: split#2^#(::(@x, @xs), @ls) -> 767.45/212.85 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) 767.45/212.85 , 18: transpose^#(@m) -> c_12(transpose#1^#(@m, @m)) 767.45/212.85 , 19: transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.85 c_53(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.85 , 20: m2^#(@x) -> 767.45/212.85 c_13(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.85 , 21: matrixMult'^#(@m1, @m2) -> c_14(matrixMult'#1^#(@m1, @m2)) 767.45/212.85 , 22: matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.85 c_31(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.85 , 23: transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.85 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.85 , 24: mult#1^#(nil(), @l2) -> c_37(#abs^#(#0())) 767.45/212.85 , 25: mult#1^#(::(@x, @xs), @l2) -> c_38(mult#2^#(@l2, @x, @xs)) 767.45/212.85 , 26: mkBase#1^#(::(@l, @m')) -> c_24(mkBase^#(@m')) 767.45/212.85 , 27: mkBase^#(@m) -> c_35(mkBase#1^#(@m)) 767.45/212.85 , 28: transpose#3^#(::(@y, @ys), @l) -> 767.45/212.85 c_26(transpose^#(::(@y, @ys))) 767.45/212.85 , 29: attach#2^#(::(@l, @ls), @x, @xs) -> c_42(attach^#(@xs, @ls)) 767.45/212.85 , 30: transpose#2^#(tuple#2(@l, @m')) -> 767.45/212.85 c_29(transpose#3^#(@m', @l)) 767.45/212.85 , 31: lineMult^#(@l, @m2) -> c_51(lineMult#1^#(@m2, @l)) 767.45/212.85 , 32: matrixMultOld^#(@m1, @m2) -> 767.45/212.85 c_32(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.85 , 33: makeBase#1^#(::(@l, @m')) -> c_44(mkBase^#(@l)) 767.45/212.85 , 34: lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.85 c_40(mult^#(@l, @x), lineMult^#(@l, @xs)) 767.45/212.85 , 35: m3^#(@x) -> 767.45/212.85 c_45(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#s(#0()))))))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.85 , 36: #abs^#(#neg(@x)) -> c_47() 767.45/212.85 , 37: #abs^#(#pos(@x)) -> c_48() 767.45/212.85 , 38: #abs^#(#0()) -> c_49() 767.45/212.85 , 39: #abs^#(#s(@x)) -> c_50() 767.45/212.85 , 40: matrixMultList#1^#(nil(), @acc) -> c_20() 767.45/212.85 , 41: attach#1^#(nil(), @m) -> c_27() 767.45/212.85 , 42: split#1^#(nil()) -> c_10() 767.45/212.85 , 43: +^#(@x, @y) -> c_17(#add^#(@x, @y)) 767.45/212.85 , 44: *^#(@x, @y) -> c_22(#mult^#(@x, @y)) 767.45/212.85 , 45: split#2^#(nil(), @ls) -> c_33() 767.45/212.85 , 46: transpose#1^#(nil(), @m) -> c_52() 767.45/212.85 , 47: matrixMult'#1^#(nil(), @m2) -> c_30() 767.45/212.85 , 48: transAcc#1^#(nil(), @base) -> c_18() 767.45/212.85 , 49: #add^#(#neg(#s(#0())), @y) -> c_55(#pred^#(@y)) 767.45/212.85 , 50: #add^#(#neg(#s(#s(@x))), @y) -> 767.45/212.85 c_56(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.85 , 51: #add^#(#pos(#s(#0())), @y) -> c_57(#succ^#(@y)) 767.45/212.85 , 52: #add^#(#pos(#s(#s(@x))), @y) -> 767.45/212.85 c_58(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.85 , 53: #add^#(#0(), @y) -> c_59() 767.45/212.85 , 54: #mult^#(#neg(@x), #neg(@y)) -> c_62(#natmult^#(@x, @y)) 767.45/212.85 , 55: #mult^#(#neg(@x), #pos(@y)) -> c_63(#natmult^#(@x, @y)) 767.45/212.85 , 56: #mult^#(#neg(@x), #0()) -> c_64() 767.45/212.85 , 57: #mult^#(#pos(@x), #neg(@y)) -> c_65(#natmult^#(@x, @y)) 767.45/212.85 , 58: #mult^#(#pos(@x), #pos(@y)) -> c_66(#natmult^#(@x, @y)) 767.45/212.85 , 59: #mult^#(#pos(@x), #0()) -> c_67() 767.45/212.85 , 60: #mult^#(#0(), #neg(@y)) -> c_68() 767.45/212.85 , 61: #mult^#(#0(), #pos(@y)) -> c_69() 767.45/212.85 , 62: #mult^#(#0(), #0()) -> c_70() 767.45/212.85 , 63: mkBase#1^#(nil()) -> c_23() 767.45/212.85 , 64: transpose#3^#(nil(), @l) -> c_25() 767.45/212.85 , 65: attach#2^#(nil(), @x, @xs) -> c_41() 767.45/212.85 , 66: split#3^#(tuple#2(@ys, @m'), @x, @xs) -> c_54() 767.45/212.85 , 67: makeBase#1^#(nil()) -> c_43() 767.45/212.85 , 68: lineMult#1^#(nil(), @l) -> c_39() 767.45/212.85 , 69: #pred^#(#neg(#s(@x))) -> c_75() 767.45/212.85 , 70: #pred^#(#pos(#s(#0()))) -> c_76() 767.45/212.85 , 71: #pred^#(#pos(#s(#s(@x)))) -> c_77() 767.45/212.85 , 72: #pred^#(#0()) -> c_78() 767.45/212.85 , 73: #succ^#(#neg(#s(#0()))) -> c_71() 767.45/212.85 , 74: #succ^#(#neg(#s(#s(@x)))) -> c_72() 767.45/212.85 , 75: #succ^#(#pos(#s(@x))) -> c_73() 767.45/212.85 , 76: #succ^#(#0()) -> c_74() 767.45/212.85 , 77: #natmult^#(#0(), @y) -> c_60() 767.45/212.85 , 78: #natmult^#(#s(@x), @y) -> 767.45/212.85 c_61(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) } 767.45/212.85 767.45/212.85 We are left with following problem, upon which TcT provides the 767.45/212.85 certificate YES(O(1),O(n^3)). 767.45/212.85 767.45/212.85 Strict DPs: 767.45/212.85 { matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 767.45/212.85 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.85 c_21(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.85 matrixMult^#(@acc, @m)) 767.45/212.85 , attach^#(@line, @m) -> c_4(attach#1^#(@line, @m)) 767.45/212.85 , attach#1^#(::(@x, @xs), @m) -> c_28(attach#2^#(@m, @x, @xs)) 767.45/212.85 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.85 , split#1^#(::(@l, @ls)) -> c_11(split#2^#(@l, @ls)) 767.45/212.85 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.85 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.85 matrixMult^#(@m1, @m2)) 767.45/212.85 , matrixMult^#(@m1, @m2) -> 767.45/212.85 c_46(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.85 transAcc^#(@m2, makeBase(@m2)), 767.45/212.85 makeBase^#(@m2)) 767.45/212.85 , mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.85 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.85 , mult^#(@l1, @l2) -> c_16(mult#1^#(@l1, @l2)) 767.45/212.85 , transpose'^#(@m) -> 767.45/212.85 c_9(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.85 , transAcc^#(@m, @base) -> c_15(transAcc#1^#(@m, @base)) 767.45/212.85 , makeBase^#(@m) -> c_36(makeBase#1^#(@m)) 767.45/212.85 , split#2^#(::(@x, @xs), @ls) -> 767.45/212.85 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) 767.45/212.85 , transpose^#(@m) -> c_12(transpose#1^#(@m, @m)) 767.45/212.85 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.85 c_53(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.85 , matrixMult'^#(@m1, @m2) -> c_14(matrixMult'#1^#(@m1, @m2)) 767.45/212.85 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.85 c_31(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.85 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.85 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.85 , mult#1^#(::(@x, @xs), @l2) -> c_38(mult#2^#(@l2, @x, @xs)) 767.45/212.85 , mkBase#1^#(::(@l, @m')) -> c_24(mkBase^#(@m')) 767.45/212.85 , mkBase^#(@m) -> c_35(mkBase#1^#(@m)) 767.45/212.85 , transpose#3^#(::(@y, @ys), @l) -> c_26(transpose^#(::(@y, @ys))) 767.45/212.85 , attach#2^#(::(@l, @ls), @x, @xs) -> c_42(attach^#(@xs, @ls)) 767.45/212.85 , transpose#2^#(tuple#2(@l, @m')) -> c_29(transpose#3^#(@m', @l)) 767.45/212.85 , lineMult^#(@l, @m2) -> c_51(lineMult#1^#(@m2, @l)) 767.45/212.85 , matrixMultOld^#(@m1, @m2) -> 767.45/212.85 c_32(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.85 , makeBase#1^#(::(@l, @m')) -> c_44(mkBase^#(@l)) 767.45/212.85 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.85 c_40(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.85 Weak DPs: 767.45/212.85 { m1^#(@x) -> 767.45/212.85 c_1(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.85 , #abs^#(#neg(@x)) -> c_47() 767.45/212.85 , #abs^#(#pos(@x)) -> c_48() 767.45/212.85 , #abs^#(#0()) -> c_49() 767.45/212.85 , #abs^#(#s(@x)) -> c_50() 767.45/212.85 , matrixMultList#1^#(nil(), @acc) -> c_20() 767.45/212.85 , m4^#(@x) -> 767.45/212.85 c_3(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.85 , attach#1^#(nil(), @m) -> c_27() 767.45/212.85 , split#1^#(nil()) -> c_10() 767.45/212.85 , mult#2^#(nil(), @x, @xs) -> c_7(#abs^#(#0())) 767.45/212.85 , +^#(@x, @y) -> c_17(#add^#(@x, @y)) 767.45/212.85 , *^#(@x, @y) -> c_22(#mult^#(@x, @y)) 767.45/212.85 , split#2^#(nil(), @ls) -> c_33() 767.45/212.85 , transpose#1^#(nil(), @m) -> c_52() 767.45/212.85 , m2^#(@x) -> 767.45/212.85 c_13(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.85 , matrixMult'#1^#(nil(), @m2) -> c_30() 767.45/212.85 , transAcc#1^#(nil(), @base) -> c_18() 767.45/212.85 , mult#1^#(nil(), @l2) -> c_37(#abs^#(#0())) 767.45/212.85 , #add^#(#neg(#s(#0())), @y) -> c_55(#pred^#(@y)) 767.45/212.85 , #add^#(#neg(#s(#s(@x))), @y) -> 767.45/212.85 c_56(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.85 , #add^#(#pos(#s(#0())), @y) -> c_57(#succ^#(@y)) 767.45/212.85 , #add^#(#pos(#s(#s(@x))), @y) -> 767.45/212.85 c_58(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.85 , #add^#(#0(), @y) -> c_59() 767.45/212.85 , #mult^#(#neg(@x), #neg(@y)) -> c_62(#natmult^#(@x, @y)) 767.45/212.85 , #mult^#(#neg(@x), #pos(@y)) -> c_63(#natmult^#(@x, @y)) 767.45/212.85 , #mult^#(#neg(@x), #0()) -> c_64() 767.45/212.85 , #mult^#(#pos(@x), #neg(@y)) -> c_65(#natmult^#(@x, @y)) 767.45/212.85 , #mult^#(#pos(@x), #pos(@y)) -> c_66(#natmult^#(@x, @y)) 767.45/212.85 , #mult^#(#pos(@x), #0()) -> c_67() 767.45/212.85 , #mult^#(#0(), #neg(@y)) -> c_68() 767.45/212.85 , #mult^#(#0(), #pos(@y)) -> c_69() 767.45/212.85 , #mult^#(#0(), #0()) -> c_70() 767.45/212.85 , mkBase#1^#(nil()) -> c_23() 767.45/212.85 , transpose#3^#(nil(), @l) -> c_25() 767.45/212.85 , attach#2^#(nil(), @x, @xs) -> c_41() 767.45/212.85 , split#3^#(tuple#2(@ys, @m'), @x, @xs) -> c_54() 767.45/212.85 , makeBase#1^#(nil()) -> c_43() 767.45/212.85 , lineMult#1^#(nil(), @l) -> c_39() 767.45/212.85 , m3^#(@x) -> 767.45/212.85 c_45(#abs^#(#pos(#s(#0()))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#s(#0()))))))), 767.45/212.85 #abs^#(#pos(#s(#s(#0())))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.85 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.85 , #pred^#(#neg(#s(@x))) -> c_75() 767.45/212.85 , #pred^#(#pos(#s(#0()))) -> c_76() 767.45/212.85 , #pred^#(#pos(#s(#s(@x)))) -> c_77() 767.45/212.85 , #pred^#(#0()) -> c_78() 767.45/212.85 , #succ^#(#neg(#s(#0()))) -> c_71() 767.45/212.85 , #succ^#(#neg(#s(#s(@x)))) -> c_72() 767.45/212.85 , #succ^#(#pos(#s(@x))) -> c_73() 767.45/212.85 , #succ^#(#0()) -> c_74() 767.45/212.85 , #natmult^#(#0(), @y) -> c_60() 767.45/212.85 , #natmult^#(#s(@x), @y) -> 767.45/212.85 c_61(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) } 767.45/212.85 Weak Trs: 767.45/212.85 { m1(@x) -> 767.45/212.85 ::(::(#abs(#pos(#s(#0()))), 767.45/212.85 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#0()))))), nil()))), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()))), 767.45/212.85 nil())) 767.45/212.85 , matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) 767.45/212.85 , m4(@x) -> 767.45/212.85 ::(::(#abs(#pos(#s(#0()))), nil()), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#0())))), nil()), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#s(#0()))))), nil()), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()), nil())))) 767.45/212.85 , attach(@line, @m) -> attach#1(@line, @m) 767.45/212.85 , split(@m) -> split#1(@m) 767.45/212.85 , matrixMult3(@m1, @m2, @m3) -> 767.45/212.85 matrixMult(matrixMult(@m1, @m2), @m3) 767.45/212.85 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.85 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.85 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.85 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.85 , #add(#0(), @y) -> @y 767.45/212.85 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.85 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.85 , transpose'(@m) -> transAcc(@m, makeBase(@m)) 767.45/212.85 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.85 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.85 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.85 , m2(@x) -> 767.45/212.85 ::(::(#abs(#pos(#s(#0()))), ::(#abs(#pos(#s(#s(#0())))), nil())), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#0()))))), nil())), 767.45/212.85 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.85 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())), 767.45/212.85 nil()))) 767.45/212.85 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.85 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.85 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.85 , +(@x, @y) -> #add(@x, @y) 767.45/212.85 , transAcc#1(nil(), @base) -> @base 767.45/212.85 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.85 attach(@l, transAcc(@m', @base)) 767.45/212.85 , matrixMultList#1(nil(), @acc) -> @acc 767.45/212.85 , matrixMultList#1(::(@m, @ms), @acc) -> 767.45/212.85 matrixMultList(matrixMult(@acc, @m), @ms) 767.45/212.85 , *(@x, @y) -> #mult(@x, @y) 767.45/212.85 , mkBase#1(nil()) -> nil() 767.45/212.85 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.85 , transpose#3(nil(), @l) -> nil() 767.45/212.85 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.85 , attach#1(nil(), @m) -> nil() 767.45/212.85 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.85 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.85 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.85 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.85 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.85 , #natmult(#0(), @y) -> #0() 767.45/212.85 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.85 , matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) 767.45/212.85 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.85 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.85 , mkBase(@m) -> mkBase#1(@m) 767.45/212.85 , makeBase(@m) -> makeBase#1(@m) 767.45/212.85 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.85 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.85 , lineMult#1(nil(), @l) -> nil() 767.45/212.85 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.85 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.85 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.85 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.85 , #mult(#neg(@x), #0()) -> #0() 767.45/212.85 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.85 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.85 , #mult(#pos(@x), #0()) -> #0() 767.45/212.85 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.85 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.85 , #mult(#0(), #0()) -> #0() 767.45/212.85 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.85 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.85 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.85 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.85 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.85 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.86 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.86 , makeBase#1(nil()) -> nil() 767.45/212.86 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.86 , m3(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), 767.45/212.86 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.86 nil())) 767.45/212.86 , matrixMult(@m1, @m2) -> 767.45/212.86 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.86 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.86 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.86 , #abs(#0()) -> #0() 767.45/212.86 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.86 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.86 , transpose#1(nil(), @m) -> nil() 767.45/212.86 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.86 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.86 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.86 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.86 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.86 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.86 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.86 Obligation: 767.45/212.86 innermost runtime complexity 767.45/212.86 Answer: 767.45/212.86 YES(O(1),O(n^3)) 767.45/212.86 767.45/212.86 The following weak DPs constitute a sub-graph of the DG that is 767.45/212.86 closed under successors. The DPs are removed. 767.45/212.86 767.45/212.86 { m1^#(@x) -> 767.45/212.86 c_1(#abs^#(#pos(#s(#0()))), 767.45/212.86 #abs^#(#pos(#s(#s(#0())))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.86 #abs^#(#pos(#s(#s(#0())))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.86 , #abs^#(#neg(@x)) -> c_47() 767.45/212.86 , #abs^#(#pos(@x)) -> c_48() 767.45/212.86 , #abs^#(#0()) -> c_49() 767.45/212.86 , #abs^#(#s(@x)) -> c_50() 767.45/212.86 , matrixMultList#1^#(nil(), @acc) -> c_20() 767.45/212.86 , m4^#(@x) -> 767.45/212.86 c_3(#abs^#(#pos(#s(#0()))), 767.45/212.86 #abs^#(#pos(#s(#s(#0())))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#s(#0()))))))) 767.45/212.86 , attach#1^#(nil(), @m) -> c_27() 767.45/212.86 , split#1^#(nil()) -> c_10() 767.45/212.86 , mult#2^#(nil(), @x, @xs) -> c_7(#abs^#(#0())) 767.45/212.86 , +^#(@x, @y) -> c_17(#add^#(@x, @y)) 767.45/212.86 , *^#(@x, @y) -> c_22(#mult^#(@x, @y)) 767.45/212.86 , split#2^#(nil(), @ls) -> c_33() 767.45/212.86 , transpose#1^#(nil(), @m) -> c_52() 767.45/212.86 , m2^#(@x) -> 767.45/212.86 c_13(#abs^#(#pos(#s(#0()))), 767.45/212.86 #abs^#(#pos(#s(#s(#0())))), 767.45/212.86 #abs^#(#pos(#s(#s(#0())))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.86 , matrixMult'#1^#(nil(), @m2) -> c_30() 767.45/212.86 , transAcc#1^#(nil(), @base) -> c_18() 767.45/212.86 , mult#1^#(nil(), @l2) -> c_37(#abs^#(#0())) 767.45/212.86 , #add^#(#neg(#s(#0())), @y) -> c_55(#pred^#(@y)) 767.45/212.86 , #add^#(#neg(#s(#s(@x))), @y) -> 767.45/212.86 c_56(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.86 , #add^#(#pos(#s(#0())), @y) -> c_57(#succ^#(@y)) 767.45/212.86 , #add^#(#pos(#s(#s(@x))), @y) -> 767.45/212.86 c_58(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y)) 767.45/212.86 , #add^#(#0(), @y) -> c_59() 767.45/212.86 , #mult^#(#neg(@x), #neg(@y)) -> c_62(#natmult^#(@x, @y)) 767.45/212.86 , #mult^#(#neg(@x), #pos(@y)) -> c_63(#natmult^#(@x, @y)) 767.45/212.86 , #mult^#(#neg(@x), #0()) -> c_64() 767.45/212.86 , #mult^#(#pos(@x), #neg(@y)) -> c_65(#natmult^#(@x, @y)) 767.45/212.86 , #mult^#(#pos(@x), #pos(@y)) -> c_66(#natmult^#(@x, @y)) 767.45/212.86 , #mult^#(#pos(@x), #0()) -> c_67() 767.45/212.86 , #mult^#(#0(), #neg(@y)) -> c_68() 767.45/212.86 , #mult^#(#0(), #pos(@y)) -> c_69() 767.45/212.86 , #mult^#(#0(), #0()) -> c_70() 767.45/212.86 , mkBase#1^#(nil()) -> c_23() 767.45/212.86 , transpose#3^#(nil(), @l) -> c_25() 767.45/212.86 , attach#2^#(nil(), @x, @xs) -> c_41() 767.45/212.86 , split#3^#(tuple#2(@ys, @m'), @x, @xs) -> c_54() 767.45/212.86 , makeBase#1^#(nil()) -> c_43() 767.45/212.86 , lineMult#1^#(nil(), @l) -> c_39() 767.45/212.86 , m3^#(@x) -> 767.45/212.86 c_45(#abs^#(#pos(#s(#0()))), 767.45/212.86 #abs^#(#pos(#s(#s(#0())))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#s(#s(#0()))))))), 767.45/212.86 #abs^#(#pos(#s(#s(#0())))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#0()))))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.86 #abs^#(#pos(#s(#s(#s(#s(#s(#0())))))))) 767.45/212.86 , #pred^#(#neg(#s(@x))) -> c_75() 767.45/212.86 , #pred^#(#pos(#s(#0()))) -> c_76() 767.45/212.86 , #pred^#(#pos(#s(#s(@x)))) -> c_77() 767.45/212.86 , #pred^#(#0()) -> c_78() 767.45/212.86 , #succ^#(#neg(#s(#0()))) -> c_71() 767.45/212.86 , #succ^#(#neg(#s(#s(@x)))) -> c_72() 767.45/212.86 , #succ^#(#pos(#s(@x))) -> c_73() 767.45/212.86 , #succ^#(#0()) -> c_74() 767.45/212.86 , #natmult^#(#0(), @y) -> c_60() 767.45/212.86 , #natmult^#(#s(@x), @y) -> 767.45/212.86 c_61(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) } 767.45/212.86 767.45/212.86 We are left with following problem, upon which TcT provides the 767.45/212.86 certificate YES(O(1),O(n^3)). 767.45/212.86 767.45/212.86 Strict DPs: 767.45/212.86 { matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 767.45/212.86 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.86 c_21(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.86 matrixMult^#(@acc, @m)) 767.45/212.86 , attach^#(@line, @m) -> c_4(attach#1^#(@line, @m)) 767.45/212.86 , attach#1^#(::(@x, @xs), @m) -> c_28(attach#2^#(@m, @x, @xs)) 767.45/212.86 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.86 , split#1^#(::(@l, @ls)) -> c_11(split#2^#(@l, @ls)) 767.45/212.86 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.86 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.86 matrixMult^#(@m1, @m2)) 767.45/212.86 , matrixMult^#(@m1, @m2) -> 767.45/212.86 c_46(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.86 transAcc^#(@m2, makeBase(@m2)), 767.45/212.86 makeBase^#(@m2)) 767.45/212.86 , mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.86 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.86 , mult^#(@l1, @l2) -> c_16(mult#1^#(@l1, @l2)) 767.45/212.86 , transpose'^#(@m) -> 767.45/212.86 c_9(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.86 , transAcc^#(@m, @base) -> c_15(transAcc#1^#(@m, @base)) 767.45/212.86 , makeBase^#(@m) -> c_36(makeBase#1^#(@m)) 767.45/212.86 , split#2^#(::(@x, @xs), @ls) -> 767.45/212.86 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) 767.45/212.86 , transpose^#(@m) -> c_12(transpose#1^#(@m, @m)) 767.45/212.86 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.86 c_53(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.86 , matrixMult'^#(@m1, @m2) -> c_14(matrixMult'#1^#(@m1, @m2)) 767.45/212.86 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.86 c_31(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.86 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.86 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.86 , mult#1^#(::(@x, @xs), @l2) -> c_38(mult#2^#(@l2, @x, @xs)) 767.45/212.86 , mkBase#1^#(::(@l, @m')) -> c_24(mkBase^#(@m')) 767.45/212.86 , mkBase^#(@m) -> c_35(mkBase#1^#(@m)) 767.45/212.86 , transpose#3^#(::(@y, @ys), @l) -> c_26(transpose^#(::(@y, @ys))) 767.45/212.86 , attach#2^#(::(@l, @ls), @x, @xs) -> c_42(attach^#(@xs, @ls)) 767.45/212.86 , transpose#2^#(tuple#2(@l, @m')) -> c_29(transpose#3^#(@m', @l)) 767.45/212.86 , lineMult^#(@l, @m2) -> c_51(lineMult#1^#(@m2, @l)) 767.45/212.86 , matrixMultOld^#(@m1, @m2) -> 767.45/212.86 c_32(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.86 , makeBase#1^#(::(@l, @m')) -> c_44(mkBase^#(@l)) 767.45/212.86 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.86 c_40(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.86 Weak Trs: 767.45/212.86 { m1(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), 767.45/212.86 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), nil()))), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()))), 767.45/212.86 nil())) 767.45/212.86 , matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) 767.45/212.86 , m4(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), nil()), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), nil()), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#s(#0()))))), nil()), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()), nil())))) 767.45/212.86 , attach(@line, @m) -> attach#1(@line, @m) 767.45/212.86 , split(@m) -> split#1(@m) 767.45/212.86 , matrixMult3(@m1, @m2, @m3) -> 767.45/212.86 matrixMult(matrixMult(@m1, @m2), @m3) 767.45/212.86 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.86 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.86 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.86 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.86 , #add(#0(), @y) -> @y 767.45/212.86 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.86 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.86 , transpose'(@m) -> transAcc(@m, makeBase(@m)) 767.45/212.86 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.86 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.86 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.86 , m2(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), ::(#abs(#pos(#s(#s(#0())))), nil())), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), nil())), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())), 767.45/212.86 nil()))) 767.45/212.86 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.86 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.86 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.86 , +(@x, @y) -> #add(@x, @y) 767.45/212.86 , transAcc#1(nil(), @base) -> @base 767.45/212.86 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.86 attach(@l, transAcc(@m', @base)) 767.45/212.86 , matrixMultList#1(nil(), @acc) -> @acc 767.45/212.86 , matrixMultList#1(::(@m, @ms), @acc) -> 767.45/212.86 matrixMultList(matrixMult(@acc, @m), @ms) 767.45/212.86 , *(@x, @y) -> #mult(@x, @y) 767.45/212.86 , mkBase#1(nil()) -> nil() 767.45/212.86 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.86 , transpose#3(nil(), @l) -> nil() 767.45/212.86 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.86 , attach#1(nil(), @m) -> nil() 767.45/212.86 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.86 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.86 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.86 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.86 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.86 , #natmult(#0(), @y) -> #0() 767.45/212.86 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.86 , matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) 767.45/212.86 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.86 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.86 , mkBase(@m) -> mkBase#1(@m) 767.45/212.86 , makeBase(@m) -> makeBase#1(@m) 767.45/212.86 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.86 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.86 , lineMult#1(nil(), @l) -> nil() 767.45/212.86 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.86 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.86 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.86 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.86 , #mult(#neg(@x), #0()) -> #0() 767.45/212.86 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.86 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.86 , #mult(#pos(@x), #0()) -> #0() 767.45/212.86 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.86 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.86 , #mult(#0(), #0()) -> #0() 767.45/212.86 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.86 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.86 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.86 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.86 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.86 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.86 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.86 , makeBase#1(nil()) -> nil() 767.45/212.86 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.86 , m3(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), 767.45/212.86 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.86 nil())) 767.45/212.86 , matrixMult(@m1, @m2) -> 767.45/212.86 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.86 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.86 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.86 , #abs(#0()) -> #0() 767.45/212.86 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.86 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.86 , transpose#1(nil(), @m) -> nil() 767.45/212.86 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.86 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.86 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.86 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.86 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.86 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.86 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.86 Obligation: 767.45/212.86 innermost runtime complexity 767.45/212.86 Answer: 767.45/212.86 YES(O(1),O(n^3)) 767.45/212.86 767.45/212.86 Due to missing edges in the dependency-graph, the right-hand sides 767.45/212.86 of following rules could be simplified: 767.45/212.86 767.45/212.86 { mult#2^#(::(@y, @ys), @x, @xs) -> 767.45/212.86 c_8(+^#(*(@x, @y), mult(@xs, @ys)), *^#(@x, @y), mult^#(@xs, @ys)) 767.45/212.86 , split#2^#(::(@x, @xs), @ls) -> 767.45/212.86 c_34(split#3^#(split(@ls), @x, @xs), split^#(@ls)) } 767.45/212.86 767.45/212.86 We are left with following problem, upon which TcT provides the 767.45/212.86 certificate YES(O(1),O(n^3)). 767.45/212.86 767.45/212.86 Strict DPs: 767.45/212.86 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.86 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.86 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.86 matrixMult^#(@acc, @m)) 767.45/212.86 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.86 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.86 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.86 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.86 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.86 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.86 matrixMult^#(@m1, @m2)) 767.45/212.86 , matrixMult^#(@m1, @m2) -> 767.45/212.86 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.86 transAcc^#(@m2, makeBase(@m2)), 767.45/212.86 makeBase^#(@m2)) 767.45/212.86 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.86 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.86 , transpose'^#(@m) -> 767.45/212.86 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.86 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.86 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.86 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.86 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.86 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.86 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.86 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.86 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.86 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.86 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.86 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.86 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.86 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.86 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.86 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.86 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.86 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.86 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.86 , matrixMultOld^#(@m1, @m2) -> 767.45/212.86 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.86 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) 767.45/212.86 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.86 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.86 Weak Trs: 767.45/212.86 { m1(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), 767.45/212.86 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), nil()))), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()))), 767.45/212.86 nil())) 767.45/212.86 , matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) 767.45/212.86 , m4(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), nil()), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), nil()), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#s(#0()))))), nil()), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), nil()), nil())))) 767.45/212.86 , attach(@line, @m) -> attach#1(@line, @m) 767.45/212.86 , split(@m) -> split#1(@m) 767.45/212.86 , matrixMult3(@m1, @m2, @m3) -> 767.45/212.86 matrixMult(matrixMult(@m1, @m2), @m3) 767.45/212.86 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.86 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.86 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.86 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.86 , #add(#0(), @y) -> @y 767.45/212.86 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.86 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.86 , transpose'(@m) -> transAcc(@m, makeBase(@m)) 767.45/212.86 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.86 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.86 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.86 , m2(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), ::(#abs(#pos(#s(#s(#0())))), nil())), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), nil())), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())), 767.45/212.86 nil()))) 767.45/212.86 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.86 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.86 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.86 , +(@x, @y) -> #add(@x, @y) 767.45/212.86 , transAcc#1(nil(), @base) -> @base 767.45/212.86 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.86 attach(@l, transAcc(@m', @base)) 767.45/212.86 , matrixMultList#1(nil(), @acc) -> @acc 767.45/212.86 , matrixMultList#1(::(@m, @ms), @acc) -> 767.45/212.86 matrixMultList(matrixMult(@acc, @m), @ms) 767.45/212.86 , *(@x, @y) -> #mult(@x, @y) 767.45/212.86 , mkBase#1(nil()) -> nil() 767.45/212.86 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.86 , transpose#3(nil(), @l) -> nil() 767.45/212.86 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.86 , attach#1(nil(), @m) -> nil() 767.45/212.86 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.86 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.86 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.86 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.86 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.86 , #natmult(#0(), @y) -> #0() 767.45/212.86 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.86 , matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) 767.45/212.86 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.86 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.86 , mkBase(@m) -> mkBase#1(@m) 767.45/212.86 , makeBase(@m) -> makeBase#1(@m) 767.45/212.86 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.86 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.86 , lineMult#1(nil(), @l) -> nil() 767.45/212.86 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.86 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.86 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.86 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.86 , #mult(#neg(@x), #0()) -> #0() 767.45/212.86 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.86 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.86 , #mult(#pos(@x), #0()) -> #0() 767.45/212.86 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.86 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.86 , #mult(#0(), #0()) -> #0() 767.45/212.86 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.86 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.86 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.86 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.86 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.86 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.86 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.86 , makeBase#1(nil()) -> nil() 767.45/212.86 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.86 , m3(@x) -> 767.45/212.86 ::(::(#abs(#pos(#s(#0()))), 767.45/212.86 ::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.86 ::(::(#abs(#pos(#s(#s(#0())))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#0()))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#0())))))), 767.45/212.86 ::(#abs(#pos(#s(#s(#s(#s(#s(#0()))))))), nil())))), 767.45/212.86 nil())) 767.45/212.86 , matrixMult(@m1, @m2) -> 767.45/212.86 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.86 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.86 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.86 , #abs(#0()) -> #0() 767.45/212.86 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.86 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.86 , transpose#1(nil(), @m) -> nil() 767.45/212.87 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.87 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.87 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.87 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.87 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.87 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.87 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.87 Obligation: 767.45/212.87 innermost runtime complexity 767.45/212.87 Answer: 767.45/212.87 YES(O(1),O(n^3)) 767.45/212.87 767.45/212.87 We replace rewrite rules by usable rules: 767.45/212.87 767.45/212.87 Weak Usable Rules: 767.45/212.87 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.87 , split(@m) -> split#1(@m) 767.45/212.87 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.87 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.87 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#0(), @y) -> @y 767.45/212.87 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.87 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.87 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.87 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.87 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.87 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.87 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.87 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.87 , +(@x, @y) -> #add(@x, @y) 767.45/212.87 , transAcc#1(nil(), @base) -> @base 767.45/212.87 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.87 attach(@l, transAcc(@m', @base)) 767.45/212.87 , *(@x, @y) -> #mult(@x, @y) 767.45/212.87 , mkBase#1(nil()) -> nil() 767.45/212.87 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.87 , transpose#3(nil(), @l) -> nil() 767.45/212.87 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.87 , attach#1(nil(), @m) -> nil() 767.45/212.87 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.87 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.87 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.87 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.87 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.87 , #natmult(#0(), @y) -> #0() 767.45/212.87 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.87 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.87 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.87 , mkBase(@m) -> mkBase#1(@m) 767.45/212.87 , makeBase(@m) -> makeBase#1(@m) 767.45/212.87 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.87 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.87 , lineMult#1(nil(), @l) -> nil() 767.45/212.87 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.87 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.87 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #0()) -> #0() 767.45/212.87 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #0()) -> #0() 767.45/212.87 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.87 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.87 , #mult(#0(), #0()) -> #0() 767.45/212.87 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.87 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.87 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.87 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.87 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.87 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.87 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.87 , makeBase#1(nil()) -> nil() 767.45/212.87 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.87 , matrixMult(@m1, @m2) -> 767.45/212.87 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.87 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.87 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.87 , #abs(#0()) -> #0() 767.45/212.87 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.87 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.87 , transpose#1(nil(), @m) -> nil() 767.45/212.87 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.87 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.87 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.87 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.87 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.87 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.87 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.87 767.45/212.87 We are left with following problem, upon which TcT provides the 767.45/212.87 certificate YES(O(1),O(n^3)). 767.45/212.87 767.45/212.87 Strict DPs: 767.45/212.87 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.87 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.87 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.87 matrixMult^#(@acc, @m)) 767.45/212.87 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.87 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.87 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.87 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.87 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.87 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.87 matrixMult^#(@m1, @m2)) 767.45/212.87 , matrixMult^#(@m1, @m2) -> 767.45/212.87 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.87 transAcc^#(@m2, makeBase(@m2)), 767.45/212.87 makeBase^#(@m2)) 767.45/212.87 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.87 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.87 , transpose'^#(@m) -> 767.45/212.87 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.87 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.87 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.87 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.87 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.87 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.87 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.87 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.87 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.87 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.87 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.87 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.87 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.87 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.87 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.87 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.87 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.87 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.87 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.87 , matrixMultOld^#(@m1, @m2) -> 767.45/212.87 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.87 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) 767.45/212.87 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.87 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.87 Weak Trs: 767.45/212.87 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.87 , split(@m) -> split#1(@m) 767.45/212.87 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.87 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.87 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#0(), @y) -> @y 767.45/212.87 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.87 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.87 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.87 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.87 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.87 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.87 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.87 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.87 , +(@x, @y) -> #add(@x, @y) 767.45/212.87 , transAcc#1(nil(), @base) -> @base 767.45/212.87 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.87 attach(@l, transAcc(@m', @base)) 767.45/212.87 , *(@x, @y) -> #mult(@x, @y) 767.45/212.87 , mkBase#1(nil()) -> nil() 767.45/212.87 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.87 , transpose#3(nil(), @l) -> nil() 767.45/212.87 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.87 , attach#1(nil(), @m) -> nil() 767.45/212.87 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.87 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.87 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.87 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.87 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.87 , #natmult(#0(), @y) -> #0() 767.45/212.87 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.87 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.87 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.87 , mkBase(@m) -> mkBase#1(@m) 767.45/212.87 , makeBase(@m) -> makeBase#1(@m) 767.45/212.87 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.87 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.87 , lineMult#1(nil(), @l) -> nil() 767.45/212.87 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.87 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.87 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #0()) -> #0() 767.45/212.87 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #0()) -> #0() 767.45/212.87 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.87 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.87 , #mult(#0(), #0()) -> #0() 767.45/212.87 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.87 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.87 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.87 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.87 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.87 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.87 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.87 , makeBase#1(nil()) -> nil() 767.45/212.87 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.87 , matrixMult(@m1, @m2) -> 767.45/212.87 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.87 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.87 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.87 , #abs(#0()) -> #0() 767.45/212.87 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.87 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.87 , transpose#1(nil(), @m) -> nil() 767.45/212.87 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.87 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.87 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.87 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.87 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.87 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.87 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.87 Obligation: 767.45/212.87 innermost runtime complexity 767.45/212.87 Answer: 767.45/212.87 YES(O(1),O(n^3)) 767.45/212.87 767.45/212.87 We analyse the complexity of following sub-problems (R) and (S). 767.45/212.87 Problem (S) is obtained from the input problem by shifting strict 767.45/212.87 rules from (R) into the weak component: 767.45/212.87 767.45/212.87 Problem (R): 767.45/212.87 ------------ 767.45/212.87 Strict DPs: 767.45/212.87 { matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.87 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.87 matrixMult^#(@m1, @m2)) 767.45/212.87 , matrixMult^#(@m1, @m2) -> 767.45/212.87 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.87 transAcc^#(@m2, makeBase(@m2)), 767.45/212.87 makeBase^#(@m2)) 767.45/212.87 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.87 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.87 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.87 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.87 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.87 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.87 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.87 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.87 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.87 Weak DPs: 767.45/212.87 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.87 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.87 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.87 matrixMult^#(@acc, @m)) 767.45/212.87 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.87 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.87 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.87 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.87 , transpose'^#(@m) -> 767.45/212.87 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.87 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.87 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.87 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.87 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.87 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.87 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.87 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.87 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.87 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.87 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.87 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.87 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.87 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.87 , matrixMultOld^#(@m1, @m2) -> 767.45/212.87 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.87 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 767.45/212.87 Weak Trs: 767.45/212.87 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.87 , split(@m) -> split#1(@m) 767.45/212.87 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.87 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.87 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#0(), @y) -> @y 767.45/212.87 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.87 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.87 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.87 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.87 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.87 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.87 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.87 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.87 , +(@x, @y) -> #add(@x, @y) 767.45/212.87 , transAcc#1(nil(), @base) -> @base 767.45/212.87 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.87 attach(@l, transAcc(@m', @base)) 767.45/212.87 , *(@x, @y) -> #mult(@x, @y) 767.45/212.87 , mkBase#1(nil()) -> nil() 767.45/212.87 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.87 , transpose#3(nil(), @l) -> nil() 767.45/212.87 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.87 , attach#1(nil(), @m) -> nil() 767.45/212.87 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.87 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.87 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.87 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.87 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.87 , #natmult(#0(), @y) -> #0() 767.45/212.87 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.87 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.87 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.87 , mkBase(@m) -> mkBase#1(@m) 767.45/212.87 , makeBase(@m) -> makeBase#1(@m) 767.45/212.87 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.87 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.87 , lineMult#1(nil(), @l) -> nil() 767.45/212.87 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.87 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.87 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #0()) -> #0() 767.45/212.87 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #0()) -> #0() 767.45/212.87 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.87 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.87 , #mult(#0(), #0()) -> #0() 767.45/212.87 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.87 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.87 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.87 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.87 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.87 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.87 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.87 , makeBase#1(nil()) -> nil() 767.45/212.87 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.87 , matrixMult(@m1, @m2) -> 767.45/212.87 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.87 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.87 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.87 , #abs(#0()) -> #0() 767.45/212.87 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.87 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.87 , transpose#1(nil(), @m) -> nil() 767.45/212.87 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.87 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.87 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.87 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.87 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.87 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.87 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.87 StartTerms: basic terms 767.45/212.87 Strategy: innermost 767.45/212.87 767.45/212.87 Problem (S): 767.45/212.87 ------------ 767.45/212.87 Strict DPs: 767.45/212.87 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.87 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.87 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.87 matrixMult^#(@acc, @m)) 767.45/212.87 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.87 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.87 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.87 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.87 , transpose'^#(@m) -> 767.45/212.87 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.87 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.87 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.87 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.87 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.87 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.87 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.87 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.87 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.87 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.87 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.87 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.87 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.87 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.87 , matrixMultOld^#(@m1, @m2) -> 767.45/212.87 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.87 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 767.45/212.87 Weak DPs: 767.45/212.87 { matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.87 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.87 matrixMult^#(@m1, @m2)) 767.45/212.87 , matrixMult^#(@m1, @m2) -> 767.45/212.87 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.87 transAcc^#(@m2, makeBase(@m2)), 767.45/212.87 makeBase^#(@m2)) 767.45/212.87 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.87 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.87 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.87 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.87 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.87 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.87 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.87 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.87 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.87 Weak Trs: 767.45/212.87 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.87 , split(@m) -> split#1(@m) 767.45/212.87 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.87 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.87 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.87 , #add(#0(), @y) -> @y 767.45/212.87 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.87 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.87 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.87 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.87 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.87 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.87 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.87 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.87 , +(@x, @y) -> #add(@x, @y) 767.45/212.87 , transAcc#1(nil(), @base) -> @base 767.45/212.87 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.87 attach(@l, transAcc(@m', @base)) 767.45/212.87 , *(@x, @y) -> #mult(@x, @y) 767.45/212.87 , mkBase#1(nil()) -> nil() 767.45/212.87 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.87 , transpose#3(nil(), @l) -> nil() 767.45/212.87 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.87 , attach#1(nil(), @m) -> nil() 767.45/212.87 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.87 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.87 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.87 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.87 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.87 , #natmult(#0(), @y) -> #0() 767.45/212.87 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.87 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.87 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.87 , mkBase(@m) -> mkBase#1(@m) 767.45/212.87 , makeBase(@m) -> makeBase#1(@m) 767.45/212.87 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.87 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.87 , lineMult#1(nil(), @l) -> nil() 767.45/212.87 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.87 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.87 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#neg(@x), #0()) -> #0() 767.45/212.87 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.87 , #mult(#pos(@x), #0()) -> #0() 767.45/212.87 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.88 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.88 , #mult(#0(), #0()) -> #0() 767.45/212.88 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.88 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.88 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.88 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.88 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.88 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.88 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.88 , makeBase#1(nil()) -> nil() 767.45/212.88 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.88 , matrixMult(@m1, @m2) -> 767.45/212.88 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.88 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.88 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.88 , #abs(#0()) -> #0() 767.45/212.88 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.88 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.88 , transpose#1(nil(), @m) -> nil() 767.45/212.88 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.88 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.88 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.88 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.88 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.88 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.88 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.88 StartTerms: basic terms 767.45/212.88 Strategy: innermost 767.45/212.88 767.45/212.88 Overall, the transformation results in the following sub-problem(s): 767.45/212.88 767.45/212.88 Generated new problems: 767.45/212.88 ----------------------- 767.45/212.88 R) Strict DPs: 767.45/212.88 { matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.88 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.88 matrixMult^#(@m1, @m2)) 767.45/212.88 , matrixMult^#(@m1, @m2) -> 767.45/212.88 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.88 transAcc^#(@m2, makeBase(@m2)), 767.45/212.88 makeBase^#(@m2)) 767.45/212.88 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.88 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.88 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.88 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.88 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.88 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.88 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.88 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.88 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.88 Weak DPs: 767.45/212.88 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.88 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.88 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.88 matrixMult^#(@acc, @m)) 767.45/212.88 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.88 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.88 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.88 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.88 , transpose'^#(@m) -> 767.45/212.88 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.88 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.88 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.88 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.88 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.88 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.88 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.88 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.88 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.88 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.88 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.88 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.88 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.88 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.88 , matrixMultOld^#(@m1, @m2) -> 767.45/212.88 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.88 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 767.45/212.88 Weak Trs: 767.45/212.88 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.88 , split(@m) -> split#1(@m) 767.45/212.88 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.88 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.88 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.88 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.88 , #add(#0(), @y) -> @y 767.45/212.88 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.88 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.88 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.88 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.88 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.88 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.88 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.88 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.88 , +(@x, @y) -> #add(@x, @y) 767.45/212.88 , transAcc#1(nil(), @base) -> @base 767.45/212.88 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.88 attach(@l, transAcc(@m', @base)) 767.45/212.88 , *(@x, @y) -> #mult(@x, @y) 767.45/212.88 , mkBase#1(nil()) -> nil() 767.45/212.88 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.88 , transpose#3(nil(), @l) -> nil() 767.45/212.88 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.88 , attach#1(nil(), @m) -> nil() 767.45/212.88 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.88 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.88 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.88 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.88 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.88 , #natmult(#0(), @y) -> #0() 767.45/212.88 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.88 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.88 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.88 , mkBase(@m) -> mkBase#1(@m) 767.45/212.88 , makeBase(@m) -> makeBase#1(@m) 767.45/212.88 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.88 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.88 , lineMult#1(nil(), @l) -> nil() 767.45/212.88 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.88 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.88 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.88 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.88 , #mult(#neg(@x), #0()) -> #0() 767.45/212.88 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.88 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.88 , #mult(#pos(@x), #0()) -> #0() 767.45/212.88 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.88 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.88 , #mult(#0(), #0()) -> #0() 767.45/212.88 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.88 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.88 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.88 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.88 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.88 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.88 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.88 , makeBase#1(nil()) -> nil() 767.45/212.88 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.88 , matrixMult(@m1, @m2) -> 767.45/212.88 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.88 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.88 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.88 , #abs(#0()) -> #0() 767.45/212.88 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.88 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.88 , transpose#1(nil(), @m) -> nil() 767.45/212.88 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.88 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.88 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.88 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.88 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.88 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.88 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.88 StartTerms: basic terms 767.45/212.88 Strategy: innermost 767.45/212.88 767.45/212.88 This problem was proven YES(O(1),O(n^3)). 767.45/212.88 767.45/212.88 S) Strict DPs: 767.45/212.88 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.88 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.88 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.88 matrixMult^#(@acc, @m)) 767.45/212.88 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.88 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.88 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.88 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.88 , transpose'^#(@m) -> 767.45/212.88 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.88 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.88 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.88 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.88 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.88 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.88 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.88 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.88 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.88 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.88 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.88 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.88 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.88 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.88 , matrixMultOld^#(@m1, @m2) -> 767.45/212.88 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.88 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 767.45/212.88 Weak DPs: 767.45/212.88 { matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.88 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.88 matrixMult^#(@m1, @m2)) 767.45/212.88 , matrixMult^#(@m1, @m2) -> 767.45/212.88 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.88 transAcc^#(@m2, makeBase(@m2)), 767.45/212.88 makeBase^#(@m2)) 767.45/212.88 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.88 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.88 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.88 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.88 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.88 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.88 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.88 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.88 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.88 Weak Trs: 767.45/212.88 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.88 , split(@m) -> split#1(@m) 767.45/212.88 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.88 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.88 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.88 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.88 , #add(#0(), @y) -> @y 767.45/212.88 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.88 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.88 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.88 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.88 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.88 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.88 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.88 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.88 , +(@x, @y) -> #add(@x, @y) 767.45/212.88 , transAcc#1(nil(), @base) -> @base 767.45/212.88 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.88 attach(@l, transAcc(@m', @base)) 767.45/212.88 , *(@x, @y) -> #mult(@x, @y) 767.45/212.88 , mkBase#1(nil()) -> nil() 767.45/212.88 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.88 , transpose#3(nil(), @l) -> nil() 767.45/212.88 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.88 , attach#1(nil(), @m) -> nil() 767.45/212.88 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.88 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.88 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.88 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.88 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.88 , #natmult(#0(), @y) -> #0() 767.45/212.88 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.88 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.88 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.88 , mkBase(@m) -> mkBase#1(@m) 767.45/212.88 , makeBase(@m) -> makeBase#1(@m) 767.45/212.88 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.88 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.88 , lineMult#1(nil(), @l) -> nil() 767.45/212.88 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.88 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.88 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.88 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.88 , #mult(#neg(@x), #0()) -> #0() 767.45/212.88 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.88 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.88 , #mult(#pos(@x), #0()) -> #0() 767.45/212.88 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.88 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.88 , #mult(#0(), #0()) -> #0() 767.45/212.88 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.88 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.88 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.88 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.88 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.88 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.88 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.88 , makeBase#1(nil()) -> nil() 767.45/212.88 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.88 , matrixMult(@m1, @m2) -> 767.45/212.88 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.88 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.88 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.88 , #abs(#0()) -> #0() 767.45/212.88 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.88 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.88 , transpose#1(nil(), @m) -> nil() 767.45/212.88 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.88 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.88 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.88 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.88 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.88 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.88 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.88 StartTerms: basic terms 767.45/212.88 Strategy: innermost 767.45/212.88 767.45/212.88 This problem was proven YES(O(1),O(n^1)). 767.45/212.88 767.45/212.88 767.45/212.88 Proofs for generated problems: 767.45/212.88 ------------------------------ 767.45/212.88 R) We are left with following problem, upon which TcT provides the 767.45/212.88 certificate YES(O(1),O(n^3)). 767.45/212.88 767.45/212.88 Strict DPs: 767.45/212.88 { matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.88 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.88 matrixMult^#(@m1, @m2)) 767.45/212.88 , matrixMult^#(@m1, @m2) -> 767.45/212.88 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.88 transAcc^#(@m2, makeBase(@m2)), 767.45/212.88 makeBase^#(@m2)) 767.45/212.88 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.88 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.88 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.88 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.88 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.88 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.88 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.88 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.88 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.88 Weak DPs: 767.45/212.88 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.88 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.88 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.88 matrixMult^#(@acc, @m)) 767.45/212.88 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.88 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.88 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.88 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.88 , transpose'^#(@m) -> 767.45/212.88 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.88 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.88 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.88 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.88 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.88 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.88 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.88 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.88 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.88 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.88 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.88 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.88 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.88 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.88 , matrixMultOld^#(@m1, @m2) -> 767.45/212.88 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 767.45/212.88 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 767.45/212.88 Weak Trs: 767.45/212.88 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.88 , split(@m) -> split#1(@m) 767.45/212.88 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.88 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.88 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.88 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.88 , #add(#0(), @y) -> @y 767.45/212.88 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.88 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.88 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.88 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.88 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.88 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.88 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.88 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.88 , +(@x, @y) -> #add(@x, @y) 767.45/212.88 , transAcc#1(nil(), @base) -> @base 767.45/212.88 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.88 attach(@l, transAcc(@m', @base)) 767.45/212.88 , *(@x, @y) -> #mult(@x, @y) 767.45/212.88 , mkBase#1(nil()) -> nil() 767.45/212.88 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.88 , transpose#3(nil(), @l) -> nil() 767.45/212.88 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.88 , attach#1(nil(), @m) -> nil() 767.45/212.88 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.88 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.89 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.89 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.89 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.89 , #natmult(#0(), @y) -> #0() 767.45/212.89 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.89 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.89 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.89 , mkBase(@m) -> mkBase#1(@m) 767.45/212.89 , makeBase(@m) -> makeBase#1(@m) 767.45/212.89 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.89 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.89 , lineMult#1(nil(), @l) -> nil() 767.45/212.89 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.89 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.89 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.89 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.89 , #mult(#neg(@x), #0()) -> #0() 767.45/212.89 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.89 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.89 , #mult(#pos(@x), #0()) -> #0() 767.45/212.89 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.89 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.89 , #mult(#0(), #0()) -> #0() 767.45/212.89 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.89 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.89 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.89 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.89 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.89 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.89 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.89 , makeBase#1(nil()) -> nil() 767.45/212.89 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.89 , matrixMult(@m1, @m2) -> 767.45/212.89 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.89 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.89 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.89 , #abs(#0()) -> #0() 767.45/212.89 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.89 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.89 , transpose#1(nil(), @m) -> nil() 767.45/212.89 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.89 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.89 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.89 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.89 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.89 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.89 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.89 Obligation: 767.45/212.89 innermost runtime complexity 767.45/212.89 Answer: 767.45/212.89 YES(O(1),O(n^3)) 767.45/212.89 767.45/212.89 The following weak DPs constitute a sub-graph of the DG that is 767.45/212.89 closed under successors. The DPs are removed. 767.45/212.89 767.45/212.89 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 767.45/212.89 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 767.45/212.89 , split^#(@m) -> c_5(split#1^#(@m)) 767.45/212.89 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 767.45/212.89 , transpose'^#(@m) -> 767.45/212.89 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 767.45/212.89 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 767.45/212.89 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 767.45/212.89 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 767.45/212.89 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 767.45/212.89 , transpose#1^#(::(@xs, @xss), @m) -> 767.45/212.89 c_16(transpose#2^#(split(@m)), split^#(@m)) 767.45/212.89 , transAcc#1^#(::(@l, @m'), @base) -> 767.45/212.89 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 767.45/212.89 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 767.45/212.89 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 767.45/212.89 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 767.45/212.89 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 767.45/212.89 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 767.45/212.89 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 767.45/212.89 767.45/212.89 We are left with following problem, upon which TcT provides the 767.45/212.89 certificate YES(O(1),O(n^3)). 767.45/212.89 767.45/212.89 Strict DPs: 767.45/212.89 { matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.89 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.89 matrixMult^#(@m1, @m2)) 767.45/212.89 , matrixMult^#(@m1, @m2) -> 767.45/212.89 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.89 transAcc^#(@m2, makeBase(@m2)), 767.45/212.89 makeBase^#(@m2)) 767.45/212.89 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 767.45/212.89 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 767.45/212.89 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 767.45/212.89 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.89 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.89 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 767.45/212.89 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 767.45/212.89 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.89 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.89 Weak DPs: 767.45/212.89 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 767.45/212.89 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.89 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.89 matrixMult^#(@acc, @m)) 767.45/212.89 , matrixMultOld^#(@m1, @m2) -> 767.45/212.89 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) } 767.45/212.89 Weak Trs: 767.45/212.89 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.89 , split(@m) -> split#1(@m) 767.45/212.89 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.89 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.89 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.89 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.89 , #add(#0(), @y) -> @y 767.45/212.89 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.89 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.89 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.89 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.89 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.89 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.89 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.89 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.89 , +(@x, @y) -> #add(@x, @y) 767.45/212.89 , transAcc#1(nil(), @base) -> @base 767.45/212.89 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.89 attach(@l, transAcc(@m', @base)) 767.45/212.89 , *(@x, @y) -> #mult(@x, @y) 767.45/212.89 , mkBase#1(nil()) -> nil() 767.45/212.89 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.89 , transpose#3(nil(), @l) -> nil() 767.45/212.89 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.89 , attach#1(nil(), @m) -> nil() 767.45/212.89 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.89 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.89 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.89 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.89 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.89 , #natmult(#0(), @y) -> #0() 767.45/212.89 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.89 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.89 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.89 , mkBase(@m) -> mkBase#1(@m) 767.45/212.89 , makeBase(@m) -> makeBase#1(@m) 767.45/212.89 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.89 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.89 , lineMult#1(nil(), @l) -> nil() 767.45/212.89 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.89 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.89 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.89 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.89 , #mult(#neg(@x), #0()) -> #0() 767.45/212.89 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.89 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.89 , #mult(#pos(@x), #0()) -> #0() 767.45/212.89 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.89 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.89 , #mult(#0(), #0()) -> #0() 767.45/212.89 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.89 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.89 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.89 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.89 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.89 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.89 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.89 , makeBase#1(nil()) -> nil() 767.45/212.89 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.89 , matrixMult(@m1, @m2) -> 767.45/212.89 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.89 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.89 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.89 , #abs(#0()) -> #0() 767.45/212.89 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.89 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.89 , transpose#1(nil(), @m) -> nil() 767.45/212.89 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.89 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.89 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.89 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.89 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.89 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.89 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.89 Obligation: 767.45/212.89 innermost runtime complexity 767.45/212.89 Answer: 767.45/212.89 YES(O(1),O(n^3)) 767.45/212.89 767.45/212.89 Due to missing edges in the dependency-graph, the right-hand sides 767.45/212.89 of following rules could be simplified: 767.45/212.89 767.45/212.89 { matrixMult^#(@m1, @m2) -> 767.45/212.89 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 767.45/212.89 transAcc^#(@m2, makeBase(@m2)), 767.45/212.89 makeBase^#(@m2)) 767.45/212.89 , matrixMultOld^#(@m1, @m2) -> 767.45/212.89 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) } 767.45/212.89 767.45/212.89 We are left with following problem, upon which TcT provides the 767.45/212.89 certificate YES(O(1),O(n^3)). 767.45/212.89 767.45/212.89 Strict DPs: 767.45/212.89 { matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.89 c_1(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.89 matrixMult^#(@m1, @m2)) 767.45/212.89 , matrixMult^#(@m1, @m2) -> 767.45/212.89 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.45/212.89 , mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.45/212.89 , mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 767.45/212.89 , matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.45/212.89 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.89 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.89 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 767.45/212.89 , lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 767.45/212.89 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.89 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.89 Weak DPs: 767.45/212.89 { matrixMultList^#(@acc, @mm) -> 767.45/212.89 c_10(matrixMultList#1^#(@mm, @acc)) 767.45/212.89 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.89 c_11(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.89 matrixMult^#(@acc, @m)) 767.45/212.89 , matrixMultOld^#(@m1, @m2) -> 767.45/212.89 c_12(matrixMult'^#(@m1, transpose(@m2))) } 767.45/212.89 Weak Trs: 767.45/212.89 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.89 , split(@m) -> split#1(@m) 767.45/212.89 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.89 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.89 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.89 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.89 , #add(#0(), @y) -> @y 767.45/212.89 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.89 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.89 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.89 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.89 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.89 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.89 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.89 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.89 , +(@x, @y) -> #add(@x, @y) 767.45/212.89 , transAcc#1(nil(), @base) -> @base 767.45/212.89 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.89 attach(@l, transAcc(@m', @base)) 767.45/212.89 , *(@x, @y) -> #mult(@x, @y) 767.45/212.89 , mkBase#1(nil()) -> nil() 767.45/212.89 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.89 , transpose#3(nil(), @l) -> nil() 767.45/212.89 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.89 , attach#1(nil(), @m) -> nil() 767.45/212.89 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.89 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.89 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.89 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.89 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.89 , #natmult(#0(), @y) -> #0() 767.45/212.89 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.89 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.89 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.89 , mkBase(@m) -> mkBase#1(@m) 767.45/212.89 , makeBase(@m) -> makeBase#1(@m) 767.45/212.89 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.89 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.89 , lineMult#1(nil(), @l) -> nil() 767.45/212.89 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.89 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.89 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.89 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.89 , #mult(#neg(@x), #0()) -> #0() 767.45/212.89 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.89 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.89 , #mult(#pos(@x), #0()) -> #0() 767.45/212.89 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.89 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.89 , #mult(#0(), #0()) -> #0() 767.45/212.89 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.89 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.89 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.89 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.89 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.89 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.89 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.89 , makeBase#1(nil()) -> nil() 767.45/212.89 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.89 , matrixMult(@m1, @m2) -> 767.45/212.89 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.89 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.89 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.89 , #abs(#0()) -> #0() 767.45/212.89 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.89 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.89 , transpose#1(nil(), @m) -> nil() 767.45/212.89 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.89 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.89 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.89 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.89 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.89 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.89 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.89 Obligation: 767.45/212.89 innermost runtime complexity 767.45/212.89 Answer: 767.45/212.89 YES(O(1),O(n^3)) 767.45/212.89 767.45/212.89 We decompose the input problem according to the dependency graph 767.45/212.89 into the upper component 767.45/212.89 767.45/212.89 { matrixMultList^#(@acc, @mm) -> 767.45/212.89 c_10(matrixMultList#1^#(@mm, @acc)) 767.45/212.89 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.89 c_11(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.89 matrixMult^#(@acc, @m)) 767.45/212.89 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.89 c_1(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.89 matrixMult^#(@m1, @m2)) 767.45/212.89 , matrixMultOld^#(@m1, @m2) -> 767.45/212.89 c_12(matrixMult'^#(@m1, transpose(@m2))) } 767.45/212.89 767.45/212.89 and lower component 767.45/212.89 767.45/212.89 { matrixMult^#(@m1, @m2) -> 767.45/212.89 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.45/212.89 , mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.45/212.89 , mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 767.45/212.89 , matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.45/212.89 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.45/212.89 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.45/212.89 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 767.45/212.89 , lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 767.45/212.89 , lineMult#1^#(::(@x, @xs), @l) -> 767.45/212.89 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.45/212.89 767.45/212.89 Further, following extension rules are added to the lower 767.45/212.89 component. 767.45/212.89 767.45/212.89 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.45/212.89 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.89 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.45/212.89 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.45/212.89 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.45/212.89 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.89 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.45/212.89 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.45/212.89 767.45/212.89 TcT solves the upper component with certificate YES(O(1),O(n^1)). 767.45/212.89 767.45/212.89 Sub-proof: 767.45/212.89 ---------- 767.45/212.89 We are left with following problem, upon which TcT provides the 767.45/212.89 certificate YES(O(1),O(n^1)). 767.45/212.89 767.45/212.89 Strict DPs: 767.45/212.89 { matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.89 c_11(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.89 matrixMult^#(@acc, @m)) 767.45/212.89 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.89 c_1(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.89 matrixMult^#(@m1, @m2)) 767.45/212.89 , matrixMultOld^#(@m1, @m2) -> 767.45/212.89 c_12(matrixMult'^#(@m1, transpose(@m2))) } 767.45/212.89 Weak DPs: 767.45/212.89 { matrixMultList^#(@acc, @mm) -> 767.45/212.89 c_10(matrixMultList#1^#(@mm, @acc)) } 767.45/212.89 Weak Trs: 767.45/212.89 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.89 , split(@m) -> split#1(@m) 767.45/212.89 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.89 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.89 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.89 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.89 , #add(#0(), @y) -> @y 767.45/212.89 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.89 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.89 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.89 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.89 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.89 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.89 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.89 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.89 , +(@x, @y) -> #add(@x, @y) 767.45/212.89 , transAcc#1(nil(), @base) -> @base 767.45/212.90 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.90 attach(@l, transAcc(@m', @base)) 767.45/212.90 , *(@x, @y) -> #mult(@x, @y) 767.45/212.90 , mkBase#1(nil()) -> nil() 767.45/212.90 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.90 , transpose#3(nil(), @l) -> nil() 767.45/212.90 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.90 , attach#1(nil(), @m) -> nil() 767.45/212.90 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.90 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.90 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.90 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.90 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.90 , #natmult(#0(), @y) -> #0() 767.45/212.90 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.90 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.90 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.90 , mkBase(@m) -> mkBase#1(@m) 767.45/212.90 , makeBase(@m) -> makeBase#1(@m) 767.45/212.90 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.90 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.90 , lineMult#1(nil(), @l) -> nil() 767.45/212.90 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.90 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.90 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.90 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.90 , #mult(#neg(@x), #0()) -> #0() 767.45/212.90 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.45/212.90 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.90 , #mult(#pos(@x), #0()) -> #0() 767.45/212.90 , #mult(#0(), #neg(@y)) -> #0() 767.45/212.90 , #mult(#0(), #pos(@y)) -> #0() 767.45/212.90 , #mult(#0(), #0()) -> #0() 767.45/212.90 , attach#2(nil(), @x, @xs) -> nil() 767.45/212.90 , attach#2(::(@l, @ls), @x, @xs) -> 767.45/212.90 ::(::(@x, @l), attach(@xs, @ls)) 767.45/212.90 , #succ(#neg(#s(#0()))) -> #0() 767.45/212.90 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.45/212.90 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.45/212.90 , #succ(#0()) -> #pos(#s(#0())) 767.45/212.90 , makeBase#1(nil()) -> nil() 767.45/212.90 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.45/212.90 , matrixMult(@m1, @m2) -> 767.45/212.90 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.45/212.90 , #abs(#neg(@x)) -> #pos(@x) 767.45/212.90 , #abs(#pos(@x)) -> #pos(@x) 767.45/212.90 , #abs(#0()) -> #0() 767.45/212.90 , #abs(#s(@x)) -> #pos(#s(@x)) 767.45/212.90 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.45/212.90 , transpose#1(nil(), @m) -> nil() 767.45/212.90 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.45/212.90 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.45/212.90 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.45/212.90 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.45/212.90 , #pred(#pos(#s(#0()))) -> #0() 767.45/212.90 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.45/212.90 , #pred(#0()) -> #neg(#s(#0())) } 767.45/212.90 Obligation: 767.45/212.90 innermost runtime complexity 767.45/212.90 Answer: 767.45/212.90 YES(O(1),O(n^1)) 767.45/212.90 767.45/212.90 We estimate the number of application of {2,3} by applications of 767.45/212.90 Pre({2,3}) = {}. Here rules are labeled as follows: 767.45/212.90 767.45/212.90 DPs: 767.45/212.90 { 1: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.90 c_11(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.90 matrixMult^#(@acc, @m)) 767.45/212.90 , 2: matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.90 c_1(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.90 matrixMult^#(@m1, @m2)) 767.45/212.90 , 3: matrixMultOld^#(@m1, @m2) -> 767.45/212.90 c_12(matrixMult'^#(@m1, transpose(@m2))) 767.45/212.90 , 4: matrixMultList^#(@acc, @mm) -> 767.45/212.90 c_10(matrixMultList#1^#(@mm, @acc)) } 767.45/212.90 767.45/212.90 We are left with following problem, upon which TcT provides the 767.45/212.90 certificate YES(O(1),O(n^1)). 767.45/212.90 767.45/212.90 Strict DPs: 767.45/212.90 { matrixMultList#1^#(::(@m, @ms), @acc) -> 767.45/212.90 c_11(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.45/212.90 matrixMult^#(@acc, @m)) } 767.45/212.90 Weak DPs: 767.45/212.90 { matrixMultList^#(@acc, @mm) -> 767.45/212.90 c_10(matrixMultList#1^#(@mm, @acc)) 767.45/212.90 , matrixMult3^#(@m1, @m2, @m3) -> 767.45/212.90 c_1(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.45/212.90 matrixMult^#(@m1, @m2)) 767.45/212.90 , matrixMultOld^#(@m1, @m2) -> 767.45/212.90 c_12(matrixMult'^#(@m1, transpose(@m2))) } 767.45/212.90 Weak Trs: 767.45/212.90 { attach(@line, @m) -> attach#1(@line, @m) 767.45/212.90 , split(@m) -> split#1(@m) 767.45/212.90 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.45/212.90 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.45/212.90 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.45/212.90 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.45/212.90 , #add(#0(), @y) -> @y 767.45/212.90 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.45/212.90 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.45/212.90 , split#1(nil()) -> tuple#2(nil(), nil()) 767.45/212.90 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.45/212.90 , transpose(@m) -> transpose#1(@m, @m) 767.45/212.90 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.45/212.90 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.45/212.90 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.45/212.90 , +(@x, @y) -> #add(@x, @y) 767.45/212.90 , transAcc#1(nil(), @base) -> @base 767.45/212.90 , transAcc#1(::(@l, @m'), @base) -> 767.45/212.90 attach(@l, transAcc(@m', @base)) 767.45/212.90 , *(@x, @y) -> #mult(@x, @y) 767.45/212.90 , mkBase#1(nil()) -> nil() 767.45/212.90 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.45/212.90 , transpose#3(nil(), @l) -> nil() 767.45/212.90 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.45/212.90 , attach#1(nil(), @m) -> nil() 767.45/212.90 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.45/212.90 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.45/212.90 , matrixMult'#1(nil(), @m2) -> nil() 767.45/212.90 , matrixMult'#1(::(@l, @ls), @m2) -> 767.45/212.90 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.45/212.90 , #natmult(#0(), @y) -> #0() 767.45/212.90 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.45/212.90 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.45/212.90 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.45/212.90 , mkBase(@m) -> mkBase#1(@m) 767.45/212.90 , makeBase(@m) -> makeBase#1(@m) 767.45/212.90 , mult#1(nil(), @l2) -> #abs(#0()) 767.45/212.90 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.45/212.90 , lineMult#1(nil(), @l) -> nil() 767.45/212.90 , lineMult#1(::(@x, @xs), @l) -> 767.45/212.90 ::(mult(@l, @x), lineMult(@l, @xs)) 767.45/212.90 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.45/212.90 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #0()) -> #0() 767.69/212.90 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #0()) -> #0() 767.69/212.90 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.90 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.90 , #mult(#0(), #0()) -> #0() 767.69/212.90 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.90 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.90 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.90 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.90 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.90 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.90 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.90 , makeBase#1(nil()) -> nil() 767.69/212.90 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.90 , matrixMult(@m1, @m2) -> 767.69/212.90 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.90 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.90 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.90 , #abs(#0()) -> #0() 767.69/212.90 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.90 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.90 , transpose#1(nil(), @m) -> nil() 767.69/212.90 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.90 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.90 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.90 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.90 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.90 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.90 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.90 Obligation: 767.69/212.90 innermost runtime complexity 767.69/212.90 Answer: 767.69/212.90 YES(O(1),O(n^1)) 767.69/212.90 767.69/212.90 The following weak DPs constitute a sub-graph of the DG that is 767.69/212.90 closed under successors. The DPs are removed. 767.69/212.90 767.69/212.90 { matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.90 c_1(matrixMult^#(matrixMult(@m1, @m2), @m3), 767.69/212.90 matrixMult^#(@m1, @m2)) 767.69/212.90 , matrixMultOld^#(@m1, @m2) -> 767.69/212.90 c_12(matrixMult'^#(@m1, transpose(@m2))) } 767.69/212.90 767.69/212.90 We are left with following problem, upon which TcT provides the 767.69/212.90 certificate YES(O(1),O(n^1)). 767.69/212.90 767.69/212.90 Strict DPs: 767.69/212.90 { matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.90 c_11(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.69/212.90 matrixMult^#(@acc, @m)) } 767.69/212.90 Weak DPs: 767.69/212.90 { matrixMultList^#(@acc, @mm) -> 767.69/212.90 c_10(matrixMultList#1^#(@mm, @acc)) } 767.69/212.90 Weak Trs: 767.69/212.90 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.90 , split(@m) -> split#1(@m) 767.69/212.90 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.90 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.90 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#0(), @y) -> @y 767.69/212.90 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.90 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.90 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.90 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.90 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.90 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.90 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.90 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.90 , +(@x, @y) -> #add(@x, @y) 767.69/212.90 , transAcc#1(nil(), @base) -> @base 767.69/212.90 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.90 attach(@l, transAcc(@m', @base)) 767.69/212.90 , *(@x, @y) -> #mult(@x, @y) 767.69/212.90 , mkBase#1(nil()) -> nil() 767.69/212.90 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.90 , transpose#3(nil(), @l) -> nil() 767.69/212.90 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.90 , attach#1(nil(), @m) -> nil() 767.69/212.90 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.90 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.90 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.90 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.90 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.90 , #natmult(#0(), @y) -> #0() 767.69/212.90 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.90 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.90 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.90 , mkBase(@m) -> mkBase#1(@m) 767.69/212.90 , makeBase(@m) -> makeBase#1(@m) 767.69/212.90 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.90 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.90 , lineMult#1(nil(), @l) -> nil() 767.69/212.90 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.90 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.90 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #0()) -> #0() 767.69/212.90 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #0()) -> #0() 767.69/212.90 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.90 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.90 , #mult(#0(), #0()) -> #0() 767.69/212.90 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.90 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.90 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.90 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.90 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.90 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.90 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.90 , makeBase#1(nil()) -> nil() 767.69/212.90 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.90 , matrixMult(@m1, @m2) -> 767.69/212.90 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.90 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.90 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.90 , #abs(#0()) -> #0() 767.69/212.90 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.90 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.90 , transpose#1(nil(), @m) -> nil() 767.69/212.90 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.90 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.90 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.90 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.90 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.90 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.90 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.90 Obligation: 767.69/212.90 innermost runtime complexity 767.69/212.90 Answer: 767.69/212.90 YES(O(1),O(n^1)) 767.69/212.90 767.69/212.90 Due to missing edges in the dependency-graph, the right-hand sides 767.69/212.90 of following rules could be simplified: 767.69/212.90 767.69/212.90 { matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.90 c_11(matrixMultList^#(matrixMult(@acc, @m), @ms), 767.69/212.90 matrixMult^#(@acc, @m)) } 767.69/212.90 767.69/212.90 We are left with following problem, upon which TcT provides the 767.69/212.90 certificate YES(O(1),O(n^1)). 767.69/212.90 767.69/212.90 Strict DPs: 767.69/212.90 { matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.90 c_1(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 767.69/212.90 Weak DPs: 767.69/212.90 { matrixMultList^#(@acc, @mm) -> 767.69/212.90 c_2(matrixMultList#1^#(@mm, @acc)) } 767.69/212.90 Weak Trs: 767.69/212.90 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.90 , split(@m) -> split#1(@m) 767.69/212.90 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.90 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.90 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#0(), @y) -> @y 767.69/212.90 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.90 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.90 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.90 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.90 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.90 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.90 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.90 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.90 , +(@x, @y) -> #add(@x, @y) 767.69/212.90 , transAcc#1(nil(), @base) -> @base 767.69/212.90 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.90 attach(@l, transAcc(@m', @base)) 767.69/212.90 , *(@x, @y) -> #mult(@x, @y) 767.69/212.90 , mkBase#1(nil()) -> nil() 767.69/212.90 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.90 , transpose#3(nil(), @l) -> nil() 767.69/212.90 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.90 , attach#1(nil(), @m) -> nil() 767.69/212.90 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.90 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.90 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.90 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.90 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.90 , #natmult(#0(), @y) -> #0() 767.69/212.90 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.90 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.90 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.90 , mkBase(@m) -> mkBase#1(@m) 767.69/212.90 , makeBase(@m) -> makeBase#1(@m) 767.69/212.90 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.90 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.90 , lineMult#1(nil(), @l) -> nil() 767.69/212.90 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.90 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.90 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #0()) -> #0() 767.69/212.90 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #0()) -> #0() 767.69/212.90 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.90 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.90 , #mult(#0(), #0()) -> #0() 767.69/212.90 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.90 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.90 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.90 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.90 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.90 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.90 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.90 , makeBase#1(nil()) -> nil() 767.69/212.90 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.90 , matrixMult(@m1, @m2) -> 767.69/212.90 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.90 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.90 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.90 , #abs(#0()) -> #0() 767.69/212.90 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.90 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.90 , transpose#1(nil(), @m) -> nil() 767.69/212.90 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.90 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.90 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.90 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.90 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.90 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.90 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.90 Obligation: 767.69/212.90 innermost runtime complexity 767.69/212.90 Answer: 767.69/212.90 YES(O(1),O(n^1)) 767.69/212.90 767.69/212.90 We replace rewrite rules by usable rules: 767.69/212.90 767.69/212.90 Weak Usable Rules: 767.69/212.90 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.90 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.90 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.90 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#0(), @y) -> @y 767.69/212.90 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.90 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.90 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.90 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.90 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.90 , +(@x, @y) -> #add(@x, @y) 767.69/212.90 , transAcc#1(nil(), @base) -> @base 767.69/212.90 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.90 attach(@l, transAcc(@m', @base)) 767.69/212.90 , *(@x, @y) -> #mult(@x, @y) 767.69/212.90 , mkBase#1(nil()) -> nil() 767.69/212.90 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.90 , attach#1(nil(), @m) -> nil() 767.69/212.90 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.90 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.90 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.90 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.90 , #natmult(#0(), @y) -> #0() 767.69/212.90 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.90 , mkBase(@m) -> mkBase#1(@m) 767.69/212.90 , makeBase(@m) -> makeBase#1(@m) 767.69/212.90 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.90 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.90 , lineMult#1(nil(), @l) -> nil() 767.69/212.90 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.90 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.90 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #0()) -> #0() 767.69/212.90 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #0()) -> #0() 767.69/212.90 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.90 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.90 , #mult(#0(), #0()) -> #0() 767.69/212.90 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.90 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.90 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.90 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.90 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.90 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.90 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.90 , makeBase#1(nil()) -> nil() 767.69/212.90 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.90 , matrixMult(@m1, @m2) -> 767.69/212.90 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.90 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.90 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.90 , #abs(#0()) -> #0() 767.69/212.90 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.90 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.90 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.90 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.90 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.90 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.90 767.69/212.90 We are left with following problem, upon which TcT provides the 767.69/212.90 certificate YES(O(1),O(n^1)). 767.69/212.90 767.69/212.90 Strict DPs: 767.69/212.90 { matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.90 c_1(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 767.69/212.90 Weak DPs: 767.69/212.90 { matrixMultList^#(@acc, @mm) -> 767.69/212.90 c_2(matrixMultList#1^#(@mm, @acc)) } 767.69/212.90 Weak Trs: 767.69/212.90 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.90 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.90 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.90 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.90 , #add(#0(), @y) -> @y 767.69/212.90 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.90 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.90 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.90 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.90 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.90 , +(@x, @y) -> #add(@x, @y) 767.69/212.90 , transAcc#1(nil(), @base) -> @base 767.69/212.90 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.90 attach(@l, transAcc(@m', @base)) 767.69/212.90 , *(@x, @y) -> #mult(@x, @y) 767.69/212.90 , mkBase#1(nil()) -> nil() 767.69/212.90 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.90 , attach#1(nil(), @m) -> nil() 767.69/212.90 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.90 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.90 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.90 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.90 , #natmult(#0(), @y) -> #0() 767.69/212.90 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.90 , mkBase(@m) -> mkBase#1(@m) 767.69/212.90 , makeBase(@m) -> makeBase#1(@m) 767.69/212.90 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.90 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.90 , lineMult#1(nil(), @l) -> nil() 767.69/212.90 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.90 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.90 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#neg(@x), #0()) -> #0() 767.69/212.90 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.90 , #mult(#pos(@x), #0()) -> #0() 767.69/212.90 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.91 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.91 , #mult(#0(), #0()) -> #0() 767.69/212.91 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.91 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.91 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.91 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.91 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.91 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.91 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.91 , makeBase#1(nil()) -> nil() 767.69/212.91 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.91 , matrixMult(@m1, @m2) -> 767.69/212.91 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.91 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.91 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.91 , #abs(#0()) -> #0() 767.69/212.91 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.91 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.91 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.91 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.91 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.91 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.91 Obligation: 767.69/212.91 innermost runtime complexity 767.69/212.91 Answer: 767.69/212.91 YES(O(1),O(n^1)) 767.69/212.91 767.69/212.91 We use the processor 'matrix interpretation of dimension 1' to 767.69/212.91 orient following rules strictly. 767.69/212.91 767.69/212.91 DPs: 767.69/212.91 { 1: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.91 c_1(matrixMultList^#(matrixMult(@acc, @m), @ms)) 767.69/212.91 , 2: matrixMultList^#(@acc, @mm) -> 767.69/212.91 c_2(matrixMultList#1^#(@mm, @acc)) } 767.69/212.91 767.69/212.91 Sub-proof: 767.69/212.91 ---------- 767.69/212.91 The following argument positions are usable: 767.69/212.91 Uargs(c_1) = {1}, Uargs(c_2) = {1} 767.69/212.91 767.69/212.91 TcT has computed the following constructor-based matrix 767.69/212.91 interpretation satisfying not(EDA). 767.69/212.91 767.69/212.91 [attach](x1, x2) = [3] x1 + [0] 767.69/212.91 767.69/212.91 [split](x1) = [7] x1 + [0] 767.69/212.91 767.69/212.91 [#add](x1, x2) = [0] 767.69/212.91 767.69/212.91 [mult#2](x1, x2, x3) = [4] x2 + [7] x3 + [0] 767.69/212.91 767.69/212.91 [nil] = [0] 767.69/212.91 767.69/212.91 [split#1](x1) = [7] x1 + [0] 767.69/212.91 767.69/212.91 [transpose](x1) = [7] x1 + [0] 767.69/212.91 767.69/212.91 [matrixMult'](x1, x2) = [4] x1 + [0] 767.69/212.91 767.69/212.91 [transAcc](x1, x2) = [0] 767.69/212.91 767.69/212.91 [mult](x1, x2) = [0] 767.69/212.91 767.69/212.91 [+](x1, x2) = [0] 767.69/212.91 767.69/212.91 [transAcc#1](x1, x2) = [4] x2 + [0] 767.69/212.91 767.69/212.91 [#neg](x1) = [0] 767.69/212.91 767.69/212.91 [*](x1, x2) = [0] 767.69/212.91 767.69/212.91 [mkBase#1](x1) = [0] 767.69/212.91 767.69/212.91 [transpose#3](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [attach#1](x1, x2) = [4] x2 + [0] 767.69/212.91 767.69/212.91 [transpose#2](x1) = [7] x1 + [0] 767.69/212.91 767.69/212.91 [matrixMult'#1](x1, x2) = [0] 767.69/212.91 767.69/212.91 [#natmult](x1, x2) = [0] 767.69/212.91 767.69/212.91 [split#2](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [#pos](x1) = [0] 767.69/212.91 767.69/212.91 [tuple#2](x1, x2) = [1] x1 + [1] x2 + [0] 767.69/212.91 767.69/212.91 [mkBase](x1) = [3] x1 + [0] 767.69/212.91 767.69/212.91 [makeBase](x1) = [0] 767.69/212.91 767.69/212.91 [mult#1](x1, x2) = [4] x2 + [0] 767.69/212.91 767.69/212.91 [::](x1, x2) = [1] x2 + [4] 767.69/212.91 767.69/212.91 [lineMult#1](x1, x2) = [7] x2 + [0] 767.69/212.91 767.69/212.91 [#mult](x1, x2) = [0] 767.69/212.91 767.69/212.91 [attach#2](x1, x2, x3) = [4] x3 + [0] 767.69/212.91 767.69/212.91 [#succ](x1) = [0] 767.69/212.91 767.69/212.91 [#0] = [0] 767.69/212.91 767.69/212.91 [makeBase#1](x1) = [0] 767.69/212.91 767.69/212.91 [matrixMult](x1, x2) = [0] 767.69/212.91 767.69/212.91 [#abs](x1) = [0] 767.69/212.91 767.69/212.91 [lineMult](x1, x2) = [3] x2 + [4] 767.69/212.91 767.69/212.91 [transpose#1](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [split#3](x1, x2, x3) = [7] x1 + [7] x2 + [7] x3 + [0] 767.69/212.91 767.69/212.91 [#pred](x1) = [0] 767.69/212.91 767.69/212.91 [#s](x1) = [0] 767.69/212.91 767.69/212.91 [matrixMultList^#](x1, x2) = [2] x2 + [4] 767.69/212.91 767.69/212.91 [matrixMultList#1^#](x1, x2) = [2] x1 + [0] 767.69/212.91 767.69/212.91 [matrixMult3^#](x1, x2, x3) = [7] x1 + [7] x2 + [7] x3 + [0] 767.69/212.91 767.69/212.91 [matrixMult^#](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [matrixMult'^#](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [matrixMultOld^#](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [c_1](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [c_10](x1) = [7] x1 + [0] 767.69/212.91 767.69/212.91 [c_11](x1, x2) = [7] x1 + [7] x2 + [0] 767.69/212.91 767.69/212.91 [c_12](x1) = [7] x1 + [0] 767.69/212.91 767.69/212.91 [c] = [0] 767.69/212.91 767.69/212.91 [c_1](x1) = [1] x1 + [3] 767.69/212.91 767.69/212.91 [c_2](x1) = [1] x1 + [3] 767.69/212.91 767.69/212.91 The order satisfies the following ordering constraints: 767.69/212.91 767.69/212.91 [attach(@line, @m)] = [3] @line + [0] 767.69/212.91 ? [4] @m + [0] 767.69/212.91 = [attach#1(@line, @m)] 767.69/212.91 767.69/212.91 [#add(#neg(#s(#0())), @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pred(@y)] 767.69/212.91 767.69/212.91 [#add(#neg(#s(#s(@x))), @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pred(#add(#pos(#s(@x)), @y))] 767.69/212.91 767.69/212.91 [#add(#pos(#s(#0())), @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#succ(@y)] 767.69/212.91 767.69/212.91 [#add(#pos(#s(#s(@x))), @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#succ(#add(#pos(#s(@x)), @y))] 767.69/212.91 767.69/212.91 [#add(#0(), @y)] = [0] 767.69/212.91 ? [1] @y + [0] 767.69/212.91 = [@y] 767.69/212.91 767.69/212.91 [mult#2(nil(), @x, @xs)] = [4] @x + [7] @xs + [0] 767.69/212.91 >= [0] 767.69/212.91 = [#abs(#0())] 767.69/212.91 767.69/212.91 [mult#2(::(@y, @ys), @x, @xs)] = [4] @x + [7] @xs + [0] 767.69/212.91 >= [0] 767.69/212.91 = [+(*(@x, @y), mult(@xs, @ys))] 767.69/212.91 767.69/212.91 [matrixMult'(@m1, @m2)] = [4] @m1 + [0] 767.69/212.91 >= [0] 767.69/212.91 = [matrixMult'#1(@m1, @m2)] 767.69/212.91 767.69/212.91 [transAcc(@m, @base)] = [0] 767.69/212.91 ? [4] @base + [0] 767.69/212.91 = [transAcc#1(@m, @base)] 767.69/212.91 767.69/212.91 [mult(@l1, @l2)] = [0] 767.69/212.91 ? [4] @l2 + [0] 767.69/212.91 = [mult#1(@l1, @l2)] 767.69/212.91 767.69/212.91 [+(@x, @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#add(@x, @y)] 767.69/212.91 767.69/212.91 [transAcc#1(nil(), @base)] = [4] @base + [0] 767.69/212.91 >= [1] @base + [0] 767.69/212.91 = [@base] 767.69/212.91 767.69/212.91 [transAcc#1(::(@l, @m'), @base)] = [4] @base + [0] 767.69/212.91 ? [3] @l + [0] 767.69/212.91 = [attach(@l, transAcc(@m', @base))] 767.69/212.91 767.69/212.91 [*(@x, @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#mult(@x, @y)] 767.69/212.91 767.69/212.91 [mkBase#1(nil())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [nil()] 767.69/212.91 767.69/212.91 [mkBase#1(::(@l, @m'))] = [0] 767.69/212.91 ? [3] @m' + [4] 767.69/212.91 = [::(nil(), mkBase(@m'))] 767.69/212.91 767.69/212.91 [attach#1(nil(), @m)] = [4] @m + [0] 767.69/212.91 >= [0] 767.69/212.91 = [nil()] 767.69/212.91 767.69/212.91 [attach#1(::(@x, @xs), @m)] = [4] @m + [0] 767.69/212.91 ? [4] @xs + [0] 767.69/212.91 = [attach#2(@m, @x, @xs)] 767.69/212.91 767.69/212.91 [matrixMult'#1(nil(), @m2)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [nil()] 767.69/212.91 767.69/212.91 [matrixMult'#1(::(@l, @ls), @m2)] = [0] 767.69/212.91 ? [4] @ls + [4] 767.69/212.91 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 767.69/212.91 767.69/212.91 [#natmult(#0(), @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#natmult(#s(@x), @y)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#add(#pos(@y), #natmult(@x, @y))] 767.69/212.91 767.69/212.91 [mkBase(@m)] = [3] @m + [0] 767.69/212.91 >= [0] 767.69/212.91 = [mkBase#1(@m)] 767.69/212.91 767.69/212.91 [makeBase(@m)] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [makeBase#1(@m)] 767.69/212.91 767.69/212.91 [mult#1(nil(), @l2)] = [4] @l2 + [0] 767.69/212.91 >= [0] 767.69/212.91 = [#abs(#0())] 767.69/212.91 767.69/212.91 [mult#1(::(@x, @xs), @l2)] = [4] @l2 + [0] 767.69/212.91 ? [4] @x + [7] @xs + [0] 767.69/212.91 = [mult#2(@l2, @x, @xs)] 767.69/212.91 767.69/212.91 [lineMult#1(nil(), @l)] = [7] @l + [0] 767.69/212.91 >= [0] 767.69/212.91 = [nil()] 767.69/212.91 767.69/212.91 [lineMult#1(::(@x, @xs), @l)] = [7] @l + [0] 767.69/212.91 ? [3] @xs + [8] 767.69/212.91 = [::(mult(@l, @x), lineMult(@l, @xs))] 767.69/212.91 767.69/212.91 [#mult(#neg(@x), #neg(@y))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(#natmult(@x, @y))] 767.69/212.91 767.69/212.91 [#mult(#neg(@x), #pos(@y))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#neg(#natmult(@x, @y))] 767.69/212.91 767.69/212.91 [#mult(#neg(@x), #0())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#mult(#pos(@x), #neg(@y))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#neg(#natmult(@x, @y))] 767.69/212.91 767.69/212.91 [#mult(#pos(@x), #pos(@y))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(#natmult(@x, @y))] 767.69/212.91 767.69/212.91 [#mult(#pos(@x), #0())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#mult(#0(), #neg(@y))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#mult(#0(), #pos(@y))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#mult(#0(), #0())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [attach#2(nil(), @x, @xs)] = [4] @xs + [0] 767.69/212.91 >= [0] 767.69/212.91 = [nil()] 767.69/212.91 767.69/212.91 [attach#2(::(@l, @ls), @x, @xs)] = [4] @xs + [0] 767.69/212.91 ? [3] @xs + [4] 767.69/212.91 = [::(::(@x, @l), attach(@xs, @ls))] 767.69/212.91 767.69/212.91 [#succ(#neg(#s(#0())))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#succ(#neg(#s(#s(@x))))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#neg(#s(@x))] 767.69/212.91 767.69/212.91 [#succ(#pos(#s(@x)))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(#s(#s(@x)))] 767.69/212.91 767.69/212.91 [#succ(#0())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(#s(#0()))] 767.69/212.91 767.69/212.91 [makeBase#1(nil())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [nil()] 767.69/212.91 767.69/212.91 [makeBase#1(::(@l, @m'))] = [0] 767.69/212.91 ? [3] @l + [0] 767.69/212.91 = [mkBase(@l)] 767.69/212.91 767.69/212.91 [matrixMult(@m1, @m2)] = [0] 767.69/212.91 ? [4] @m1 + [0] 767.69/212.91 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 767.69/212.91 767.69/212.91 [#abs(#neg(@x))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(@x)] 767.69/212.91 767.69/212.91 [#abs(#pos(@x))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(@x)] 767.69/212.91 767.69/212.91 [#abs(#0())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#abs(#s(@x))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(#s(@x))] 767.69/212.91 767.69/212.91 [lineMult(@l, @m2)] = [3] @m2 + [4] 767.69/212.91 ? [7] @l + [0] 767.69/212.91 = [lineMult#1(@m2, @l)] 767.69/212.91 767.69/212.91 [#pred(#neg(#s(@x)))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#neg(#s(#s(@x)))] 767.69/212.91 767.69/212.91 [#pred(#pos(#s(#0())))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#0()] 767.69/212.91 767.69/212.91 [#pred(#pos(#s(#s(@x))))] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#pos(#s(@x))] 767.69/212.91 767.69/212.91 [#pred(#0())] = [0] 767.69/212.91 >= [0] 767.69/212.91 = [#neg(#s(#0()))] 767.69/212.91 767.69/212.91 [matrixMultList^#(@acc, @mm)] = [2] @mm + [4] 767.69/212.91 > [2] @mm + [3] 767.69/212.91 = [c_2(matrixMultList#1^#(@mm, @acc))] 767.69/212.91 767.69/212.91 [matrixMultList#1^#(::(@m, @ms), @acc)] = [2] @ms + [8] 767.69/212.91 > [2] @ms + [7] 767.69/212.91 = [c_1(matrixMultList^#(matrixMult(@acc, @m), @ms))] 767.69/212.91 767.69/212.91 767.69/212.91 The strictly oriented rules are moved into the weak component. 767.69/212.91 767.69/212.91 We are left with following problem, upon which TcT provides the 767.69/212.91 certificate YES(O(1),O(1)). 767.69/212.91 767.69/212.91 Weak DPs: 767.69/212.91 { matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 767.69/212.91 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.91 c_1(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 767.69/212.91 Weak Trs: 767.69/212.91 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.91 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.91 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.91 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.91 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.91 , #add(#0(), @y) -> @y 767.69/212.91 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.91 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.91 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.91 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.91 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.91 , +(@x, @y) -> #add(@x, @y) 767.69/212.91 , transAcc#1(nil(), @base) -> @base 767.69/212.91 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.91 attach(@l, transAcc(@m', @base)) 767.69/212.91 , *(@x, @y) -> #mult(@x, @y) 767.69/212.91 , mkBase#1(nil()) -> nil() 767.69/212.91 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.91 , attach#1(nil(), @m) -> nil() 767.69/212.91 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.91 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.91 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.91 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.91 , #natmult(#0(), @y) -> #0() 767.69/212.91 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.91 , mkBase(@m) -> mkBase#1(@m) 767.69/212.91 , makeBase(@m) -> makeBase#1(@m) 767.69/212.91 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.91 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.91 , lineMult#1(nil(), @l) -> nil() 767.69/212.91 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.91 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.91 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.91 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.91 , #mult(#neg(@x), #0()) -> #0() 767.69/212.91 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.91 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.91 , #mult(#pos(@x), #0()) -> #0() 767.69/212.91 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.91 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.91 , #mult(#0(), #0()) -> #0() 767.69/212.91 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.91 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.91 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.91 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.91 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.91 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.91 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.91 , makeBase#1(nil()) -> nil() 767.69/212.91 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.91 , matrixMult(@m1, @m2) -> 767.69/212.91 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.91 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.91 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.91 , #abs(#0()) -> #0() 767.69/212.91 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.91 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.91 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.91 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.91 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.91 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.91 Obligation: 767.69/212.91 innermost runtime complexity 767.69/212.91 Answer: 767.69/212.91 YES(O(1),O(1)) 767.69/212.91 767.69/212.91 The following weak DPs constitute a sub-graph of the DG that is 767.69/212.92 closed under successors. The DPs are removed. 767.69/212.92 767.69/212.92 { matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 767.69/212.92 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.92 c_1(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 767.69/212.92 767.69/212.92 We are left with following problem, upon which TcT provides the 767.69/212.92 certificate YES(O(1),O(1)). 767.69/212.92 767.69/212.92 Weak Trs: 767.69/212.92 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.92 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.92 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.92 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.92 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.92 , #add(#0(), @y) -> @y 767.69/212.92 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.92 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.92 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.92 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.92 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.92 , +(@x, @y) -> #add(@x, @y) 767.69/212.92 , transAcc#1(nil(), @base) -> @base 767.69/212.92 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.92 attach(@l, transAcc(@m', @base)) 767.69/212.92 , *(@x, @y) -> #mult(@x, @y) 767.69/212.92 , mkBase#1(nil()) -> nil() 767.69/212.92 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.92 , attach#1(nil(), @m) -> nil() 767.69/212.92 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.92 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.92 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.92 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.92 , #natmult(#0(), @y) -> #0() 767.69/212.92 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.92 , mkBase(@m) -> mkBase#1(@m) 767.69/212.92 , makeBase(@m) -> makeBase#1(@m) 767.69/212.92 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.92 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.92 , lineMult#1(nil(), @l) -> nil() 767.69/212.92 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.92 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.92 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.92 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.92 , #mult(#neg(@x), #0()) -> #0() 767.69/212.92 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.92 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.92 , #mult(#pos(@x), #0()) -> #0() 767.69/212.92 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.92 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.92 , #mult(#0(), #0()) -> #0() 767.69/212.92 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.92 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.92 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.92 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.92 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.92 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.92 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.92 , makeBase#1(nil()) -> nil() 767.69/212.92 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.92 , matrixMult(@m1, @m2) -> 767.69/212.92 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.92 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.92 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.92 , #abs(#0()) -> #0() 767.69/212.92 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.92 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.92 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.92 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.92 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.92 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.92 Obligation: 767.69/212.92 innermost runtime complexity 767.69/212.92 Answer: 767.69/212.92 YES(O(1),O(1)) 767.69/212.92 767.69/212.92 No rule is usable, rules are removed from the input problem. 767.69/212.92 767.69/212.92 We are left with following problem, upon which TcT provides the 767.69/212.92 certificate YES(O(1),O(1)). 767.69/212.92 767.69/212.92 Rules: Empty 767.69/212.92 Obligation: 767.69/212.92 innermost runtime complexity 767.69/212.92 Answer: 767.69/212.92 YES(O(1),O(1)) 767.69/212.92 767.69/212.92 Empty rules are trivially bounded 767.69/212.92 767.69/212.92 We return to the main proof. 767.69/212.92 767.69/212.92 We are left with following problem, upon which TcT provides the 767.69/212.92 certificate YES(O(1),O(n^2)). 767.69/212.92 767.69/212.92 Strict DPs: 767.69/212.92 { matrixMult^#(@m1, @m2) -> 767.69/212.92 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.69/212.92 , mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.69/212.92 , mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 767.69/212.92 , matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.69/212.92 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.69/212.92 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.69/212.92 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 767.69/212.92 , lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 767.69/212.92 , lineMult#1^#(::(@x, @xs), @l) -> 767.69/212.92 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.69/212.92 Weak DPs: 767.69/212.92 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.92 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.92 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.92 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.92 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.92 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.92 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.92 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.92 Weak Trs: 767.69/212.92 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.92 , split(@m) -> split#1(@m) 767.69/212.92 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.92 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.92 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.92 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.92 , #add(#0(), @y) -> @y 767.69/212.92 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.92 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.92 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.92 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.92 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.92 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.92 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.92 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.92 , +(@x, @y) -> #add(@x, @y) 767.69/212.92 , transAcc#1(nil(), @base) -> @base 767.69/212.92 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.92 attach(@l, transAcc(@m', @base)) 767.69/212.92 , *(@x, @y) -> #mult(@x, @y) 767.69/212.92 , mkBase#1(nil()) -> nil() 767.69/212.92 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.92 , transpose#3(nil(), @l) -> nil() 767.69/212.92 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.92 , attach#1(nil(), @m) -> nil() 767.69/212.92 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.92 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.92 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.92 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.92 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.92 , #natmult(#0(), @y) -> #0() 767.69/212.92 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.92 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.92 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.92 , mkBase(@m) -> mkBase#1(@m) 767.69/212.92 , makeBase(@m) -> makeBase#1(@m) 767.69/212.92 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.92 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.92 , lineMult#1(nil(), @l) -> nil() 767.69/212.92 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.92 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.92 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.92 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.92 , #mult(#neg(@x), #0()) -> #0() 767.69/212.92 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.92 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.92 , #mult(#pos(@x), #0()) -> #0() 767.69/212.92 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.97 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.97 , #mult(#0(), #0()) -> #0() 767.69/212.97 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.97 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.97 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.97 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.97 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.97 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.97 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.97 , makeBase#1(nil()) -> nil() 767.69/212.97 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.97 , matrixMult(@m1, @m2) -> 767.69/212.97 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.97 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.97 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.97 , #abs(#0()) -> #0() 767.69/212.97 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.97 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.97 , transpose#1(nil(), @m) -> nil() 767.69/212.97 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.97 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.97 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.97 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.97 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.97 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.97 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.97 Obligation: 767.69/212.97 innermost runtime complexity 767.69/212.97 Answer: 767.69/212.97 YES(O(1),O(n^2)) 767.69/212.97 767.69/212.97 We decompose the input problem according to the dependency graph 767.69/212.97 into the upper component 767.69/212.97 767.69/212.97 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.97 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.97 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.97 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.97 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.97 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.97 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.97 , matrixMult^#(@m1, @m2) -> 767.69/212.97 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.69/212.97 , matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.69/212.97 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.69/212.97 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.69/212.97 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.97 767.69/212.97 and lower component 767.69/212.97 767.69/212.97 { mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.69/212.97 , mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 767.69/212.97 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 767.69/212.97 , lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 767.69/212.97 , lineMult#1^#(::(@x, @xs), @l) -> 767.69/212.97 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.69/212.97 767.69/212.97 Further, following extension rules are added to the lower 767.69/212.97 component. 767.69/212.97 767.69/212.97 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.97 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.97 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.97 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.97 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.97 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.97 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.97 , matrixMult^#(@m1, @m2) -> 767.69/212.97 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.97 , matrixMult'^#(@m1, @m2) -> matrixMult'#1^#(@m1, @m2) 767.69/212.97 , matrixMult'#1^#(::(@l, @ls), @m2) -> matrixMult'^#(@ls, @m2) 767.69/212.97 , matrixMult'#1^#(::(@l, @ls), @m2) -> lineMult^#(@l, @m2) 767.69/212.97 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.97 767.69/212.97 TcT solves the upper component with certificate YES(O(1),O(n^1)). 767.69/212.97 767.69/212.97 Sub-proof: 767.69/212.97 ---------- 767.69/212.97 We are left with following problem, upon which TcT provides the 767.69/212.97 certificate YES(O(1),O(n^1)). 767.69/212.97 767.69/212.97 Strict DPs: 767.69/212.97 { matrixMult^#(@m1, @m2) -> 767.69/212.97 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.69/212.97 , matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.69/212.97 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.69/212.97 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) } 767.69/212.97 Weak DPs: 767.69/212.97 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.97 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.97 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.97 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.97 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.97 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.97 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.97 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.97 Weak Trs: 767.69/212.97 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.97 , split(@m) -> split#1(@m) 767.69/212.97 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.97 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.97 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.97 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.97 , #add(#0(), @y) -> @y 767.69/212.97 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.97 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.97 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.97 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.97 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.97 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.97 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.97 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.97 , +(@x, @y) -> #add(@x, @y) 767.69/212.97 , transAcc#1(nil(), @base) -> @base 767.69/212.97 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.97 attach(@l, transAcc(@m', @base)) 767.69/212.97 , *(@x, @y) -> #mult(@x, @y) 767.69/212.97 , mkBase#1(nil()) -> nil() 767.69/212.97 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.97 , transpose#3(nil(), @l) -> nil() 767.69/212.97 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.97 , attach#1(nil(), @m) -> nil() 767.69/212.97 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.97 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.97 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.97 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.97 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.97 , #natmult(#0(), @y) -> #0() 767.69/212.97 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.97 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.97 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.97 , mkBase(@m) -> mkBase#1(@m) 767.69/212.97 , makeBase(@m) -> makeBase#1(@m) 767.69/212.97 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.97 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.97 , lineMult#1(nil(), @l) -> nil() 767.69/212.97 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.97 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.97 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.97 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.97 , #mult(#neg(@x), #0()) -> #0() 767.69/212.97 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.97 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.97 , #mult(#pos(@x), #0()) -> #0() 767.69/212.97 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.97 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.97 , #mult(#0(), #0()) -> #0() 767.69/212.97 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.97 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.97 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.97 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.97 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.97 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.97 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.97 , makeBase#1(nil()) -> nil() 767.69/212.97 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.97 , matrixMult(@m1, @m2) -> 767.69/212.97 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.97 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.97 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.97 , #abs(#0()) -> #0() 767.69/212.97 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.97 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.97 , transpose#1(nil(), @m) -> nil() 767.69/212.97 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.97 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.97 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.97 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.97 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.97 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.97 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.97 Obligation: 767.69/212.97 innermost runtime complexity 767.69/212.97 Answer: 767.69/212.97 YES(O(1),O(n^1)) 767.69/212.97 767.69/212.97 We use the processor 'matrix interpretation of dimension 1' to 767.69/212.97 orient following rules strictly. 767.69/212.97 767.69/212.97 DPs: 767.69/212.97 { 3: matrixMult'#1^#(::(@l, @ls), @m2) -> 767.69/212.97 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.69/212.97 , 5: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.97 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.97 , 6: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.97 matrixMult^#(@acc, @m) 767.69/212.97 , 7: matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.97 , 8: matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.97 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.97 , 9: matrixMultOld^#(@m1, @m2) -> 767.69/212.97 matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.97 767.69/212.97 Sub-proof: 767.69/212.97 ---------- 767.69/212.97 The following argument positions are usable: 767.69/212.97 Uargs(c_2) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {2} 767.69/212.97 767.69/212.97 TcT has computed the following constructor-based matrix 767.69/212.97 interpretation satisfying not(EDA). 767.69/212.97 767.69/212.97 [attach](x1, x2) = [3] x1 + [0] 767.69/212.97 767.69/212.97 [split](x1) = [0] 767.69/212.97 767.69/212.97 [#add](x1, x2) = [0] 767.69/212.97 767.69/212.97 [mult#2](x1, x2, x3) = [4] x2 + [7] x3 + [0] 767.69/212.97 767.69/212.97 [nil] = [0] 767.69/212.97 767.69/212.97 [split#1](x1) = [0] 767.69/212.97 767.69/212.97 [transpose](x1) = [0] 767.69/212.97 767.69/212.97 [matrixMult'](x1, x2) = [1] x1 + [0] 767.69/212.97 767.69/212.97 [transAcc](x1, x2) = [0] 767.69/212.97 767.69/212.97 [mult](x1, x2) = [0] 767.69/212.97 767.69/212.97 [+](x1, x2) = [0] 767.69/212.97 767.69/212.97 [transAcc#1](x1, x2) = [4] x2 + [0] 767.69/212.97 767.69/212.97 [#neg](x1) = [0] 767.69/212.97 767.69/212.97 [*](x1, x2) = [0] 767.69/212.97 767.69/212.97 [mkBase#1](x1) = [0] 767.69/212.97 767.69/212.97 [transpose#3](x1, x2) = [4] x2 + [0] 767.69/212.97 767.69/212.97 [attach#1](x1, x2) = [4] x2 + [0] 767.69/212.97 767.69/212.97 [transpose#2](x1) = [0] 767.69/212.97 767.69/212.97 [matrixMult'#1](x1, x2) = [1] x1 + [0] 767.69/212.97 767.69/212.97 [#natmult](x1, x2) = [0] 767.69/212.97 767.69/212.97 [split#2](x1, x2) = [7] x2 + [0] 767.69/212.97 767.69/212.97 [#pos](x1) = [0] 767.69/212.97 767.69/212.97 [tuple#2](x1, x2) = [0] 767.69/212.97 767.69/212.97 [mkBase](x1) = [2] x1 + [0] 767.69/212.97 767.69/212.97 [makeBase](x1) = [0] 767.69/212.97 767.69/212.97 [mult#1](x1, x2) = [4] x2 + [0] 767.69/212.97 767.69/212.97 [::](x1, x2) = [1] x2 + [1] 767.69/212.97 767.69/212.97 [lineMult#1](x1, x2) = [4] x2 + [0] 767.69/212.97 767.69/212.97 [#mult](x1, x2) = [0] 767.69/212.97 767.69/212.97 [attach#2](x1, x2, x3) = [7] x3 + [0] 767.69/212.97 767.69/212.97 [#succ](x1) = [0] 767.69/212.97 767.69/212.97 [#0] = [0] 767.69/212.97 767.69/212.97 [makeBase#1](x1) = [0] 767.69/212.97 767.69/212.97 [matrixMult](x1, x2) = [1] x1 + [0] 767.69/212.97 767.69/212.97 [#abs](x1) = [0] 767.69/212.97 767.69/212.97 [lineMult](x1, x2) = [1] x2 + [0] 767.69/212.97 767.69/212.97 [transpose#1](x1, x2) = [0] 767.69/212.97 767.69/212.97 [split#3](x1, x2, x3) = [0] 767.69/212.97 767.69/212.97 [#pred](x1) = [0] 767.69/212.97 767.69/212.97 [#s](x1) = [0] 767.69/212.97 767.69/212.97 [matrixMultList^#](x1, x2) = [4] x1 + [4] x2 + [0] 767.69/212.97 767.69/212.97 [matrixMultList#1^#](x1, x2) = [4] x1 + [4] x2 + [0] 767.69/212.97 767.69/212.97 [matrixMult3^#](x1, x2, x3) = [7] x1 + [7] x2 + [7] x3 + [7] 767.69/212.97 767.69/212.97 [matrixMult^#](x1, x2) = [4] x1 + [0] 767.69/212.97 767.69/212.97 [matrixMult'^#](x1, x2) = [2] x1 + [0] 767.69/212.97 767.69/212.97 [matrixMult'#1^#](x1, x2) = [2] x1 + [0] 767.69/212.97 767.69/212.97 [lineMult^#](x1, x2) = [7] x1 + [7] x2 + [7] 767.69/212.97 767.69/212.97 [matrixMultOld^#](x1, x2) = [7] x1 + [7] x2 + [7] 767.69/212.97 767.69/212.97 [c_2](x1) = [2] x1 + [0] 767.69/212.97 767.69/212.97 [c_5](x1) = [1] x1 + [0] 767.69/212.97 767.69/212.97 [c_6](x1, x2) = [1] x2 + [1] 767.69/212.97 767.69/212.97 The order satisfies the following ordering constraints: 767.69/212.97 767.69/212.97 [attach(@line, @m)] = [3] @line + [0] 767.69/212.97 ? [4] @m + [0] 767.69/212.97 = [attach#1(@line, @m)] 767.69/212.97 767.69/212.97 [split(@m)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [split#1(@m)] 767.69/212.97 767.69/212.97 [#add(#neg(#s(#0())), @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pred(@y)] 767.69/212.97 767.69/212.97 [#add(#neg(#s(#s(@x))), @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pred(#add(#pos(#s(@x)), @y))] 767.69/212.97 767.69/212.97 [#add(#pos(#s(#0())), @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#succ(@y)] 767.69/212.97 767.69/212.97 [#add(#pos(#s(#s(@x))), @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#succ(#add(#pos(#s(@x)), @y))] 767.69/212.97 767.69/212.97 [#add(#0(), @y)] = [0] 767.69/212.97 ? [1] @y + [0] 767.69/212.97 = [@y] 767.69/212.97 767.69/212.97 [mult#2(nil(), @x, @xs)] = [4] @x + [7] @xs + [0] 767.69/212.97 >= [0] 767.69/212.97 = [#abs(#0())] 767.69/212.97 767.69/212.97 [mult#2(::(@y, @ys), @x, @xs)] = [4] @x + [7] @xs + [0] 767.69/212.97 >= [0] 767.69/212.97 = [+(*(@x, @y), mult(@xs, @ys))] 767.69/212.97 767.69/212.97 [split#1(nil())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [tuple#2(nil(), nil())] 767.69/212.97 767.69/212.97 [split#1(::(@l, @ls))] = [0] 767.69/212.97 ? [7] @ls + [0] 767.69/212.97 = [split#2(@l, @ls)] 767.69/212.97 767.69/212.97 [transpose(@m)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [transpose#1(@m, @m)] 767.69/212.97 767.69/212.97 [matrixMult'(@m1, @m2)] = [1] @m1 + [0] 767.69/212.97 >= [1] @m1 + [0] 767.69/212.97 = [matrixMult'#1(@m1, @m2)] 767.69/212.97 767.69/212.97 [transAcc(@m, @base)] = [0] 767.69/212.97 ? [4] @base + [0] 767.69/212.97 = [transAcc#1(@m, @base)] 767.69/212.97 767.69/212.97 [mult(@l1, @l2)] = [0] 767.69/212.97 ? [4] @l2 + [0] 767.69/212.97 = [mult#1(@l1, @l2)] 767.69/212.97 767.69/212.97 [+(@x, @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#add(@x, @y)] 767.69/212.97 767.69/212.97 [transAcc#1(nil(), @base)] = [4] @base + [0] 767.69/212.97 >= [1] @base + [0] 767.69/212.97 = [@base] 767.69/212.97 767.69/212.97 [transAcc#1(::(@l, @m'), @base)] = [4] @base + [0] 767.69/212.97 ? [3] @l + [0] 767.69/212.97 = [attach(@l, transAcc(@m', @base))] 767.69/212.97 767.69/212.97 [*(@x, @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#mult(@x, @y)] 767.69/212.97 767.69/212.97 [mkBase#1(nil())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [mkBase#1(::(@l, @m'))] = [0] 767.69/212.97 ? [2] @m' + [1] 767.69/212.97 = [::(nil(), mkBase(@m'))] 767.69/212.97 767.69/212.97 [transpose#3(nil(), @l)] = [4] @l + [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [transpose#3(::(@y, @ys), @l)] = [4] @l + [0] 767.69/212.97 ? [1] 767.69/212.97 = [::(@l, transpose(::(@y, @ys)))] 767.69/212.97 767.69/212.97 [attach#1(nil(), @m)] = [4] @m + [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [attach#1(::(@x, @xs), @m)] = [4] @m + [0] 767.69/212.97 ? [7] @xs + [0] 767.69/212.97 = [attach#2(@m, @x, @xs)] 767.69/212.97 767.69/212.97 [transpose#2(tuple#2(@l, @m'))] = [0] 767.69/212.97 ? [4] @l + [0] 767.69/212.97 = [transpose#3(@m', @l)] 767.69/212.97 767.69/212.97 [matrixMult'#1(nil(), @m2)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [matrixMult'#1(::(@l, @ls), @m2)] = [1] @ls + [1] 767.69/212.97 >= [1] @ls + [1] 767.69/212.97 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 767.69/212.97 767.69/212.97 [#natmult(#0(), @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#natmult(#s(@x), @y)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#add(#pos(@y), #natmult(@x, @y))] 767.69/212.97 767.69/212.97 [split#2(nil(), @ls)] = [7] @ls + [0] 767.69/212.97 >= [0] 767.69/212.97 = [tuple#2(nil(), nil())] 767.69/212.97 767.69/212.97 [split#2(::(@x, @xs), @ls)] = [7] @ls + [0] 767.69/212.97 >= [0] 767.69/212.97 = [split#3(split(@ls), @x, @xs)] 767.69/212.97 767.69/212.97 [mkBase(@m)] = [2] @m + [0] 767.69/212.97 >= [0] 767.69/212.97 = [mkBase#1(@m)] 767.69/212.97 767.69/212.97 [makeBase(@m)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [makeBase#1(@m)] 767.69/212.97 767.69/212.97 [mult#1(nil(), @l2)] = [4] @l2 + [0] 767.69/212.97 >= [0] 767.69/212.97 = [#abs(#0())] 767.69/212.97 767.69/212.97 [mult#1(::(@x, @xs), @l2)] = [4] @l2 + [0] 767.69/212.97 ? [4] @x + [7] @xs + [0] 767.69/212.97 = [mult#2(@l2, @x, @xs)] 767.69/212.97 767.69/212.97 [lineMult#1(nil(), @l)] = [4] @l + [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [lineMult#1(::(@x, @xs), @l)] = [4] @l + [0] 767.69/212.97 ? [1] @xs + [1] 767.69/212.97 = [::(mult(@l, @x), lineMult(@l, @xs))] 767.69/212.97 767.69/212.97 [#mult(#neg(@x), #neg(@y))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(#natmult(@x, @y))] 767.69/212.97 767.69/212.97 [#mult(#neg(@x), #pos(@y))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#neg(#natmult(@x, @y))] 767.69/212.97 767.69/212.97 [#mult(#neg(@x), #0())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#mult(#pos(@x), #neg(@y))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#neg(#natmult(@x, @y))] 767.69/212.97 767.69/212.97 [#mult(#pos(@x), #pos(@y))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(#natmult(@x, @y))] 767.69/212.97 767.69/212.97 [#mult(#pos(@x), #0())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#mult(#0(), #neg(@y))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#mult(#0(), #pos(@y))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#mult(#0(), #0())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [attach#2(nil(), @x, @xs)] = [7] @xs + [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [attach#2(::(@l, @ls), @x, @xs)] = [7] @xs + [0] 767.69/212.97 ? [3] @xs + [1] 767.69/212.97 = [::(::(@x, @l), attach(@xs, @ls))] 767.69/212.97 767.69/212.97 [#succ(#neg(#s(#0())))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#succ(#neg(#s(#s(@x))))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#neg(#s(@x))] 767.69/212.97 767.69/212.97 [#succ(#pos(#s(@x)))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(#s(#s(@x)))] 767.69/212.97 767.69/212.97 [#succ(#0())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(#s(#0()))] 767.69/212.97 767.69/212.97 [makeBase#1(nil())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [makeBase#1(::(@l, @m'))] = [0] 767.69/212.97 ? [2] @l + [0] 767.69/212.97 = [mkBase(@l)] 767.69/212.97 767.69/212.97 [matrixMult(@m1, @m2)] = [1] @m1 + [0] 767.69/212.97 >= [1] @m1 + [0] 767.69/212.97 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 767.69/212.97 767.69/212.97 [#abs(#neg(@x))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(@x)] 767.69/212.97 767.69/212.97 [#abs(#pos(@x))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(@x)] 767.69/212.97 767.69/212.97 [#abs(#0())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#abs(#s(@x))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(#s(@x))] 767.69/212.97 767.69/212.97 [lineMult(@l, @m2)] = [1] @m2 + [0] 767.69/212.97 ? [4] @l + [0] 767.69/212.97 = [lineMult#1(@m2, @l)] 767.69/212.97 767.69/212.97 [transpose#1(nil(), @m)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [nil()] 767.69/212.97 767.69/212.97 [transpose#1(::(@xs, @xss), @m)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [transpose#2(split(@m))] 767.69/212.97 767.69/212.97 [split#3(tuple#2(@ys, @m'), @x, @xs)] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [tuple#2(::(@x, @ys), ::(@xs, @m'))] 767.69/212.97 767.69/212.97 [#pred(#neg(#s(@x)))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#neg(#s(#s(@x)))] 767.69/212.97 767.69/212.97 [#pred(#pos(#s(#0())))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#0()] 767.69/212.97 767.69/212.97 [#pred(#pos(#s(#s(@x))))] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#pos(#s(@x))] 767.69/212.97 767.69/212.97 [#pred(#0())] = [0] 767.69/212.97 >= [0] 767.69/212.97 = [#neg(#s(#0()))] 767.69/212.97 767.69/212.97 [matrixMultList^#(@acc, @mm)] = [4] @acc + [4] @mm + [0] 767.69/212.97 >= [4] @acc + [4] @mm + [0] 767.69/212.97 = [matrixMultList#1^#(@mm, @acc)] 767.69/212.97 767.69/212.97 [matrixMultList#1^#(::(@m, @ms), @acc)] = [4] @acc + [4] @ms + [4] 767.69/212.97 > [4] @acc + [4] @ms + [0] 767.69/212.97 = [matrixMultList^#(matrixMult(@acc, @m), @ms)] 767.69/212.97 767.69/212.97 [matrixMultList#1^#(::(@m, @ms), @acc)] = [4] @acc + [4] @ms + [4] 767.69/212.97 > [4] @acc + [0] 767.69/212.97 = [matrixMult^#(@acc, @m)] 767.69/212.97 767.69/212.97 [matrixMult3^#(@m1, @m2, @m3)] = [7] @m2 + [7] @m1 + [7] @m3 + [7] 767.69/212.97 > [4] @m1 + [0] 767.69/212.97 = [matrixMult^#(@m1, @m2)] 767.69/212.97 767.69/212.97 [matrixMult3^#(@m1, @m2, @m3)] = [7] @m2 + [7] @m1 + [7] @m3 + [7] 767.69/212.97 > [4] @m1 + [0] 767.69/212.97 = [matrixMult^#(matrixMult(@m1, @m2), @m3)] 767.69/212.97 767.69/212.97 [matrixMult^#(@m1, @m2)] = [4] @m1 + [0] 767.69/212.97 >= [4] @m1 + [0] 767.69/212.97 = [c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))))] 767.69/212.97 767.69/212.97 [matrixMult'^#(@m1, @m2)] = [2] @m1 + [0] 767.69/212.97 >= [2] @m1 + [0] 767.69/212.97 = [c_5(matrixMult'#1^#(@m1, @m2))] 767.69/212.97 767.69/212.97 [matrixMult'#1^#(::(@l, @ls), @m2)] = [2] @ls + [2] 767.69/212.97 > [2] @ls + [1] 767.69/212.97 = [c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2))] 767.69/212.98 767.69/212.98 [matrixMultOld^#(@m1, @m2)] = [7] @m2 + [7] @m1 + [7] 767.69/212.98 > [2] @m1 + [0] 767.69/212.98 = [matrixMult'^#(@m1, transpose(@m2))] 767.69/212.98 767.69/212.98 767.69/212.98 We return to the main proof. Consider the set of all dependency 767.69/212.98 pairs 767.69/212.98 767.69/212.98 : 767.69/212.98 { 1: matrixMult^#(@m1, @m2) -> 767.69/212.98 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.69/212.98 , 2: matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.69/212.98 , 3: matrixMult'#1^#(::(@l, @ls), @m2) -> 767.69/212.98 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.69/212.98 , 4: matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.98 , 5: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.98 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.98 , 6: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.98 matrixMult^#(@acc, @m) 767.69/212.98 , 7: matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.98 , 8: matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.98 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.98 , 9: matrixMultOld^#(@m1, @m2) -> 767.69/212.98 matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.98 767.69/212.98 Processor 'matrix interpretation of dimension 1' induces the 767.69/212.98 complexity certificate YES(?,O(n^1)) on application of dependency 767.69/212.98 pairs {3,5,6,7,8,9}. These cover all (indirect) predecessors of 767.69/212.98 dependency pairs {1,2,3,4,5,6,7,8,9}, their number of application 767.69/212.98 is equally bounded. The dependency pairs are shifted into the weak 767.69/212.98 component. 767.69/212.98 767.69/212.98 We are left with following problem, upon which TcT provides the 767.69/212.98 certificate YES(O(1),O(1)). 767.69/212.98 767.69/212.98 Weak DPs: 767.69/212.98 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.98 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.98 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.98 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.98 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.98 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.98 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.98 , matrixMult^#(@m1, @m2) -> 767.69/212.98 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.69/212.98 , matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.69/212.98 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.69/212.98 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.69/212.98 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.98 Weak Trs: 767.69/212.98 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.98 , split(@m) -> split#1(@m) 767.69/212.98 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.98 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.98 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.98 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.98 , #add(#0(), @y) -> @y 767.69/212.98 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.98 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.98 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.98 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.98 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.98 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.98 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.98 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.98 , +(@x, @y) -> #add(@x, @y) 767.69/212.98 , transAcc#1(nil(), @base) -> @base 767.69/212.98 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.98 attach(@l, transAcc(@m', @base)) 767.69/212.98 , *(@x, @y) -> #mult(@x, @y) 767.69/212.98 , mkBase#1(nil()) -> nil() 767.69/212.98 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.98 , transpose#3(nil(), @l) -> nil() 767.69/212.98 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.98 , attach#1(nil(), @m) -> nil() 767.69/212.98 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.98 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.98 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.98 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.98 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.98 , #natmult(#0(), @y) -> #0() 767.69/212.98 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.98 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.98 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.98 , mkBase(@m) -> mkBase#1(@m) 767.69/212.98 , makeBase(@m) -> makeBase#1(@m) 767.69/212.98 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.98 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.98 , lineMult#1(nil(), @l) -> nil() 767.69/212.98 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.98 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.98 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.98 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.98 , #mult(#neg(@x), #0()) -> #0() 767.69/212.98 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.98 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.98 , #mult(#pos(@x), #0()) -> #0() 767.69/212.98 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.98 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.98 , #mult(#0(), #0()) -> #0() 767.69/212.98 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.98 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.98 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.98 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.98 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.98 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.98 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.98 , makeBase#1(nil()) -> nil() 767.69/212.98 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.98 , matrixMult(@m1, @m2) -> 767.69/212.98 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.98 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.98 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.98 , #abs(#0()) -> #0() 767.69/212.98 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.98 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.98 , transpose#1(nil(), @m) -> nil() 767.69/212.98 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.98 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.98 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.98 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.98 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.98 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.98 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.98 Obligation: 767.69/212.98 innermost runtime complexity 767.69/212.98 Answer: 767.69/212.98 YES(O(1),O(1)) 767.69/212.98 767.69/212.98 The following weak DPs constitute a sub-graph of the DG that is 767.69/212.98 closed under successors. The DPs are removed. 767.69/212.98 767.69/212.98 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.98 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.98 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.98 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.98 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.98 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.98 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.98 , matrixMult^#(@m1, @m2) -> 767.69/212.98 c_2(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 767.69/212.98 , matrixMult'^#(@m1, @m2) -> c_5(matrixMult'#1^#(@m1, @m2)) 767.69/212.98 , matrixMult'#1^#(::(@l, @ls), @m2) -> 767.69/212.98 c_6(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 767.69/212.98 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.98 767.69/212.98 We are left with following problem, upon which TcT provides the 767.69/212.98 certificate YES(O(1),O(1)). 767.69/212.98 767.69/212.98 Weak Trs: 767.69/212.98 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.98 , split(@m) -> split#1(@m) 767.69/212.98 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.98 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.98 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.98 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.98 , #add(#0(), @y) -> @y 767.69/212.98 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.98 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.98 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.98 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.98 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.98 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.98 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.98 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.98 , +(@x, @y) -> #add(@x, @y) 767.69/212.98 , transAcc#1(nil(), @base) -> @base 767.69/212.98 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.98 attach(@l, transAcc(@m', @base)) 767.69/212.98 , *(@x, @y) -> #mult(@x, @y) 767.69/212.98 , mkBase#1(nil()) -> nil() 767.69/212.98 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.98 , transpose#3(nil(), @l) -> nil() 767.69/212.98 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.98 , attach#1(nil(), @m) -> nil() 767.69/212.98 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.98 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.98 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.98 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.98 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.98 , #natmult(#0(), @y) -> #0() 767.69/212.98 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.98 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.98 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.98 , mkBase(@m) -> mkBase#1(@m) 767.69/212.98 , makeBase(@m) -> makeBase#1(@m) 767.69/212.98 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.98 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.98 , lineMult#1(nil(), @l) -> nil() 767.69/212.98 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.98 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.98 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.98 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.98 , #mult(#neg(@x), #0()) -> #0() 767.69/212.98 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.98 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.98 , #mult(#pos(@x), #0()) -> #0() 767.69/212.98 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.98 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.98 , #mult(#0(), #0()) -> #0() 767.69/212.98 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.98 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.98 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.98 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.98 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.98 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.98 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.98 , makeBase#1(nil()) -> nil() 767.69/212.98 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.98 , matrixMult(@m1, @m2) -> 767.69/212.98 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.98 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.98 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.98 , #abs(#0()) -> #0() 767.69/212.98 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.98 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.98 , transpose#1(nil(), @m) -> nil() 767.69/212.98 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.98 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.98 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.98 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.98 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.98 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.98 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.98 Obligation: 767.69/212.98 innermost runtime complexity 767.69/212.98 Answer: 767.69/212.98 YES(O(1),O(1)) 767.69/212.98 767.69/212.98 No rule is usable, rules are removed from the input problem. 767.69/212.98 767.69/212.98 We are left with following problem, upon which TcT provides the 767.69/212.98 certificate YES(O(1),O(1)). 767.69/212.98 767.69/212.98 Rules: Empty 767.69/212.98 Obligation: 767.69/212.98 innermost runtime complexity 767.69/212.98 Answer: 767.69/212.98 YES(O(1),O(1)) 767.69/212.98 767.69/212.98 Empty rules are trivially bounded 767.69/212.98 767.69/212.98 We return to the main proof. 767.69/212.98 767.69/212.98 We are left with following problem, upon which TcT provides the 767.69/212.98 certificate YES(O(1),O(n^1)). 767.69/212.98 767.69/212.98 Strict DPs: 767.69/212.98 { mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.69/212.98 , mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 767.69/212.98 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 767.69/212.98 , lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 767.69/212.98 , lineMult#1^#(::(@x, @xs), @l) -> 767.69/212.98 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.69/212.98 Weak DPs: 767.69/212.98 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.98 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.98 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.98 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.98 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.98 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.98 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.98 , matrixMult^#(@m1, @m2) -> 767.69/212.98 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.98 , matrixMult'^#(@m1, @m2) -> matrixMult'#1^#(@m1, @m2) 767.69/212.98 , matrixMult'#1^#(::(@l, @ls), @m2) -> matrixMult'^#(@ls, @m2) 767.69/212.98 , matrixMult'#1^#(::(@l, @ls), @m2) -> lineMult^#(@l, @m2) 767.69/212.98 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.98 Weak Trs: 767.69/212.98 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.98 , split(@m) -> split#1(@m) 767.69/212.98 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.98 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.98 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.98 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.98 , #add(#0(), @y) -> @y 767.69/212.98 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.98 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.98 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.98 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.98 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.98 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.98 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.98 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.98 , +(@x, @y) -> #add(@x, @y) 767.69/212.98 , transAcc#1(nil(), @base) -> @base 767.69/212.98 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.98 attach(@l, transAcc(@m', @base)) 767.69/212.98 , *(@x, @y) -> #mult(@x, @y) 767.69/212.98 , mkBase#1(nil()) -> nil() 767.69/212.98 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.98 , transpose#3(nil(), @l) -> nil() 767.69/212.98 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.98 , attach#1(nil(), @m) -> nil() 767.69/212.98 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.98 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.98 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.98 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.98 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.98 , #natmult(#0(), @y) -> #0() 767.69/212.98 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.98 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.98 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.98 , mkBase(@m) -> mkBase#1(@m) 767.69/212.98 , makeBase(@m) -> makeBase#1(@m) 767.69/212.98 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.98 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.98 , lineMult#1(nil(), @l) -> nil() 767.69/212.98 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.98 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.98 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.98 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.98 , #mult(#neg(@x), #0()) -> #0() 767.69/212.98 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.98 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.98 , #mult(#pos(@x), #0()) -> #0() 767.69/212.98 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.98 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.98 , #mult(#0(), #0()) -> #0() 767.69/212.98 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.98 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.98 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.98 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.98 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.98 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.98 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.98 , makeBase#1(nil()) -> nil() 767.69/212.98 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.98 , matrixMult(@m1, @m2) -> 767.69/212.98 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.98 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.98 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.98 , #abs(#0()) -> #0() 767.69/212.98 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.98 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.98 , transpose#1(nil(), @m) -> nil() 767.69/212.98 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.98 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.98 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.98 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.98 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.98 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.98 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.98 Obligation: 767.69/212.98 innermost runtime complexity 767.69/212.98 Answer: 767.69/212.98 YES(O(1),O(n^1)) 767.69/212.98 767.69/212.98 We use the processor 'matrix interpretation of dimension 2' to 767.69/212.98 orient following rules strictly. 767.69/212.98 767.69/212.98 DPs: 767.69/212.98 { 1: mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.69/212.98 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.98 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.98 , 8: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.98 matrixMult^#(@acc, @m) 767.69/212.98 , 9: matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.98 , 10: matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.98 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.98 , 11: matrixMult^#(@m1, @m2) -> 767.69/212.98 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.98 , 15: matrixMultOld^#(@m1, @m2) -> 767.69/212.98 matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.98 Trs: 767.69/212.98 { mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.98 , transpose#3(nil(), @l) -> nil() 767.69/212.98 , attach#1(nil(), @m) -> nil() 767.69/212.98 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.98 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.98 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.98 , makeBase#1(::(@l, @m')) -> mkBase(@l) } 767.69/212.98 767.69/212.98 Sub-proof: 767.69/212.98 ---------- 767.69/212.98 The following argument positions are usable: 767.69/212.98 Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_7) = {1}, 767.69/212.98 Uargs(c_8) = {1}, Uargs(c_9) = {1, 2} 767.69/212.98 767.69/212.98 TcT has computed the following constructor-based matrix 767.69/212.98 interpretation satisfying not(EDA) and not(IDA(1)). 767.69/212.98 767.69/212.98 [attach](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 767.69/212.98 [0 0] [0 0] [4] 767.69/212.98 767.69/212.98 [split](x1) = [1 0] x1 + [0] 767.69/212.98 [1 1] [0] 767.69/212.98 767.69/212.98 [#add](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [mult#2](x1, x2, x3) = [6 0] x2 + [6 0] x3 + [0] 767.69/212.98 [6 6] [6 6] [0] 767.69/212.98 767.69/212.98 [nil] = [0] 767.69/212.98 [1] 767.69/212.98 767.69/212.98 [split#1](x1) = [1 0] x1 + [0] 767.69/212.98 [1 1] [0] 767.69/212.98 767.69/212.98 [transpose](x1) = [5 4] x1 + [0] 767.69/212.98 [0 0] [4] 767.69/212.98 767.69/212.98 [matrixMult'](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [transAcc](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 767.69/212.98 [4 0] [0 4] [4] 767.69/212.98 767.69/212.98 [mult](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [+](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [transAcc#1](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 767.69/212.98 [0 0] [0 4] [4] 767.69/212.98 767.69/212.98 [#neg](x1) = [1 0] x1 + [0] 767.69/212.98 [1 0] [0] 767.69/212.98 767.69/212.98 [*](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [mkBase#1](x1) = [2 0] x1 + [0] 767.69/212.98 [0 0] [1] 767.69/212.98 767.69/212.98 [transpose#3](x1, x2) = [5 0] x1 + [1 0] x2 + [1] 767.69/212.98 [0 0] [0 0] [1] 767.69/212.98 767.69/212.98 [attach#1](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 767.69/212.98 [0 0] [0 0] [4] 767.69/212.98 767.69/212.98 [transpose#2](x1) = [1 4] x1 + [0] 767.69/212.98 [0 0] [1] 767.69/212.98 767.69/212.98 [matrixMult'#1](x1, x2) = [6 0] x2 + [0] 767.69/212.98 [6 6] [0] 767.69/212.98 767.69/212.98 [#natmult](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [split#2](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 767.69/212.98 [1 0] [1 0] [1] 767.69/212.98 767.69/212.98 [#pos](x1) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [tuple#2](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 767.69/212.98 [0 0] [1 0] [1] 767.69/212.98 767.69/212.98 [mkBase](x1) = [2 0] x1 + [0] 767.69/212.98 [0 0] [1] 767.69/212.98 767.69/212.98 [makeBase](x1) = [2 0] x1 + [0] 767.69/212.98 [4 4] [4] 767.69/212.98 767.69/212.98 [mult#1](x1, x2) = [6 0] x2 + [0] 767.69/212.98 [4 4] [0] 767.69/212.98 767.69/212.98 [::](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 767.69/212.98 [0 0] [0 0] [0] 767.69/212.98 767.69/212.98 [lineMult#1](x1, x2) = [6 0] x2 + [0] 767.69/212.98 [6 6] [0] 767.69/212.98 767.69/212.98 [#mult](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [attach#2](x1, x2, x3) = [1 0] x1 + [1 0] x2 + [1 0] x3 + [2] 767.69/212.98 [0 0] [0 0] [0 0] [1] 767.69/212.98 767.69/212.98 [#succ](x1) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [#0] = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [makeBase#1](x1) = [2 0] x1 + [0] 767.69/212.98 [4 4] [0] 767.69/212.98 767.69/212.98 [matrixMult](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [#abs](x1) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [lineMult](x1, x2) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [transpose#1](x1, x2) = [5 4] x2 + [0] 767.69/212.98 [0 0] [4] 767.69/212.98 767.69/212.98 [split#3](x1, x2, x3) = [1 0] x1 + [1 0] x2 + [1 0] x3 + [2] 767.69/212.98 [1 0] [1 0] [1 0] [2] 767.69/212.98 767.69/212.98 [#pred](x1) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [#s](x1) = [0] 767.69/212.98 [0] 767.69/212.98 767.69/212.98 [matrixMultList^#](x1, x2) = [4 0] x2 + [4] 767.69/212.98 [2 0] [4] 767.69/212.99 767.69/212.99 [matrixMultList#1^#](x1, x2) = [4 0] x1 + [4] 767.69/212.99 [2 0] [2] 767.69/212.99 767.69/212.99 [matrixMult3^#](x1, x2, x3) = [7 7] x1 + [7 7] x2 + [7 7] x3 + [7] 767.69/212.99 [7 7] [7 7] [7 7] [7] 767.69/212.99 767.69/212.99 [matrixMult^#](x1, x2) = [3 0] x2 + [4] 767.69/212.99 [2 0] [4] 767.69/212.99 767.69/212.99 [mult#2^#](x1, x2, x3) = [1 0] x1 + [0 0] x3 + [0] 767.69/212.99 [0 0] [4 0] [0] 767.69/212.99 767.69/212.99 [mult^#](x1, x2) = [0 0] x1 + [1 0] x2 + [0] 767.69/212.99 [4 0] [0 0] [0] 767.69/212.99 767.69/212.99 [matrixMult'^#](x1, x2) = [1 0] x2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [matrixMult'#1^#](x1, x2) = [1 0] x2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [mult#1^#](x1, x2) = [0 0] x1 + [1 0] x2 + [0] 767.69/212.99 [1 0] [0 0] [3] 767.69/212.99 767.69/212.99 [lineMult^#](x1, x2) = [1 0] x2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [matrixMultOld^#](x1, x2) = [7 7] x1 + [7 7] x2 + [7] 767.69/212.99 [7 7] [7 7] [7] 767.69/212.99 767.69/212.99 [lineMult#1^#](x1, x2) = [1 0] x1 + [0 0] x2 + [0] 767.69/212.99 [2 0] [4 0] [6] 767.69/212.99 767.69/212.99 [c_3](x1) = [1 0] x1 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [c_4](x1) = [1 0] x1 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [c_7](x1) = [1 0] x1 + [0] 767.69/212.99 [0 0] [3] 767.69/212.99 767.69/212.99 [c_8](x1) = [1 0] x1 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [c_9](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 767.69/212.99 [0 0] [0 0] [3] 767.69/212.99 767.69/212.99 The order satisfies the following ordering constraints: 767.69/212.99 767.69/212.99 [attach(@line, @m)] = [1 0] @line + [1 0] @m + [1] 767.69/212.99 [0 0] [0 0] [4] 767.69/212.99 >= [1 0] @line + [1 0] @m + [1] 767.69/212.99 [0 0] [0 0] [4] 767.69/212.99 = [attach#1(@line, @m)] 767.69/212.99 767.69/212.99 [split(@m)] = [1 0] @m + [0] 767.69/212.99 [1 1] [0] 767.69/212.99 >= [1 0] @m + [0] 767.69/212.99 [1 1] [0] 767.69/212.99 = [split#1(@m)] 767.69/212.99 767.69/212.99 [#add(#neg(#s(#0())), @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pred(@y)] 767.69/212.99 767.69/212.99 [#add(#neg(#s(#s(@x))), @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pred(#add(#pos(#s(@x)), @y))] 767.69/212.99 767.69/212.99 [#add(#pos(#s(#0())), @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#succ(@y)] 767.69/212.99 767.69/212.99 [#add(#pos(#s(#s(@x))), @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#succ(#add(#pos(#s(@x)), @y))] 767.69/212.99 767.69/212.99 [#add(#0(), @y)] = [0] 767.69/212.99 [0] 767.69/212.99 ? [1 0] @y + [0] 767.69/212.99 [0 1] [0] 767.69/212.99 = [@y] 767.69/212.99 767.69/212.99 [mult#2(nil(), @x, @xs)] = [6 0] @x + [6 0] @xs + [0] 767.69/212.99 [6 6] [6 6] [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#abs(#0())] 767.69/212.99 767.69/212.99 [mult#2(::(@y, @ys), @x, @xs)] = [6 0] @x + [6 0] @xs + [0] 767.69/212.99 [6 6] [6 6] [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [+(*(@x, @y), mult(@xs, @ys))] 767.69/212.99 767.69/212.99 [split#1(nil())] = [0] 767.69/212.99 [1] 767.69/212.99 >= [0] 767.69/212.99 [1] 767.69/212.99 = [tuple#2(nil(), nil())] 767.69/212.99 767.69/212.99 [split#1(::(@l, @ls))] = [1 0] @l + [1 0] @ls + [1] 767.69/212.99 [1 0] [1 0] [1] 767.69/212.99 >= [1 0] @l + [1 0] @ls + [1] 767.69/212.99 [1 0] [1 0] [1] 767.69/212.99 = [split#2(@l, @ls)] 767.69/212.99 767.69/212.99 [transpose(@m)] = [5 4] @m + [0] 767.69/212.99 [0 0] [4] 767.69/212.99 >= [5 4] @m + [0] 767.69/212.99 [0 0] [4] 767.69/212.99 = [transpose#1(@m, @m)] 767.69/212.99 767.69/212.99 [matrixMult'(@m1, @m2)] = [0] 767.69/212.99 [0] 767.69/212.99 ? [6 0] @m2 + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 = [matrixMult'#1(@m1, @m2)] 767.69/212.99 767.69/212.99 [transAcc(@m, @base)] = [1 0] @m + [1 0] @base + [0] 767.69/212.99 [4 0] [0 4] [4] 767.69/212.99 >= [1 0] @m + [1 0] @base + [0] 767.69/212.99 [0 0] [0 4] [4] 767.69/212.99 = [transAcc#1(@m, @base)] 767.69/212.99 767.69/212.99 [mult(@l1, @l2)] = [0] 767.69/212.99 [0] 767.69/212.99 ? [6 0] @l2 + [0] 767.69/212.99 [4 4] [0] 767.69/212.99 = [mult#1(@l1, @l2)] 767.69/212.99 767.69/212.99 [+(@x, @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#add(@x, @y)] 767.69/212.99 767.69/212.99 [transAcc#1(nil(), @base)] = [1 0] @base + [0] 767.69/212.99 [0 4] [4] 767.69/212.99 >= [1 0] @base + [0] 767.69/212.99 [0 1] [0] 767.69/212.99 = [@base] 767.69/212.99 767.69/212.99 [transAcc#1(::(@l, @m'), @base)] = [1 0] @l + [1 0] @m' + [1 0] @base + [1] 767.69/212.99 [0 0] [0 0] [0 4] [4] 767.69/212.99 >= [1 0] @l + [1 0] @m' + [1 0] @base + [1] 767.69/212.99 [0 0] [0 0] [0 0] [4] 767.69/212.99 = [attach(@l, transAcc(@m', @base))] 767.69/212.99 767.69/212.99 [*(@x, @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#mult(@x, @y)] 767.69/212.99 767.69/212.99 [mkBase#1(nil())] = [0] 767.69/212.99 [1] 767.69/212.99 >= [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [mkBase#1(::(@l, @m'))] = [2 0] @l + [2 0] @m' + [2] 767.69/212.99 [0 0] [0 0] [1] 767.69/212.99 > [2 0] @m' + [1] 767.69/212.99 [0 0] [0] 767.69/212.99 = [::(nil(), mkBase(@m'))] 767.69/212.99 767.69/212.99 [transpose#3(nil(), @l)] = [1 0] @l + [1] 767.69/212.99 [0 0] [1] 767.69/212.99 > [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [transpose#3(::(@y, @ys), @l)] = [5 0] @y + [1 0] @l + [5 0] @ys + [6] 767.69/212.99 [0 0] [0 0] [0 0] [1] 767.69/212.99 >= [5 0] @y + [1 0] @l + [5 0] @ys + [6] 767.69/212.99 [0 0] [0 0] [0 0] [0] 767.69/212.99 = [::(@l, transpose(::(@y, @ys)))] 767.69/212.99 767.69/212.99 [attach#1(nil(), @m)] = [1 0] @m + [1] 767.69/212.99 [0 0] [4] 767.69/212.99 > [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [attach#1(::(@x, @xs), @m)] = [1 0] @x + [1 0] @m + [1 0] @xs + [2] 767.69/212.99 [0 0] [0 0] [0 0] [4] 767.69/212.99 >= [1 0] @x + [1 0] @m + [1 0] @xs + [2] 767.69/212.99 [0 0] [0 0] [0 0] [1] 767.69/212.99 = [attach#2(@m, @x, @xs)] 767.69/212.99 767.69/212.99 [transpose#2(tuple#2(@l, @m'))] = [1 0] @l + [5 0] @m' + [4] 767.69/212.99 [0 0] [0 0] [1] 767.69/212.99 > [1 0] @l + [5 0] @m' + [1] 767.69/212.99 [0 0] [0 0] [1] 767.69/212.99 = [transpose#3(@m', @l)] 767.69/212.99 767.69/212.99 [matrixMult'#1(nil(), @m2)] = [6 0] @m2 + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 ? [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [matrixMult'#1(::(@l, @ls), @m2)] = [6 0] @m2 + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 ? [1] 767.69/212.99 [0] 767.69/212.99 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 767.69/212.99 767.69/212.99 [#natmult(#0(), @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#natmult(#s(@x), @y)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#add(#pos(@y), #natmult(@x, @y))] 767.69/212.99 767.69/212.99 [split#2(nil(), @ls)] = [1 0] @ls + [1] 767.69/212.99 [1 0] [1] 767.69/212.99 > [0] 767.69/212.99 [1] 767.69/212.99 = [tuple#2(nil(), nil())] 767.69/212.99 767.69/212.99 [split#2(::(@x, @xs), @ls)] = [1 0] @x + [1 0] @xs + [1 0] @ls + [2] 767.69/212.99 [1 0] [1 0] [1 0] [2] 767.69/212.99 >= [1 0] @x + [1 0] @xs + [1 0] @ls + [2] 767.69/212.99 [1 0] [1 0] [1 0] [2] 767.69/212.99 = [split#3(split(@ls), @x, @xs)] 767.69/212.99 767.69/212.99 [mkBase(@m)] = [2 0] @m + [0] 767.69/212.99 [0 0] [1] 767.69/212.99 >= [2 0] @m + [0] 767.69/212.99 [0 0] [1] 767.69/212.99 = [mkBase#1(@m)] 767.69/212.99 767.69/212.99 [makeBase(@m)] = [2 0] @m + [0] 767.69/212.99 [4 4] [4] 767.69/212.99 >= [2 0] @m + [0] 767.69/212.99 [4 4] [0] 767.69/212.99 = [makeBase#1(@m)] 767.69/212.99 767.69/212.99 [mult#1(nil(), @l2)] = [6 0] @l2 + [0] 767.69/212.99 [4 4] [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#abs(#0())] 767.69/212.99 767.69/212.99 [mult#1(::(@x, @xs), @l2)] = [6 0] @l2 + [0] 767.69/212.99 [4 4] [0] 767.69/212.99 ? [6 0] @x + [6 0] @xs + [0] 767.69/212.99 [6 6] [6 6] [0] 767.69/212.99 = [mult#2(@l2, @x, @xs)] 767.69/212.99 767.69/212.99 [lineMult#1(nil(), @l)] = [6 0] @l + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 ? [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [lineMult#1(::(@x, @xs), @l)] = [6 0] @l + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 ? [1] 767.69/212.99 [0] 767.69/212.99 = [::(mult(@l, @x), lineMult(@l, @xs))] 767.69/212.99 767.69/212.99 [#mult(#neg(@x), #neg(@y))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(#natmult(@x, @y))] 767.69/212.99 767.69/212.99 [#mult(#neg(@x), #pos(@y))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#neg(#natmult(@x, @y))] 767.69/212.99 767.69/212.99 [#mult(#neg(@x), #0())] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#mult(#pos(@x), #neg(@y))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#neg(#natmult(@x, @y))] 767.69/212.99 767.69/212.99 [#mult(#pos(@x), #pos(@y))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(#natmult(@x, @y))] 767.69/212.99 767.69/212.99 [#mult(#pos(@x), #0())] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#mult(#0(), #neg(@y))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#mult(#0(), #pos(@y))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#mult(#0(), #0())] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [attach#2(nil(), @x, @xs)] = [1 0] @x + [1 0] @xs + [2] 767.69/212.99 [0 0] [0 0] [1] 767.69/212.99 > [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [attach#2(::(@l, @ls), @x, @xs)] = [1 0] @x + [1 0] @xs + [1 0] @l + [1 0] @ls + [3] 767.69/212.99 [0 0] [0 0] [0 0] [0 0] [1] 767.69/212.99 >= [1 0] @x + [1 0] @xs + [1 0] @l + [1 0] @ls + [3] 767.69/212.99 [0 0] [0 0] [0 0] [0 0] [0] 767.69/212.99 = [::(::(@x, @l), attach(@xs, @ls))] 767.69/212.99 767.69/212.99 [#succ(#neg(#s(#0())))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#succ(#neg(#s(#s(@x))))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#neg(#s(@x))] 767.69/212.99 767.69/212.99 [#succ(#pos(#s(@x)))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(#s(#s(@x)))] 767.69/212.99 767.69/212.99 [#succ(#0())] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(#s(#0()))] 767.69/212.99 767.69/212.99 [makeBase#1(nil())] = [0] 767.69/212.99 [4] 767.69/212.99 >= [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [makeBase#1(::(@l, @m'))] = [2 0] @l + [2 0] @m' + [2] 767.69/212.99 [4 0] [4 0] [4] 767.69/212.99 > [2 0] @l + [0] 767.69/212.99 [0 0] [1] 767.69/212.99 = [mkBase(@l)] 767.69/212.99 767.69/212.99 [matrixMult(@m1, @m2)] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 767.69/212.99 767.69/212.99 [#abs(#neg(@x))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(@x)] 767.69/212.99 767.69/212.99 [#abs(#pos(@x))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(@x)] 767.69/212.99 767.69/212.99 [#abs(#0())] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#abs(#s(@x))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(#s(@x))] 767.69/212.99 767.69/212.99 [lineMult(@l, @m2)] = [0] 767.69/212.99 [0] 767.69/212.99 ? [6 0] @l + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 = [lineMult#1(@m2, @l)] 767.69/212.99 767.69/212.99 [transpose#1(nil(), @m)] = [5 4] @m + [0] 767.69/212.99 [0 0] [4] 767.69/212.99 >= [0] 767.69/212.99 [1] 767.69/212.99 = [nil()] 767.69/212.99 767.69/212.99 [transpose#1(::(@xs, @xss), @m)] = [5 4] @m + [0] 767.69/212.99 [0 0] [4] 767.69/212.99 >= [5 4] @m + [0] 767.69/212.99 [0 0] [1] 767.69/212.99 = [transpose#2(split(@m))] 767.69/212.99 767.69/212.99 [split#3(tuple#2(@ys, @m'), @x, @xs)] = [1 0] @x + [1 0] @xs + [1 0] @m' + [1 0] @ys + [2] 767.69/212.99 [1 0] [1 0] [1 0] [1 0] [2] 767.69/212.99 >= [1 0] @x + [1 0] @xs + [1 0] @m' + [1 0] @ys + [2] 767.69/212.99 [0 0] [1 0] [1 0] [0 0] [2] 767.69/212.99 = [tuple#2(::(@x, @ys), ::(@xs, @m'))] 767.69/212.99 767.69/212.99 [#pred(#neg(#s(@x)))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#neg(#s(#s(@x)))] 767.69/212.99 767.69/212.99 [#pred(#pos(#s(#0())))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#0()] 767.69/212.99 767.69/212.99 [#pred(#pos(#s(#s(@x))))] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#pos(#s(@x))] 767.69/212.99 767.69/212.99 [#pred(#0())] = [0] 767.69/212.99 [0] 767.69/212.99 >= [0] 767.69/212.99 [0] 767.69/212.99 = [#neg(#s(#0()))] 767.69/212.99 767.69/212.99 [matrixMultList^#(@acc, @mm)] = [4 0] @mm + [4] 767.69/212.99 [2 0] [4] 767.69/212.99 >= [4 0] @mm + [4] 767.69/212.99 [2 0] [2] 767.69/212.99 = [matrixMultList#1^#(@mm, @acc)] 767.69/212.99 767.69/212.99 [matrixMultList#1^#(::(@m, @ms), @acc)] = [4 0] @m + [4 0] @ms + [8] 767.69/212.99 [2 0] [2 0] [4] 767.69/212.99 > [4 0] @ms + [4] 767.69/212.99 [2 0] [4] 767.69/212.99 = [matrixMultList^#(matrixMult(@acc, @m), @ms)] 767.69/212.99 767.69/212.99 [matrixMultList#1^#(::(@m, @ms), @acc)] = [4 0] @m + [4 0] @ms + [8] 767.69/212.99 [2 0] [2 0] [4] 767.69/212.99 > [3 0] @m + [4] 767.69/212.99 [2 0] [4] 767.69/212.99 = [matrixMult^#(@acc, @m)] 767.69/212.99 767.69/212.99 [matrixMult3^#(@m1, @m2, @m3)] = [7 7] @m2 + [7 7] @m1 + [7 7] @m3 + [7] 767.69/212.99 [7 7] [7 7] [7 7] [7] 767.69/212.99 > [3 0] @m2 + [4] 767.69/212.99 [2 0] [4] 767.69/212.99 = [matrixMult^#(@m1, @m2)] 767.69/212.99 767.69/212.99 [matrixMult3^#(@m1, @m2, @m3)] = [7 7] @m2 + [7 7] @m1 + [7 7] @m3 + [7] 767.69/212.99 [7 7] [7 7] [7 7] [7] 767.69/212.99 > [3 0] @m3 + [4] 767.69/212.99 [2 0] [4] 767.69/212.99 = [matrixMult^#(matrixMult(@m1, @m2), @m3)] 767.69/212.99 767.69/212.99 [matrixMult^#(@m1, @m2)] = [3 0] @m2 + [4] 767.69/212.99 [2 0] [4] 767.69/212.99 > [3 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))] 767.69/212.99 767.69/212.99 [mult#2^#(::(@y, @ys), @x, @xs)] = [1 0] @y + [0 0] @xs + [1 0] @ys + [1] 767.69/212.99 [0 0] [4 0] [0 0] [0] 767.69/212.99 > [1 0] @ys + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [c_3(mult^#(@xs, @ys))] 767.69/212.99 767.69/212.99 [mult^#(@l1, @l2)] = [0 0] @l1 + [1 0] @l2 + [0] 767.69/212.99 [4 0] [0 0] [0] 767.69/212.99 >= [1 0] @l2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [c_4(mult#1^#(@l1, @l2))] 767.69/212.99 767.69/212.99 [matrixMult'^#(@m1, @m2)] = [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 >= [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [matrixMult'#1^#(@m1, @m2)] 767.69/212.99 767.69/212.99 [matrixMult'#1^#(::(@l, @ls), @m2)] = [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 >= [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [matrixMult'^#(@ls, @m2)] 767.69/212.99 767.69/212.99 [matrixMult'#1^#(::(@l, @ls), @m2)] = [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 >= [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [lineMult^#(@l, @m2)] 767.69/212.99 767.69/212.99 [mult#1^#(::(@x, @xs), @l2)] = [0 0] @x + [0 0] @xs + [1 0] @l2 + [0] 767.69/212.99 [1 0] [1 0] [0 0] [4] 767.69/212.99 >= [1 0] @l2 + [0] 767.69/212.99 [0 0] [3] 767.69/212.99 = [c_7(mult#2^#(@l2, @x, @xs))] 767.69/212.99 767.69/212.99 [lineMult^#(@l, @m2)] = [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 >= [1 0] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [c_8(lineMult#1^#(@m2, @l))] 767.69/212.99 767.69/212.99 [matrixMultOld^#(@m1, @m2)] = [7 7] @m2 + [7 7] @m1 + [7] 767.69/212.99 [7 7] [7 7] [7] 767.69/212.99 > [5 4] @m2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 = [matrixMult'^#(@m1, transpose(@m2))] 767.69/212.99 767.69/212.99 [lineMult#1^#(::(@x, @xs), @l)] = [1 0] @x + [1 0] @xs + [0 0] @l + [1] 767.69/212.99 [2 0] [2 0] [4 0] [8] 767.69/212.99 >= [1 0] @x + [1 0] @xs + [1] 767.69/212.99 [0 0] [0 0] [3] 767.69/212.99 = [c_9(mult^#(@l, @x), lineMult^#(@l, @xs))] 767.69/212.99 767.69/212.99 767.69/212.99 We return to the main proof. Consider the set of all dependency 767.69/212.99 pairs 767.69/212.99 767.69/212.99 : 767.69/212.99 { 1: mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.69/212.99 , 2: mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 767.69/212.99 , 3: mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 767.69/212.99 , 4: lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 767.69/212.99 , 5: lineMult#1^#(::(@x, @xs), @l) -> 767.69/212.99 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) 767.69/212.99 , 6: matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.99 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.99 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.99 , 8: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.99 matrixMult^#(@acc, @m) 767.69/212.99 , 9: matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.99 , 10: matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.99 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.99 , 11: matrixMult^#(@m1, @m2) -> 767.69/212.99 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.99 , 12: matrixMult'^#(@m1, @m2) -> matrixMult'#1^#(@m1, @m2) 767.69/212.99 , 13: matrixMult'#1^#(::(@l, @ls), @m2) -> matrixMult'^#(@ls, @m2) 767.69/212.99 , 14: matrixMult'#1^#(::(@l, @ls), @m2) -> lineMult^#(@l, @m2) 767.69/212.99 , 15: matrixMultOld^#(@m1, @m2) -> 767.69/212.99 matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.99 767.69/212.99 Processor 'matrix interpretation of dimension 2' induces the 767.69/212.99 complexity certificate YES(?,O(n^1)) on application of dependency 767.69/212.99 pairs {1,7,8,9,10,11,15}. These cover all (indirect) predecessors 767.69/212.99 of dependency pairs {1,6,7,8,9,10,11,15}, their number of 767.69/212.99 application is equally bounded. The dependency pairs are shifted 767.69/212.99 into the weak component. 767.69/212.99 767.69/212.99 We are left with following problem, upon which TcT provides the 767.69/212.99 certificate YES(O(1),O(n^1)). 767.69/212.99 767.69/212.99 Strict DPs: 767.69/212.99 { mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 767.69/212.99 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 767.69/212.99 , lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 767.69/212.99 , lineMult#1^#(::(@x, @xs), @l) -> 767.69/212.99 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 767.69/212.99 Weak DPs: 767.69/212.99 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 767.69/212.99 , matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.99 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.99 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 767.69/212.99 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.99 , matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.99 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.99 , matrixMult^#(@m1, @m2) -> 767.69/212.99 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.99 , mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.69/212.99 , matrixMult'^#(@m1, @m2) -> matrixMult'#1^#(@m1, @m2) 767.69/212.99 , matrixMult'#1^#(::(@l, @ls), @m2) -> matrixMult'^#(@ls, @m2) 767.69/212.99 , matrixMult'#1^#(::(@l, @ls), @m2) -> lineMult^#(@l, @m2) 767.69/212.99 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.99 Weak Trs: 767.69/212.99 { attach(@line, @m) -> attach#1(@line, @m) 767.69/212.99 , split(@m) -> split#1(@m) 767.69/212.99 , #add(#neg(#s(#0())), @y) -> #pred(@y) 767.69/212.99 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 767.69/212.99 , #add(#pos(#s(#0())), @y) -> #succ(@y) 767.69/212.99 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 767.69/212.99 , #add(#0(), @y) -> @y 767.69/212.99 , mult#2(nil(), @x, @xs) -> #abs(#0()) 767.69/212.99 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 767.69/212.99 , split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.99 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 767.69/212.99 , transpose(@m) -> transpose#1(@m, @m) 767.69/212.99 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 767.69/212.99 , transAcc(@m, @base) -> transAcc#1(@m, @base) 767.69/212.99 , mult(@l1, @l2) -> mult#1(@l1, @l2) 767.69/212.99 , +(@x, @y) -> #add(@x, @y) 767.69/212.99 , transAcc#1(nil(), @base) -> @base 767.69/212.99 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.99 attach(@l, transAcc(@m', @base)) 767.69/212.99 , *(@x, @y) -> #mult(@x, @y) 767.69/212.99 , mkBase#1(nil()) -> nil() 767.69/212.99 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.99 , transpose#3(nil(), @l) -> nil() 767.69/212.99 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 767.69/212.99 , attach#1(nil(), @m) -> nil() 767.69/212.99 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.99 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 767.69/212.99 , matrixMult'#1(nil(), @m2) -> nil() 767.69/212.99 , matrixMult'#1(::(@l, @ls), @m2) -> 767.69/212.99 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 767.69/212.99 , #natmult(#0(), @y) -> #0() 767.69/212.99 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 767.69/212.99 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 767.69/212.99 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 767.69/212.99 , mkBase(@m) -> mkBase#1(@m) 767.69/212.99 , makeBase(@m) -> makeBase#1(@m) 767.69/212.99 , mult#1(nil(), @l2) -> #abs(#0()) 767.69/212.99 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 767.69/212.99 , lineMult#1(nil(), @l) -> nil() 767.69/212.99 , lineMult#1(::(@x, @xs), @l) -> 767.69/212.99 ::(mult(@l, @x), lineMult(@l, @xs)) 767.69/212.99 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.99 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.99 , #mult(#neg(@x), #0()) -> #0() 767.69/212.99 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 767.69/212.99 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 767.69/212.99 , #mult(#pos(@x), #0()) -> #0() 767.69/212.99 , #mult(#0(), #neg(@y)) -> #0() 767.69/212.99 , #mult(#0(), #pos(@y)) -> #0() 767.69/212.99 , #mult(#0(), #0()) -> #0() 767.69/212.99 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.99 , attach#2(::(@l, @ls), @x, @xs) -> 767.69/212.99 ::(::(@x, @l), attach(@xs, @ls)) 767.69/212.99 , #succ(#neg(#s(#0()))) -> #0() 767.69/212.99 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 767.69/212.99 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 767.69/212.99 , #succ(#0()) -> #pos(#s(#0())) 767.69/212.99 , makeBase#1(nil()) -> nil() 767.69/212.99 , makeBase#1(::(@l, @m')) -> mkBase(@l) 767.69/212.99 , matrixMult(@m1, @m2) -> 767.69/212.99 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.99 , #abs(#neg(@x)) -> #pos(@x) 767.69/212.99 , #abs(#pos(@x)) -> #pos(@x) 767.69/212.99 , #abs(#0()) -> #0() 767.69/212.99 , #abs(#s(@x)) -> #pos(#s(@x)) 767.69/212.99 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 767.69/212.99 , transpose#1(nil(), @m) -> nil() 767.69/212.99 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 767.69/212.99 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 767.69/212.99 tuple#2(::(@x, @ys), ::(@xs, @m')) 767.69/212.99 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 767.69/212.99 , #pred(#pos(#s(#0()))) -> #0() 767.69/212.99 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 767.69/212.99 , #pred(#0()) -> #neg(#s(#0())) } 767.69/212.99 Obligation: 767.69/212.99 innermost runtime complexity 767.69/212.99 Answer: 767.69/212.99 YES(O(1),O(n^1)) 767.69/212.99 767.69/212.99 We use the processor 'matrix interpretation of dimension 2' to 767.69/212.99 orient following rules strictly. 767.69/212.99 767.69/212.99 DPs: 767.69/212.99 { 4: lineMult#1^#(::(@x, @xs), @l) -> 767.69/212.99 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) 767.69/212.99 , 6: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.99 matrixMultList^#(matrixMult(@acc, @m), @ms) 767.69/212.99 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 767.69/212.99 matrixMult^#(@acc, @m) 767.69/212.99 , 8: matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 767.69/212.99 , 9: matrixMult3^#(@m1, @m2, @m3) -> 767.69/212.99 matrixMult^#(matrixMult(@m1, @m2), @m3) 767.69/212.99 , 10: matrixMult^#(@m1, @m2) -> 767.69/212.99 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 767.69/212.99 , 11: mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 767.69/212.99 , 15: matrixMultOld^#(@m1, @m2) -> 767.69/212.99 matrixMult'^#(@m1, transpose(@m2)) } 767.69/212.99 Trs: 767.69/212.99 { split#1(nil()) -> tuple#2(nil(), nil()) 767.69/212.99 , transAcc#1(::(@l, @m'), @base) -> 767.69/212.99 attach(@l, transAcc(@m', @base)) 767.69/212.99 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 767.69/212.99 , transpose#3(nil(), @l) -> nil() 767.69/212.99 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 767.69/212.99 , mkBase(@m) -> mkBase#1(@m) 767.69/212.99 , attach#2(nil(), @x, @xs) -> nil() 767.69/212.99 , makeBase#1(::(@l, @m')) -> mkBase(@l) } 767.69/212.99 767.69/212.99 Sub-proof: 767.69/212.99 ---------- 767.69/212.99 The following argument positions are usable: 767.69/212.99 Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_7) = {1}, 767.69/212.99 Uargs(c_8) = {1}, Uargs(c_9) = {1, 2} 767.69/212.99 767.69/212.99 TcT has computed the following constructor-based matrix 767.69/212.99 interpretation satisfying not(EDA) and not(IDA(1)). 767.69/212.99 767.69/212.99 [attach](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 767.69/212.99 [0 0] [0 0] [4] 767.69/212.99 767.69/212.99 [split](x1) = [1 4] x1 + [0] 767.69/212.99 [1 0] [0] 767.69/212.99 767.69/212.99 [#add](x1, x2) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [mult#2](x1, x2, x3) = [6 0] x2 + [6 0] x3 + [0] 767.69/212.99 [6 6] [6 6] [0] 767.69/212.99 767.69/212.99 [nil] = [0] 767.69/212.99 [2] 767.69/212.99 767.69/212.99 [split#1](x1) = [1 4] x1 + [0] 767.69/212.99 [1 0] [0] 767.69/212.99 767.69/212.99 [transpose](x1) = [3 4] x1 + [0] 767.69/212.99 [4 4] [4] 767.69/212.99 767.69/212.99 [matrixMult'](x1, x2) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [transAcc](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 767.69/212.99 [4 4] [0 1] [0] 767.69/212.99 767.69/212.99 [mult](x1, x2) = [6] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [+](x1, x2) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [transAcc#1](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 767.69/212.99 [4 0] [0 1] [0] 767.69/212.99 767.69/212.99 [#neg](x1) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [*](x1, x2) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [mkBase#1](x1) = [4 0] x1 + [0] 767.69/212.99 [4 0] [2] 767.69/212.99 767.69/212.99 [transpose#3](x1, x2) = [3 0] x1 + [1 0] x2 + [2] 767.69/212.99 [0 0] [3 0] [2] 767.69/212.99 767.69/212.99 [attach#1](x1, x2) = [2 0] x1 + [1 0] x2 + [0] 767.69/212.99 [0 0] [0 0] [4] 767.69/212.99 767.69/212.99 [transpose#2](x1) = [1 2] x1 + [0] 767.69/212.99 [0 4] [2] 767.69/212.99 767.69/212.99 [matrixMult'#1](x1, x2) = [6 0] x2 + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 767.69/212.99 [#natmult](x1, x2) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [split#2](x1, x2) = [1 0] x1 + [1 0] x2 + [2] 767.69/212.99 [1 0] [1 0] [2] 767.69/212.99 767.69/212.99 [#pos](x1) = [1 0] x1 + [0] 767.69/212.99 [1 0] [0] 767.69/212.99 767.69/212.99 [tuple#2](x1, x2) = [0 0] x1 + [1 0] x2 + [2] 767.69/212.99 [1 0] [1 0] [0] 767.69/212.99 767.69/212.99 [mkBase](x1) = [4 0] x1 + [1] 767.69/212.99 [4 0] [4] 767.69/212.99 767.69/212.99 [makeBase](x1) = [4 0] x1 + [0] 767.69/212.99 [4 4] [2] 767.69/212.99 767.69/212.99 [mult#1](x1, x2) = [6 0] x2 + [0] 767.69/212.99 [6 4] [0] 767.69/212.99 767.69/212.99 [::](x1, x2) = [1 0] x1 + [1 0] x2 + [2] 767.69/212.99 [0 0] [0 0] [0] 767.69/212.99 767.69/212.99 [lineMult#1](x1, x2) = [6 0] x2 + [0] 767.69/212.99 [6 6] [0] 767.69/212.99 767.69/212.99 [#mult](x1, x2) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [attach#2](x1, x2, x3) = [1 0] x1 + [2 0] x2 + [2 0] x3 + [2] 767.69/212.99 [0 0] [0 0] [0 0] [4] 767.69/212.99 767.69/212.99 [#succ](x1) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [#0] = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [makeBase#1](x1) = [4 0] x1 + [0] 767.69/212.99 [4 0] [2] 767.69/212.99 767.69/212.99 [matrixMult](x1, x2) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [#abs](x1) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [lineMult](x1, x2) = [2] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [transpose#1](x1, x2) = [3 4] x2 + [0] 767.69/212.99 [4 4] [2] 767.69/212.99 767.69/212.99 [split#3](x1, x2, x3) = [0 1] x1 + [0 0] x2 + [1 0] x3 + [4] 767.69/212.99 [0 1] [1 0] [1 0] [4] 767.69/212.99 767.69/212.99 [#pred](x1) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [#s](x1) = [0] 767.69/212.99 [0] 767.69/212.99 767.69/212.99 [matrixMultList^#](x1, x2) = [6 0] x2 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [matrixMultList#1^#](x1, x2) = [6 0] x1 + [0] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [matrixMult3^#](x1, x2, x3) = [7 7] x1 + [7 7] x2 + [7 7] x3 + [7] 767.69/212.99 [7 7] [7 7] [7 7] [7] 767.69/212.99 767.69/212.99 [matrixMult^#](x1, x2) = [6 0] x2 + [4] 767.69/212.99 [0 0] [0] 767.69/212.99 767.69/212.99 [mult#2^#](x1, x2, x3) = [1 0] x1 + [0] 767.69/212.99 [0 0] [4] 767.69/212.99 767.69/213.00 [mult^#](x1, x2) = [0 0] x1 + [1 0] x2 + [0] 767.69/213.00 [4 0] [0 0] [0] 767.69/213.00 767.69/213.00 [matrixMult'^#](x1, x2) = [1 0] x2 + [0] 767.69/213.00 [0 0] [0] 767.69/213.00 767.69/213.00 [matrixMult'#1^#](x1, x2) = [1 0] x2 + [0] 767.69/213.00 [0 0] [0] 767.69/213.00 767.69/213.00 [mult#1^#](x1, x2) = [1 0] x2 + [0] 767.69/213.00 [4 0] [0] 767.69/213.00 767.69/213.00 [lineMult^#](x1, x2) = [1 0] x2 + [0] 767.69/213.00 [0 0] [0] 767.69/213.00 767.69/213.00 [matrixMultOld^#](x1, x2) = [7 7] x1 + [7 7] x2 + [7] 767.69/213.00 [7 7] [7 7] [7] 767.69/213.00 767.69/213.00 [lineMult#1^#](x1, x2) = [1 0] x1 + [0] 767.69/213.00 [2 0] [0] 767.69/213.00 767.69/213.00 [c_3](x1) = [1 0] x1 + [1] 767.69/213.00 [0 0] [3] 767.69/213.00 767.69/213.00 [c_4](x1) = [1 0] x1 + [0] 767.69/213.00 [0 0] [0] 767.69/213.00 767.69/213.00 [c_7](x1) = [1 0] x1 + [0] 767.69/213.00 [0 0] [0] 767.69/213.00 767.69/213.00 [c_8](x1) = [1 0] x1 + [0] 767.69/213.00 [0 0] [0] 767.69/213.00 767.69/213.00 [c_9](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 767.69/213.00 [0 0] [0 0] [3] 767.69/213.00 767.69/213.00 The order satisfies the following ordering constraints: 767.69/213.00 767.69/213.00 [attach(@line, @m)] = [2 0] @line + [1 0] @m + [0] 767.69/213.00 [0 0] [0 0] [4] 767.69/213.00 >= [2 0] @line + [1 0] @m + [0] 767.69/213.00 [0 0] [0 0] [4] 767.69/213.00 = [attach#1(@line, @m)] 767.69/213.00 767.69/213.00 [split(@m)] = [1 4] @m + [0] 767.69/213.00 [1 0] [0] 767.69/213.00 >= [1 4] @m + [0] 767.69/213.00 [1 0] [0] 767.69/213.00 = [split#1(@m)] 767.69/213.00 767.69/213.00 [#add(#neg(#s(#0())), @y)] = [0] 767.69/213.00 [0] 767.69/213.00 >= [0] 767.69/213.00 [0] 767.69/213.00 = [#pred(@y)] 767.69/213.00 767.69/213.00 [#add(#neg(#s(#s(@x))), @y)] = [0] 767.69/213.00 [0] 767.69/213.00 >= [0] 767.69/213.00 [0] 767.69/213.00 = [#pred(#add(#pos(#s(@x)), @y))] 767.69/213.00 767.69/213.00 [#add(#pos(#s(#0())), @y)] = [0] 767.69/213.00 [0] 767.69/213.00 >= [0] 767.69/213.00 [0] 767.69/213.00 = [#succ(@y)] 767.69/213.00 767.69/213.00 [#add(#pos(#s(#s(@x))), @y)] = [0] 767.69/213.00 [0] 767.69/213.00 >= [0] 767.69/213.00 [0] 767.69/213.00 = [#succ(#add(#pos(#s(@x)), @y))] 767.69/213.00 767.69/213.00 [#add(#0(), @y)] = [0] 767.69/213.00 [0] 767.69/213.00 ? [1 0] @y + [0] 767.69/213.00 [0 1] [0] 767.69/213.00 = [@y] 767.69/213.00 767.69/213.00 [mult#2(nil(), @x, @xs)] = [6 0] @x + [6 0] @xs + [0] 768.00/213.00 [6 6] [6 6] [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#abs(#0())] 768.00/213.00 768.00/213.00 [mult#2(::(@y, @ys), @x, @xs)] = [6 0] @x + [6 0] @xs + [0] 768.00/213.00 [6 6] [6 6] [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [+(*(@x, @y), mult(@xs, @ys))] 768.00/213.00 768.00/213.00 [split#1(nil())] = [8] 768.00/213.00 [0] 768.00/213.00 > [2] 768.00/213.00 [0] 768.00/213.00 = [tuple#2(nil(), nil())] 768.00/213.00 768.00/213.00 [split#1(::(@l, @ls))] = [1 0] @l + [1 0] @ls + [2] 768.00/213.00 [1 0] [1 0] [2] 768.00/213.00 >= [1 0] @l + [1 0] @ls + [2] 768.00/213.00 [1 0] [1 0] [2] 768.00/213.00 = [split#2(@l, @ls)] 768.00/213.00 768.00/213.00 [transpose(@m)] = [3 4] @m + [0] 768.00/213.00 [4 4] [4] 768.00/213.00 >= [3 4] @m + [0] 768.00/213.00 [4 4] [2] 768.00/213.00 = [transpose#1(@m, @m)] 768.00/213.00 768.00/213.00 [matrixMult'(@m1, @m2)] = [0] 768.00/213.00 [0] 768.00/213.00 ? [6 0] @m2 + [0] 768.00/213.00 [6 6] [0] 768.00/213.00 = [matrixMult'#1(@m1, @m2)] 768.00/213.00 768.00/213.00 [transAcc(@m, @base)] = [2 0] @m + [1 0] @base + [0] 768.00/213.00 [4 4] [0 1] [0] 768.00/213.00 >= [2 0] @m + [1 0] @base + [0] 768.00/213.00 [4 0] [0 1] [0] 768.00/213.00 = [transAcc#1(@m, @base)] 768.00/213.00 768.00/213.00 [mult(@l1, @l2)] = [6] 768.00/213.00 [0] 768.00/213.00 ? [6 0] @l2 + [0] 768.00/213.00 [6 4] [0] 768.00/213.00 = [mult#1(@l1, @l2)] 768.00/213.00 768.00/213.00 [+(@x, @y)] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#add(@x, @y)] 768.00/213.00 768.00/213.00 [transAcc#1(nil(), @base)] = [1 0] @base + [0] 768.00/213.00 [0 1] [0] 768.00/213.00 >= [1 0] @base + [0] 768.00/213.00 [0 1] [0] 768.00/213.00 = [@base] 768.00/213.00 768.00/213.00 [transAcc#1(::(@l, @m'), @base)] = [2 0] @l + [2 0] @m' + [1 0] @base + [4] 768.00/213.00 [4 0] [4 0] [0 1] [8] 768.00/213.00 > [2 0] @l + [2 0] @m' + [1 0] @base + [0] 768.00/213.00 [0 0] [0 0] [0 0] [4] 768.00/213.00 = [attach(@l, transAcc(@m', @base))] 768.00/213.00 768.00/213.00 [*(@x, @y)] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#mult(@x, @y)] 768.00/213.00 768.00/213.00 [mkBase#1(nil())] = [0] 768.00/213.00 [2] 768.00/213.00 >= [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [mkBase#1(::(@l, @m'))] = [4 0] @l + [4 0] @m' + [8] 768.00/213.00 [4 0] [4 0] [10] 768.00/213.00 > [4 0] @m' + [3] 768.00/213.00 [0 0] [0] 768.00/213.00 = [::(nil(), mkBase(@m'))] 768.00/213.00 768.00/213.00 [transpose#3(nil(), @l)] = [1 0] @l + [2] 768.00/213.00 [3 0] [2] 768.00/213.00 > [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [transpose#3(::(@y, @ys), @l)] = [3 0] @y + [1 0] @l + [3 0] @ys + [8] 768.00/213.00 [0 0] [3 0] [0 0] [2] 768.00/213.00 >= [3 0] @y + [1 0] @l + [3 0] @ys + [8] 768.00/213.00 [0 0] [0 0] [0 0] [0] 768.00/213.00 = [::(@l, transpose(::(@y, @ys)))] 768.00/213.00 768.00/213.00 [attach#1(nil(), @m)] = [1 0] @m + [0] 768.00/213.00 [0 0] [4] 768.00/213.00 >= [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [attach#1(::(@x, @xs), @m)] = [2 0] @x + [1 0] @m + [2 0] @xs + [4] 768.00/213.00 [0 0] [0 0] [0 0] [4] 768.00/213.00 > [2 0] @x + [1 0] @m + [2 0] @xs + [2] 768.00/213.00 [0 0] [0 0] [0 0] [4] 768.00/213.00 = [attach#2(@m, @x, @xs)] 768.00/213.00 768.00/213.00 [transpose#2(tuple#2(@l, @m'))] = [2 0] @l + [3 0] @m' + [2] 768.00/213.00 [4 0] [4 0] [2] 768.00/213.00 >= [1 0] @l + [3 0] @m' + [2] 768.00/213.00 [3 0] [0 0] [2] 768.00/213.00 = [transpose#3(@m', @l)] 768.00/213.00 768.00/213.00 [matrixMult'#1(nil(), @m2)] = [6 0] @m2 + [0] 768.00/213.00 [6 6] [0] 768.00/213.00 ? [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [matrixMult'#1(::(@l, @ls), @m2)] = [6 0] @m2 + [0] 768.00/213.00 [6 6] [0] 768.00/213.00 ? [4] 768.00/213.00 [0] 768.00/213.00 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 768.00/213.00 768.00/213.00 [#natmult(#0(), @y)] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#natmult(#s(@x), @y)] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#add(#pos(@y), #natmult(@x, @y))] 768.00/213.00 768.00/213.00 [split#2(nil(), @ls)] = [1 0] @ls + [2] 768.00/213.00 [1 0] [2] 768.00/213.00 >= [2] 768.00/213.00 [0] 768.00/213.00 = [tuple#2(nil(), nil())] 768.00/213.00 768.00/213.00 [split#2(::(@x, @xs), @ls)] = [1 0] @x + [1 0] @xs + [1 0] @ls + [4] 768.00/213.00 [1 0] [1 0] [1 0] [4] 768.00/213.00 >= [0 0] @x + [1 0] @xs + [1 0] @ls + [4] 768.00/213.00 [1 0] [1 0] [1 0] [4] 768.00/213.00 = [split#3(split(@ls), @x, @xs)] 768.00/213.00 768.00/213.00 [mkBase(@m)] = [4 0] @m + [1] 768.00/213.00 [4 0] [4] 768.00/213.00 > [4 0] @m + [0] 768.00/213.00 [4 0] [2] 768.00/213.00 = [mkBase#1(@m)] 768.00/213.00 768.00/213.00 [makeBase(@m)] = [4 0] @m + [0] 768.00/213.00 [4 4] [2] 768.00/213.00 >= [4 0] @m + [0] 768.00/213.00 [4 0] [2] 768.00/213.00 = [makeBase#1(@m)] 768.00/213.00 768.00/213.00 [mult#1(nil(), @l2)] = [6 0] @l2 + [0] 768.00/213.00 [6 4] [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#abs(#0())] 768.00/213.00 768.00/213.00 [mult#1(::(@x, @xs), @l2)] = [6 0] @l2 + [0] 768.00/213.00 [6 4] [0] 768.00/213.00 ? [6 0] @x + [6 0] @xs + [0] 768.00/213.00 [6 6] [6 6] [0] 768.00/213.00 = [mult#2(@l2, @x, @xs)] 768.00/213.00 768.00/213.00 [lineMult#1(nil(), @l)] = [6 0] @l + [0] 768.00/213.00 [6 6] [0] 768.00/213.00 ? [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [lineMult#1(::(@x, @xs), @l)] = [6 0] @l + [0] 768.00/213.00 [6 6] [0] 768.00/213.00 ? [10] 768.00/213.00 [0] 768.00/213.00 = [::(mult(@l, @x), lineMult(@l, @xs))] 768.00/213.00 768.00/213.00 [#mult(#neg(@x), #neg(@y))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#pos(#natmult(@x, @y))] 768.00/213.00 768.00/213.00 [#mult(#neg(@x), #pos(@y))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#neg(#natmult(@x, @y))] 768.00/213.00 768.00/213.00 [#mult(#neg(@x), #0())] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#mult(#pos(@x), #neg(@y))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#neg(#natmult(@x, @y))] 768.00/213.00 768.00/213.00 [#mult(#pos(@x), #pos(@y))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#pos(#natmult(@x, @y))] 768.00/213.00 768.00/213.00 [#mult(#pos(@x), #0())] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#mult(#0(), #neg(@y))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#mult(#0(), #pos(@y))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#mult(#0(), #0())] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [attach#2(nil(), @x, @xs)] = [2 0] @x + [2 0] @xs + [2] 768.00/213.00 [0 0] [0 0] [4] 768.00/213.00 > [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [attach#2(::(@l, @ls), @x, @xs)] = [2 0] @x + [2 0] @xs + [1 0] @l + [1 0] @ls + [4] 768.00/213.00 [0 0] [0 0] [0 0] [0 0] [4] 768.00/213.00 >= [1 0] @x + [2 0] @xs + [1 0] @l + [1 0] @ls + [4] 768.00/213.00 [0 0] [0 0] [0 0] [0 0] [0] 768.00/213.00 = [::(::(@x, @l), attach(@xs, @ls))] 768.00/213.00 768.00/213.00 [#succ(#neg(#s(#0())))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#succ(#neg(#s(#s(@x))))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#neg(#s(@x))] 768.00/213.00 768.00/213.00 [#succ(#pos(#s(@x)))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#pos(#s(#s(@x)))] 768.00/213.00 768.00/213.00 [#succ(#0())] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#pos(#s(#0()))] 768.00/213.00 768.00/213.00 [makeBase#1(nil())] = [0] 768.00/213.00 [2] 768.00/213.00 >= [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [makeBase#1(::(@l, @m'))] = [4 0] @l + [4 0] @m' + [8] 768.00/213.00 [4 0] [4 0] [10] 768.00/213.00 > [4 0] @l + [1] 768.00/213.00 [4 0] [4] 768.00/213.00 = [mkBase(@l)] 768.00/213.00 768.00/213.00 [matrixMult(@m1, @m2)] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 768.00/213.00 768.00/213.00 [#abs(#neg(@x))] = [0] 768.00/213.00 [0] 768.00/213.00 ? [1 0] @x + [0] 768.00/213.00 [1 0] [0] 768.00/213.00 = [#pos(@x)] 768.00/213.00 768.00/213.00 [#abs(#pos(@x))] = [0] 768.00/213.00 [0] 768.00/213.00 ? [1 0] @x + [0] 768.00/213.00 [1 0] [0] 768.00/213.00 = [#pos(@x)] 768.00/213.00 768.00/213.00 [#abs(#0())] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#abs(#s(@x))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#pos(#s(@x))] 768.00/213.00 768.00/213.00 [lineMult(@l, @m2)] = [2] 768.00/213.00 [0] 768.00/213.00 ? [6 0] @l + [0] 768.00/213.00 [6 6] [0] 768.00/213.00 = [lineMult#1(@m2, @l)] 768.00/213.00 768.00/213.00 [transpose#1(nil(), @m)] = [3 4] @m + [0] 768.00/213.00 [4 4] [2] 768.00/213.00 >= [0] 768.00/213.00 [2] 768.00/213.00 = [nil()] 768.00/213.00 768.00/213.00 [transpose#1(::(@xs, @xss), @m)] = [3 4] @m + [0] 768.00/213.00 [4 4] [2] 768.00/213.00 >= [3 4] @m + [0] 768.00/213.00 [4 0] [2] 768.00/213.00 = [transpose#2(split(@m))] 768.00/213.00 768.00/213.00 [split#3(tuple#2(@ys, @m'), @x, @xs)] = [0 0] @x + [1 0] @xs + [1 0] @m' + [1 0] @ys + [4] 768.00/213.00 [1 0] [1 0] [1 0] [1 0] [4] 768.00/213.00 >= [0 0] @x + [1 0] @xs + [1 0] @m' + [0 0] @ys + [4] 768.00/213.00 [1 0] [1 0] [1 0] [1 0] [4] 768.00/213.00 = [tuple#2(::(@x, @ys), ::(@xs, @m'))] 768.00/213.00 768.00/213.00 [#pred(#neg(#s(@x)))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#neg(#s(#s(@x)))] 768.00/213.00 768.00/213.00 [#pred(#pos(#s(#0())))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#0()] 768.00/213.00 768.00/213.00 [#pred(#pos(#s(#s(@x))))] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#pos(#s(@x))] 768.00/213.00 768.00/213.00 [#pred(#0())] = [0] 768.00/213.00 [0] 768.00/213.00 >= [0] 768.00/213.00 [0] 768.00/213.00 = [#neg(#s(#0()))] 768.00/213.00 768.00/213.00 [matrixMultList^#(@acc, @mm)] = [6 0] @mm + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 >= [6 0] @mm + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMultList#1^#(@mm, @acc)] 768.00/213.00 768.00/213.00 [matrixMultList#1^#(::(@m, @ms), @acc)] = [6 0] @m + [6 0] @ms + [12] 768.00/213.00 [0 0] [0 0] [0] 768.00/213.00 > [6 0] @ms + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMultList^#(matrixMult(@acc, @m), @ms)] 768.00/213.00 768.00/213.00 [matrixMultList#1^#(::(@m, @ms), @acc)] = [6 0] @m + [6 0] @ms + [12] 768.00/213.00 [0 0] [0 0] [0] 768.00/213.00 > [6 0] @m + [4] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMult^#(@acc, @m)] 768.00/213.00 768.00/213.00 [matrixMult3^#(@m1, @m2, @m3)] = [7 7] @m2 + [7 7] @m1 + [7 7] @m3 + [7] 768.00/213.00 [7 7] [7 7] [7 7] [7] 768.00/213.00 > [6 0] @m2 + [4] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMult^#(@m1, @m2)] 768.00/213.00 768.00/213.00 [matrixMult3^#(@m1, @m2, @m3)] = [7 7] @m2 + [7 7] @m1 + [7 7] @m3 + [7] 768.00/213.00 [7 7] [7 7] [7 7] [7] 768.00/213.00 > [6 0] @m3 + [4] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMult^#(matrixMult(@m1, @m2), @m3)] 768.00/213.00 768.00/213.00 [matrixMult^#(@m1, @m2)] = [6 0] @m2 + [4] 768.00/213.00 [0 0] [0] 768.00/213.00 > [6 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))] 768.00/213.00 768.00/213.00 [mult#2^#(::(@y, @ys), @x, @xs)] = [1 0] @y + [1 0] @ys + [2] 768.00/213.00 [0 0] [0 0] [4] 768.00/213.00 > [1 0] @ys + [1] 768.00/213.00 [0 0] [3] 768.00/213.00 = [c_3(mult^#(@xs, @ys))] 768.00/213.00 768.00/213.00 [mult^#(@l1, @l2)] = [0 0] @l1 + [1 0] @l2 + [0] 768.00/213.00 [4 0] [0 0] [0] 768.00/213.00 >= [1 0] @l2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [c_4(mult#1^#(@l1, @l2))] 768.00/213.00 768.00/213.00 [matrixMult'^#(@m1, @m2)] = [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 >= [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMult'#1^#(@m1, @m2)] 768.00/213.00 768.00/213.00 [matrixMult'#1^#(::(@l, @ls), @m2)] = [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 >= [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMult'^#(@ls, @m2)] 768.00/213.00 768.00/213.00 [matrixMult'#1^#(::(@l, @ls), @m2)] = [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 >= [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [lineMult^#(@l, @m2)] 768.00/213.00 768.00/213.00 [mult#1^#(::(@x, @xs), @l2)] = [1 0] @l2 + [0] 768.00/213.00 [4 0] [0] 768.00/213.00 >= [1 0] @l2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [c_7(mult#2^#(@l2, @x, @xs))] 768.00/213.00 768.00/213.00 [lineMult^#(@l, @m2)] = [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 >= [1 0] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [c_8(lineMult#1^#(@m2, @l))] 768.00/213.00 768.00/213.00 [matrixMultOld^#(@m1, @m2)] = [7 7] @m2 + [7 7] @m1 + [7] 768.00/213.00 [7 7] [7 7] [7] 768.00/213.00 > [3 4] @m2 + [0] 768.00/213.00 [0 0] [0] 768.00/213.00 = [matrixMult'^#(@m1, transpose(@m2))] 768.00/213.00 768.00/213.00 [lineMult#1^#(::(@x, @xs), @l)] = [1 0] @x + [1 0] @xs + [2] 768.00/213.00 [2 0] [2 0] [4] 768.00/213.00 > [1 0] @x + [1 0] @xs + [1] 768.00/213.00 [0 0] [0 0] [3] 768.00/213.00 = [c_9(mult^#(@l, @x), lineMult^#(@l, @xs))] 768.00/213.00 768.00/213.00 768.00/213.00 We return to the main proof. Consider the set of all dependency 768.00/213.00 pairs 768.00/213.00 768.00/213.00 : 768.00/213.00 { 1: mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 768.00/213.00 , 2: mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 768.00/213.00 , 3: lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) 768.00/213.00 , 4: lineMult#1^#(::(@x, @xs), @l) -> 768.00/213.00 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) 768.00/213.00 , 5: matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 768.00/213.00 , 6: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.00 matrixMultList^#(matrixMult(@acc, @m), @ms) 768.00/213.00 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.00 matrixMult^#(@acc, @m) 768.00/213.00 , 8: matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 768.00/213.00 , 9: matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.00 matrixMult^#(matrixMult(@m1, @m2), @m3) 768.00/213.00 , 10: matrixMult^#(@m1, @m2) -> 768.00/213.00 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.00 , 11: mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 768.00/213.00 , 12: matrixMult'^#(@m1, @m2) -> matrixMult'#1^#(@m1, @m2) 768.00/213.00 , 13: matrixMult'#1^#(::(@l, @ls), @m2) -> matrixMult'^#(@ls, @m2) 768.00/213.00 , 14: matrixMult'#1^#(::(@l, @ls), @m2) -> lineMult^#(@l, @m2) 768.00/213.00 , 15: matrixMultOld^#(@m1, @m2) -> 768.00/213.00 matrixMult'^#(@m1, transpose(@m2)) } 768.00/213.00 768.00/213.00 Processor 'matrix interpretation of dimension 2' induces the 768.00/213.00 complexity certificate YES(?,O(n^1)) on application of dependency 768.00/213.00 pairs {4,6,7,8,9,10,11,15}. These cover all (indirect) predecessors 768.00/213.00 of dependency pairs {1,2,4,5,6,7,8,9,10,11,15}, their number of 768.00/213.00 application is equally bounded. The dependency pairs are shifted 768.00/213.00 into the weak component. 768.00/213.00 768.00/213.00 We are left with following problem, upon which TcT provides the 768.00/213.00 certificate YES(O(1),O(n^1)). 768.00/213.00 768.00/213.00 Strict DPs: { lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) } 768.00/213.00 Weak DPs: 768.00/213.00 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 768.00/213.00 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.00 matrixMultList^#(matrixMult(@acc, @m), @ms) 768.00/213.00 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 768.00/213.00 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 768.00/213.00 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.00 matrixMult^#(matrixMult(@m1, @m2), @m3) 768.00/213.00 , matrixMult^#(@m1, @m2) -> 768.00/213.00 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.00 , mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 768.00/213.00 , mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 768.00/213.00 , matrixMult'^#(@m1, @m2) -> matrixMult'#1^#(@m1, @m2) 768.00/213.00 , matrixMult'#1^#(::(@l, @ls), @m2) -> matrixMult'^#(@ls, @m2) 768.00/213.00 , matrixMult'#1^#(::(@l, @ls), @m2) -> lineMult^#(@l, @m2) 768.00/213.00 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) 768.00/213.01 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) 768.00/213.01 , lineMult#1^#(::(@x, @xs), @l) -> 768.00/213.01 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 768.00/213.01 Weak Trs: 768.00/213.01 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.01 , split(@m) -> split#1(@m) 768.00/213.01 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.01 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.01 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.01 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.01 , #add(#0(), @y) -> @y 768.00/213.01 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.01 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.01 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.01 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.01 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.01 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.01 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.01 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.01 , +(@x, @y) -> #add(@x, @y) 768.00/213.01 , transAcc#1(nil(), @base) -> @base 768.00/213.01 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.01 attach(@l, transAcc(@m', @base)) 768.00/213.01 , *(@x, @y) -> #mult(@x, @y) 768.00/213.01 , mkBase#1(nil()) -> nil() 768.00/213.01 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.01 , transpose#3(nil(), @l) -> nil() 768.00/213.01 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.01 , attach#1(nil(), @m) -> nil() 768.00/213.01 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.01 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.01 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.01 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.01 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.01 , #natmult(#0(), @y) -> #0() 768.00/213.01 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.01 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.01 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.01 , mkBase(@m) -> mkBase#1(@m) 768.00/213.01 , makeBase(@m) -> makeBase#1(@m) 768.00/213.01 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.01 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.01 , lineMult#1(nil(), @l) -> nil() 768.00/213.01 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.01 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.01 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.01 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.01 , #mult(#neg(@x), #0()) -> #0() 768.00/213.01 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.01 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.01 , #mult(#pos(@x), #0()) -> #0() 768.00/213.01 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.01 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.01 , #mult(#0(), #0()) -> #0() 768.00/213.01 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.01 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.01 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.01 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.01 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.01 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.01 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.01 , makeBase#1(nil()) -> nil() 768.00/213.01 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.01 , matrixMult(@m1, @m2) -> 768.00/213.01 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.01 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.01 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.01 , #abs(#0()) -> #0() 768.00/213.01 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.01 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.01 , transpose#1(nil(), @m) -> nil() 768.00/213.01 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.01 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.01 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.01 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.01 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.01 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.01 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.01 Obligation: 768.00/213.01 innermost runtime complexity 768.00/213.01 Answer: 768.00/213.01 YES(O(1),O(n^1)) 768.00/213.01 768.00/213.01 The following weak DPs constitute a sub-graph of the DG that is 768.00/213.01 closed under successors. The DPs are removed. 768.00/213.01 768.00/213.01 { mult#2^#(::(@y, @ys), @x, @xs) -> c_3(mult^#(@xs, @ys)) 768.00/213.01 , mult^#(@l1, @l2) -> c_4(mult#1^#(@l1, @l2)) 768.00/213.01 , mult#1^#(::(@x, @xs), @l2) -> c_7(mult#2^#(@l2, @x, @xs)) } 768.00/213.01 768.00/213.01 We are left with following problem, upon which TcT provides the 768.00/213.01 certificate YES(O(1),O(n^1)). 768.00/213.01 768.00/213.01 Strict DPs: { lineMult^#(@l, @m2) -> c_8(lineMult#1^#(@m2, @l)) } 768.00/213.01 Weak DPs: 768.00/213.01 { matrixMultList^#(@acc, @mm) -> matrixMultList#1^#(@mm, @acc) 768.00/213.01 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.01 matrixMultList^#(matrixMult(@acc, @m), @ms) 768.00/213.01 , matrixMultList#1^#(::(@m, @ms), @acc) -> matrixMult^#(@acc, @m) 768.00/213.01 , matrixMult3^#(@m1, @m2, @m3) -> matrixMult^#(@m1, @m2) 768.00/213.01 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.01 matrixMult^#(matrixMult(@m1, @m2), @m3) 768.00/213.01 , matrixMult^#(@m1, @m2) -> 768.00/213.01 matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.01 , matrixMult'^#(@m1, @m2) -> matrixMult'#1^#(@m1, @m2) 768.00/213.01 , matrixMult'#1^#(::(@l, @ls), @m2) -> matrixMult'^#(@ls, @m2) 768.00/213.01 , matrixMult'#1^#(::(@l, @ls), @m2) -> lineMult^#(@l, @m2) 768.00/213.01 , matrixMultOld^#(@m1, @m2) -> matrixMult'^#(@m1, transpose(@m2)) 768.00/213.01 , lineMult#1^#(::(@x, @xs), @l) -> 768.00/213.01 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 768.00/213.01 Weak Trs: 768.00/213.01 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.01 , split(@m) -> split#1(@m) 768.00/213.01 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.01 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.01 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.01 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.01 , #add(#0(), @y) -> @y 768.00/213.01 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.01 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.01 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.01 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.01 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.01 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.01 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.01 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.01 , +(@x, @y) -> #add(@x, @y) 768.00/213.01 , transAcc#1(nil(), @base) -> @base 768.00/213.01 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.01 attach(@l, transAcc(@m', @base)) 768.00/213.01 , *(@x, @y) -> #mult(@x, @y) 768.00/213.01 , mkBase#1(nil()) -> nil() 768.00/213.01 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.01 , transpose#3(nil(), @l) -> nil() 768.00/213.01 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.01 , attach#1(nil(), @m) -> nil() 768.00/213.01 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.01 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.01 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.01 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.01 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.01 , #natmult(#0(), @y) -> #0() 768.00/213.01 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.01 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.01 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.01 , mkBase(@m) -> mkBase#1(@m) 768.00/213.01 , makeBase(@m) -> makeBase#1(@m) 768.00/213.01 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.01 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.01 , lineMult#1(nil(), @l) -> nil() 768.00/213.01 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.01 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.01 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.01 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.01 , #mult(#neg(@x), #0()) -> #0() 768.00/213.01 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.01 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.01 , #mult(#pos(@x), #0()) -> #0() 768.00/213.01 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.01 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.01 , #mult(#0(), #0()) -> #0() 768.00/213.01 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.01 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.01 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.01 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.01 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.01 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.01 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.01 , makeBase#1(nil()) -> nil() 768.00/213.01 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.01 , matrixMult(@m1, @m2) -> 768.00/213.01 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.01 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.01 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.01 , #abs(#0()) -> #0() 768.00/213.01 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.01 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.01 , transpose#1(nil(), @m) -> nil() 768.00/213.01 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.01 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.01 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.01 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.01 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.01 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.01 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.01 Obligation: 768.00/213.01 innermost runtime complexity 768.00/213.01 Answer: 768.00/213.01 YES(O(1),O(n^1)) 768.00/213.01 768.00/213.01 Due to missing edges in the dependency-graph, the right-hand sides 768.00/213.01 of following rules could be simplified: 768.00/213.01 768.00/213.01 { lineMult#1^#(::(@x, @xs), @l) -> 768.00/213.01 c_9(mult^#(@l, @x), lineMult^#(@l, @xs)) } 768.00/213.01 768.00/213.01 We are left with following problem, upon which TcT provides the 768.00/213.01 certificate YES(O(1),O(n^1)). 768.00/213.01 768.00/213.01 Strict DPs: { lineMult^#(@l, @m2) -> c_1(lineMult#1^#(@m2, @l)) } 768.00/213.01 Weak DPs: 768.00/213.01 { matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 768.00/213.01 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.01 c_3(matrixMultList^#(matrixMult(@acc, @m), @ms)) 768.00/213.01 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.01 c_4(matrixMult^#(@acc, @m)) 768.00/213.01 , matrixMult3^#(@m1, @m2, @m3) -> c_5(matrixMult^#(@m1, @m2)) 768.00/213.01 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.01 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3)) 768.00/213.01 , matrixMult^#(@m1, @m2) -> 768.00/213.01 c_7(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 768.00/213.01 , matrixMult'^#(@m1, @m2) -> c_8(matrixMult'#1^#(@m1, @m2)) 768.00/213.01 , matrixMult'#1^#(::(@l, @ls), @m2) -> c_9(matrixMult'^#(@ls, @m2)) 768.00/213.01 , matrixMult'#1^#(::(@l, @ls), @m2) -> c_10(lineMult^#(@l, @m2)) 768.00/213.01 , matrixMultOld^#(@m1, @m2) -> 768.00/213.01 c_11(matrixMult'^#(@m1, transpose(@m2))) 768.00/213.01 , lineMult#1^#(::(@x, @xs), @l) -> c_12(lineMult^#(@l, @xs)) } 768.00/213.01 Weak Trs: 768.00/213.01 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.01 , split(@m) -> split#1(@m) 768.00/213.01 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.01 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.01 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.01 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.01 , #add(#0(), @y) -> @y 768.00/213.01 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.01 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.01 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.01 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.01 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.01 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.01 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.01 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.01 , +(@x, @y) -> #add(@x, @y) 768.00/213.01 , transAcc#1(nil(), @base) -> @base 768.00/213.01 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.01 attach(@l, transAcc(@m', @base)) 768.00/213.01 , *(@x, @y) -> #mult(@x, @y) 768.00/213.01 , mkBase#1(nil()) -> nil() 768.00/213.01 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.01 , transpose#3(nil(), @l) -> nil() 768.00/213.01 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.01 , attach#1(nil(), @m) -> nil() 768.00/213.01 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.01 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.01 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.01 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.01 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.01 , #natmult(#0(), @y) -> #0() 768.00/213.01 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.01 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.01 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.01 , mkBase(@m) -> mkBase#1(@m) 768.00/213.01 , makeBase(@m) -> makeBase#1(@m) 768.00/213.01 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.01 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.01 , lineMult#1(nil(), @l) -> nil() 768.00/213.01 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.01 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.01 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.01 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.01 , #mult(#neg(@x), #0()) -> #0() 768.00/213.01 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.01 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.01 , #mult(#pos(@x), #0()) -> #0() 768.00/213.01 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.01 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.01 , #mult(#0(), #0()) -> #0() 768.00/213.01 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.01 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.01 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.01 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.01 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.01 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.01 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.01 , makeBase#1(nil()) -> nil() 768.00/213.01 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.01 , matrixMult(@m1, @m2) -> 768.00/213.01 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.01 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.01 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.01 , #abs(#0()) -> #0() 768.00/213.01 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.01 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.01 , transpose#1(nil(), @m) -> nil() 768.00/213.01 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.01 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.01 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.01 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.01 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.01 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.01 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.01 Obligation: 768.00/213.01 innermost runtime complexity 768.00/213.01 Answer: 768.00/213.01 YES(O(1),O(n^1)) 768.00/213.01 768.00/213.01 We use the processor 'matrix interpretation of dimension 2' to 768.00/213.01 orient following rules strictly. 768.00/213.01 768.00/213.01 DPs: 768.00/213.01 { 3: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.01 c_3(matrixMultList^#(matrixMult(@acc, @m), @ms)) 768.00/213.01 , 4: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.01 c_4(matrixMult^#(@acc, @m)) 768.00/213.01 , 5: matrixMult3^#(@m1, @m2, @m3) -> c_5(matrixMult^#(@m1, @m2)) 768.00/213.01 , 6: matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.01 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3)) 768.00/213.01 , 10: matrixMult'#1^#(::(@l, @ls), @m2) -> 768.00/213.01 c_10(lineMult^#(@l, @m2)) 768.00/213.01 , 11: matrixMultOld^#(@m1, @m2) -> 768.00/213.01 c_11(matrixMult'^#(@m1, transpose(@m2))) 768.00/213.01 , 12: lineMult#1^#(::(@x, @xs), @l) -> c_12(lineMult^#(@l, @xs)) } 768.00/213.01 Trs: 768.00/213.01 { split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.01 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.01 attach(@l, transAcc(@m', @base)) 768.00/213.01 , transpose#3(nil(), @l) -> nil() 768.00/213.01 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.01 , makeBase#1(::(@l, @m')) -> mkBase(@l) } 768.00/213.01 768.00/213.01 Sub-proof: 768.00/213.01 ---------- 768.00/213.01 The following argument positions are usable: 768.00/213.01 Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, 768.00/213.01 Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, 768.00/213.01 Uargs(c_7) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, 768.00/213.01 Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1} 768.00/213.01 768.00/213.01 TcT has computed the following constructor-based matrix 768.00/213.01 interpretation satisfying not(EDA) and not(IDA(1)). 768.00/213.01 768.00/213.01 [attach](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 768.00/213.01 [0 0] [0 0] [2] 768.00/213.01 768.00/213.01 [split](x1) = [1 4] x1 + [0] 768.00/213.01 [1 0] [0] 768.00/213.01 768.00/213.01 [#add](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [mult#2](x1, x2, x3) = [6 0] x2 + [6 0] x3 + [0] 768.00/213.01 [6 6] [6 6] [0] 768.00/213.01 768.00/213.01 [nil] = [0] 768.00/213.01 [2] 768.00/213.01 768.00/213.01 [split#1](x1) = [1 1] x1 + [0] 768.00/213.01 [1 0] [0] 768.00/213.01 768.00/213.01 [transpose](x1) = [2 4] x1 + [0] 768.00/213.01 [4 0] [6] 768.00/213.01 768.00/213.01 [matrixMult'](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [transAcc](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 768.00/213.01 [0 0] [4 1] [2] 768.00/213.01 768.00/213.01 [mult](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [+](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [transAcc#1](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 768.00/213.01 [0 0] [4 1] [2] 768.00/213.01 768.00/213.01 [#neg](x1) = [1 0] x1 + [0] 768.00/213.01 [1 0] [0] 768.00/213.01 768.00/213.01 [*](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [mkBase#1](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [4] 768.00/213.01 768.00/213.01 [transpose#3](x1, x2) = [2 0] x1 + [1 0] x2 + [1] 768.00/213.01 [0 0] [0 0] [2] 768.00/213.01 768.00/213.01 [attach#1](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 768.00/213.01 [0 0] [0 0] [2] 768.00/213.01 768.00/213.01 [transpose#2](x1) = [1 1] x1 + [0] 768.00/213.01 [0 0] [2] 768.00/213.01 768.00/213.01 [matrixMult'#1](x1, x2) = [6 0] x2 + [0] 768.00/213.01 [6 6] [0] 768.00/213.01 768.00/213.01 [#natmult](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [split#2](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 768.00/213.01 [1 0] [1 0] [1] 768.00/213.01 768.00/213.01 [#pos](x1) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [tuple#2](x1, x2) = [0 0] x1 + [1 0] x2 + [1] 768.00/213.01 [1 0] [1 0] [0] 768.00/213.01 768.00/213.01 [mkBase](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [4] 768.00/213.01 768.00/213.01 [makeBase](x1) = [4 0] x1 + [0] 768.00/213.01 [4 0] [4] 768.00/213.01 768.00/213.01 [mult#1](x1, x2) = [6 0] x2 + [0] 768.00/213.01 [4 6] [0] 768.00/213.01 768.00/213.01 [::](x1, x2) = [1 0] x1 + [1 0] x2 + [1] 768.00/213.01 [0 0] [0 0] [0] 768.00/213.01 768.00/213.01 [lineMult#1](x1, x2) = [6 0] x2 + [0] 768.00/213.01 [6 6] [0] 768.00/213.01 768.00/213.01 [#mult](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [attach#2](x1, x2, x3) = [1 0] x1 + [1 0] x2 + [1 0] x3 + [1] 768.00/213.01 [0 0] [0 0] [0 0] [2] 768.00/213.01 768.00/213.01 [#succ](x1) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [#0] = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [makeBase#1](x1) = [4 0] x1 + [0] 768.00/213.01 [0 0] [4] 768.00/213.01 768.00/213.01 [matrixMult](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [#abs](x1) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [lineMult](x1, x2) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [transpose#1](x1, x2) = [0 0] x1 + [2 4] x2 + [0] 768.00/213.01 [2 0] [0 0] [6] 768.00/213.01 768.00/213.01 [split#3](x1, x2, x3) = [0 1] x1 + [0 0] x2 + [1 0] x3 + [2] 768.00/213.01 [0 1] [1 0] [1 0] [2] 768.00/213.01 768.00/213.01 [#pred](x1) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [#s](x1) = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [matrixMultList^#](x1, x2) = [5 0] x2 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [matrixMultList#1^#](x1, x2) = [5 0] x1 + [0 0] x2 + [0] 768.00/213.01 [0 0] [0 4] [0] 768.00/213.01 768.00/213.01 [matrixMult3^#](x1, x2, x3) = [7 7] x1 + [7 7] x2 + [7 7] x3 + [7] 768.00/213.01 [7 7] [7 7] [7 7] [7] 768.00/213.01 768.00/213.01 [matrixMult^#](x1, x2) = [5 0] x2 + [1] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [mult#2^#](x1, x2, x3) = [7 7] x1 + [7 7] x2 + [7 7] x3 + [0] 768.00/213.01 [0 0] [0 0] [0 0] [0] 768.00/213.01 768.00/213.01 [mult^#](x1, x2) = [7 7] x1 + [7 7] x2 + [0] 768.00/213.01 [0 0] [0 0] [0] 768.00/213.01 768.00/213.01 [matrixMult'^#](x1, x2) = [0 0] x1 + [1 0] x2 + [1] 768.00/213.01 [4 4] [0 4] [0] 768.00/213.01 768.00/213.01 [matrixMult'#1^#](x1, x2) = [1 0] x2 + [1] 768.00/213.01 [4 0] [0] 768.00/213.01 768.00/213.01 [mult#1^#](x1, x2) = [7 7] x1 + [7 7] x2 + [0] 768.00/213.01 [0 0] [0 0] [0] 768.00/213.01 768.00/213.01 [lineMult^#](x1, x2) = [0 0] x1 + [1 0] x2 + [0] 768.00/213.01 [4 4] [4 4] [0] 768.00/213.01 768.00/213.01 [matrixMultOld^#](x1, x2) = [7 7] x1 + [7 7] x2 + [7] 768.00/213.01 [7 7] [7 7] [7] 768.00/213.01 768.00/213.01 [lineMult#1^#](x1, x2) = [1 0] x1 + [0 0] x2 + [0] 768.00/213.01 [0 0] [4 0] [0] 768.00/213.01 768.00/213.01 [c_3](x1) = [7 7] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_4](x1) = [7 7] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_7](x1) = [7 7] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_8](x1) = [7 7] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_9](x1, x2) = [7 7] x1 + [7 7] x2 + [0] 768.00/213.01 [0 0] [0 0] [0] 768.00/213.01 768.00/213.01 [c] = [0] 768.00/213.01 [0] 768.00/213.01 768.00/213.01 [c_1](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_2](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_3](x1) = [1 0] x1 + [3] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_4](x1) = [1 0] x1 + [1] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_5](x1) = [1 0] x1 + [3] 768.00/213.01 [0 0] [7] 768.00/213.01 768.00/213.01 [c_6](x1) = [1 0] x1 + [3] 768.00/213.01 [0 0] [7] 768.00/213.01 768.00/213.01 [c_7](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_8](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_9](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_10](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 [c_11](x1) = [1 0] x1 + [3] 768.00/213.01 [0 0] [7] 768.00/213.01 768.00/213.01 [c_12](x1) = [1 0] x1 + [0] 768.00/213.01 [0 0] [0] 768.00/213.01 768.00/213.01 The order satisfies the following ordering constraints: 768.00/213.01 768.00/213.01 [attach(@line, @m)] = [1 0] @line + [1 0] @m + [0] 768.00/213.01 [0 0] [0 0] [2] 768.00/213.01 >= [1 0] @line + [1 0] @m + [0] 768.00/213.01 [0 0] [0 0] [2] 768.00/213.01 = [attach#1(@line, @m)] 768.00/213.01 768.00/213.01 [split(@m)] = [1 4] @m + [0] 768.00/213.01 [1 0] [0] 768.00/213.01 >= [1 1] @m + [0] 768.00/213.01 [1 0] [0] 768.00/213.01 = [split#1(@m)] 768.00/213.01 768.00/213.01 [#add(#neg(#s(#0())), @y)] = [0] 768.00/213.01 [0] 768.00/213.01 >= [0] 768.00/213.01 [0] 768.00/213.01 = [#pred(@y)] 768.00/213.01 768.00/213.01 [#add(#neg(#s(#s(@x))), @y)] = [0] 768.00/213.01 [0] 768.00/213.01 >= [0] 768.00/213.01 [0] 768.00/213.01 = [#pred(#add(#pos(#s(@x)), @y))] 768.00/213.01 768.00/213.01 [#add(#pos(#s(#0())), @y)] = [0] 768.00/213.01 [0] 768.00/213.01 >= [0] 768.00/213.01 [0] 768.00/213.01 = [#succ(@y)] 768.00/213.01 768.00/213.01 [#add(#pos(#s(#s(@x))), @y)] = [0] 768.00/213.01 [0] 768.00/213.01 >= [0] 768.00/213.01 [0] 768.00/213.01 = [#succ(#add(#pos(#s(@x)), @y))] 768.00/213.01 768.00/213.01 [#add(#0(), @y)] = [0] 768.00/213.01 [0] 768.00/213.01 ? [1 0] @y + [0] 768.00/213.01 [0 1] [0] 768.00/213.01 = [@y] 768.00/213.01 768.00/213.01 [mult#2(nil(), @x, @xs)] = [6 0] @x + [6 0] @xs + [0] 768.00/213.01 [6 6] [6 6] [0] 768.00/213.01 >= [0] 768.00/213.01 [0] 768.00/213.01 = [#abs(#0())] 768.00/213.01 768.00/213.01 [mult#2(::(@y, @ys), @x, @xs)] = [6 0] @x + [6 0] @xs + [0] 768.00/213.01 [6 6] [6 6] [0] 768.00/213.01 >= [0] 768.00/213.01 [0] 768.00/213.01 = [+(*(@x, @y), mult(@xs, @ys))] 768.00/213.01 768.00/213.01 [split#1(nil())] = [2] 768.00/213.01 [0] 768.00/213.01 > [1] 768.00/213.01 [0] 768.00/213.01 = [tuple#2(nil(), nil())] 768.00/213.01 768.00/213.01 [split#1(::(@l, @ls))] = [1 0] @l + [1 0] @ls + [1] 768.00/213.01 [1 0] [1 0] [1] 768.00/213.01 >= [1 0] @l + [1 0] @ls + [1] 768.00/213.01 [1 0] [1 0] [1] 768.00/213.01 = [split#2(@l, @ls)] 768.00/213.01 768.00/213.01 [transpose(@m)] = [2 4] @m + [0] 768.00/213.01 [4 0] [6] 768.00/213.01 >= [2 4] @m + [0] 768.00/213.01 [2 0] [6] 768.00/213.01 = [transpose#1(@m, @m)] 768.00/213.01 768.00/213.01 [matrixMult'(@m1, @m2)] = [0] 768.00/213.01 [0] 768.00/213.01 ? [6 0] @m2 + [0] 768.00/213.01 [6 6] [0] 768.00/213.01 = [matrixMult'#1(@m1, @m2)] 768.00/213.01 768.00/213.01 [transAcc(@m, @base)] = [1 0] @m + [1 0] @base + [0] 768.00/213.01 [0 0] [4 1] [2] 768.00/213.01 >= [1 0] @m + [1 0] @base + [0] 768.00/213.01 [0 0] [4 1] [2] 768.00/213.01 = [transAcc#1(@m, @base)] 768.00/213.01 768.00/213.01 [mult(@l1, @l2)] = [0] 768.00/213.01 [0] 768.00/213.01 ? [6 0] @l2 + [0] 768.00/213.01 [4 6] [0] 768.00/213.01 = [mult#1(@l1, @l2)] 768.00/213.01 768.00/213.01 [+(@x, @y)] = [0] 768.00/213.01 [0] 768.00/213.01 >= [0] 768.00/213.01 [0] 768.00/213.01 = [#add(@x, @y)] 768.00/213.01 768.00/213.01 [transAcc#1(nil(), @base)] = [1 0] @base + [0] 768.00/213.02 [4 1] [2] 768.00/213.02 >= [1 0] @base + [0] 768.00/213.02 [0 1] [0] 768.00/213.02 = [@base] 768.00/213.02 768.00/213.02 [transAcc#1(::(@l, @m'), @base)] = [1 0] @l + [1 0] @m' + [1 0] @base + [1] 768.00/213.02 [0 0] [0 0] [4 1] [2] 768.00/213.02 > [1 0] @l + [1 0] @m' + [1 0] @base + [0] 768.00/213.02 [0 0] [0 0] [0 0] [2] 768.00/213.02 = [attach(@l, transAcc(@m', @base))] 768.00/213.02 768.00/213.02 [*(@x, @y)] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#mult(@x, @y)] 768.00/213.02 768.00/213.02 [mkBase#1(nil())] = [0] 768.00/213.02 [4] 768.00/213.02 >= [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [mkBase#1(::(@l, @m'))] = [1 0] @l + [1 0] @m' + [1] 768.00/213.02 [0 0] [0 0] [4] 768.00/213.02 >= [1 0] @m' + [1] 768.00/213.02 [0 0] [0] 768.00/213.02 = [::(nil(), mkBase(@m'))] 768.00/213.02 768.00/213.02 [transpose#3(nil(), @l)] = [1 0] @l + [1] 768.00/213.02 [0 0] [2] 768.00/213.02 > [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [transpose#3(::(@y, @ys), @l)] = [2 0] @y + [1 0] @l + [2 0] @ys + [3] 768.00/213.02 [0 0] [0 0] [0 0] [2] 768.00/213.02 >= [2 0] @y + [1 0] @l + [2 0] @ys + [3] 768.00/213.02 [0 0] [0 0] [0 0] [0] 768.00/213.02 = [::(@l, transpose(::(@y, @ys)))] 768.00/213.02 768.00/213.02 [attach#1(nil(), @m)] = [1 0] @m + [0] 768.00/213.02 [0 0] [2] 768.00/213.02 >= [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [attach#1(::(@x, @xs), @m)] = [1 0] @x + [1 0] @m + [1 0] @xs + [1] 768.00/213.02 [0 0] [0 0] [0 0] [2] 768.00/213.02 >= [1 0] @x + [1 0] @m + [1 0] @xs + [1] 768.00/213.02 [0 0] [0 0] [0 0] [2] 768.00/213.02 = [attach#2(@m, @x, @xs)] 768.00/213.02 768.00/213.02 [transpose#2(tuple#2(@l, @m'))] = [1 0] @l + [2 0] @m' + [1] 768.00/213.02 [0 0] [0 0] [2] 768.00/213.02 >= [1 0] @l + [2 0] @m' + [1] 768.00/213.02 [0 0] [0 0] [2] 768.00/213.02 = [transpose#3(@m', @l)] 768.00/213.02 768.00/213.02 [matrixMult'#1(nil(), @m2)] = [6 0] @m2 + [0] 768.00/213.02 [6 6] [0] 768.00/213.02 ? [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [matrixMult'#1(::(@l, @ls), @m2)] = [6 0] @m2 + [0] 768.00/213.02 [6 6] [0] 768.00/213.02 ? [1] 768.00/213.02 [0] 768.00/213.02 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 768.00/213.02 768.00/213.02 [#natmult(#0(), @y)] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#natmult(#s(@x), @y)] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#add(#pos(@y), #natmult(@x, @y))] 768.00/213.02 768.00/213.02 [split#2(nil(), @ls)] = [1 0] @ls + [1] 768.00/213.02 [1 0] [1] 768.00/213.02 >= [1] 768.00/213.02 [0] 768.00/213.02 = [tuple#2(nil(), nil())] 768.00/213.02 768.00/213.02 [split#2(::(@x, @xs), @ls)] = [1 0] @x + [1 0] @xs + [1 0] @ls + [2] 768.00/213.02 [1 0] [1 0] [1 0] [2] 768.00/213.02 >= [0 0] @x + [1 0] @xs + [1 0] @ls + [2] 768.00/213.02 [1 0] [1 0] [1 0] [2] 768.00/213.02 = [split#3(split(@ls), @x, @xs)] 768.00/213.02 768.00/213.02 [mkBase(@m)] = [1 0] @m + [0] 768.00/213.02 [0 0] [4] 768.00/213.02 >= [1 0] @m + [0] 768.00/213.02 [0 0] [4] 768.00/213.02 = [mkBase#1(@m)] 768.00/213.02 768.00/213.02 [makeBase(@m)] = [4 0] @m + [0] 768.00/213.02 [4 0] [4] 768.00/213.02 >= [4 0] @m + [0] 768.00/213.02 [0 0] [4] 768.00/213.02 = [makeBase#1(@m)] 768.00/213.02 768.00/213.02 [mult#1(nil(), @l2)] = [6 0] @l2 + [0] 768.00/213.02 [4 6] [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#abs(#0())] 768.00/213.02 768.00/213.02 [mult#1(::(@x, @xs), @l2)] = [6 0] @l2 + [0] 768.00/213.02 [4 6] [0] 768.00/213.02 ? [6 0] @x + [6 0] @xs + [0] 768.00/213.02 [6 6] [6 6] [0] 768.00/213.02 = [mult#2(@l2, @x, @xs)] 768.00/213.02 768.00/213.02 [lineMult#1(nil(), @l)] = [6 0] @l + [0] 768.00/213.02 [6 6] [0] 768.00/213.02 ? [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [lineMult#1(::(@x, @xs), @l)] = [6 0] @l + [0] 768.00/213.02 [6 6] [0] 768.00/213.02 ? [1] 768.00/213.02 [0] 768.00/213.02 = [::(mult(@l, @x), lineMult(@l, @xs))] 768.00/213.02 768.00/213.02 [#mult(#neg(@x), #neg(@y))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(#natmult(@x, @y))] 768.00/213.02 768.00/213.02 [#mult(#neg(@x), #pos(@y))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#neg(#natmult(@x, @y))] 768.00/213.02 768.00/213.02 [#mult(#neg(@x), #0())] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#mult(#pos(@x), #neg(@y))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#neg(#natmult(@x, @y))] 768.00/213.02 768.00/213.02 [#mult(#pos(@x), #pos(@y))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(#natmult(@x, @y))] 768.00/213.02 768.00/213.02 [#mult(#pos(@x), #0())] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#mult(#0(), #neg(@y))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#mult(#0(), #pos(@y))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#mult(#0(), #0())] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [attach#2(nil(), @x, @xs)] = [1 0] @x + [1 0] @xs + [1] 768.00/213.02 [0 0] [0 0] [2] 768.00/213.02 > [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [attach#2(::(@l, @ls), @x, @xs)] = [1 0] @x + [1 0] @xs + [1 0] @l + [1 0] @ls + [2] 768.00/213.02 [0 0] [0 0] [0 0] [0 0] [2] 768.00/213.02 >= [1 0] @x + [1 0] @xs + [1 0] @l + [1 0] @ls + [2] 768.00/213.02 [0 0] [0 0] [0 0] [0 0] [0] 768.00/213.02 = [::(::(@x, @l), attach(@xs, @ls))] 768.00/213.02 768.00/213.02 [#succ(#neg(#s(#0())))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#succ(#neg(#s(#s(@x))))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#neg(#s(@x))] 768.00/213.02 768.00/213.02 [#succ(#pos(#s(@x)))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(#s(#s(@x)))] 768.00/213.02 768.00/213.02 [#succ(#0())] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(#s(#0()))] 768.00/213.02 768.00/213.02 [makeBase#1(nil())] = [0] 768.00/213.02 [4] 768.00/213.02 >= [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [makeBase#1(::(@l, @m'))] = [4 0] @l + [4 0] @m' + [4] 768.00/213.02 [0 0] [0 0] [4] 768.00/213.02 > [1 0] @l + [0] 768.00/213.02 [0 0] [4] 768.00/213.02 = [mkBase(@l)] 768.00/213.02 768.00/213.02 [matrixMult(@m1, @m2)] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 768.00/213.02 768.00/213.02 [#abs(#neg(@x))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(@x)] 768.00/213.02 768.00/213.02 [#abs(#pos(@x))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(@x)] 768.00/213.02 768.00/213.02 [#abs(#0())] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#abs(#s(@x))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(#s(@x))] 768.00/213.02 768.00/213.02 [lineMult(@l, @m2)] = [0] 768.00/213.02 [0] 768.00/213.02 ? [6 0] @l + [0] 768.00/213.02 [6 6] [0] 768.00/213.02 = [lineMult#1(@m2, @l)] 768.00/213.02 768.00/213.02 [transpose#1(nil(), @m)] = [2 4] @m + [0] 768.00/213.02 [0 0] [6] 768.00/213.02 >= [0] 768.00/213.02 [2] 768.00/213.02 = [nil()] 768.00/213.02 768.00/213.02 [transpose#1(::(@xs, @xss), @m)] = [2 4] @m + [0 0] @xs + [0 0] @xss + [0] 768.00/213.02 [0 0] [2 0] [2 0] [8] 768.00/213.02 >= [2 4] @m + [0] 768.00/213.02 [0 0] [2] 768.00/213.02 = [transpose#2(split(@m))] 768.00/213.02 768.00/213.02 [split#3(tuple#2(@ys, @m'), @x, @xs)] = [0 0] @x + [1 0] @xs + [1 0] @m' + [1 0] @ys + [2] 768.00/213.02 [1 0] [1 0] [1 0] [1 0] [2] 768.00/213.02 >= [0 0] @x + [1 0] @xs + [1 0] @m' + [0 0] @ys + [2] 768.00/213.02 [1 0] [1 0] [1 0] [1 0] [2] 768.00/213.02 = [tuple#2(::(@x, @ys), ::(@xs, @m'))] 768.00/213.02 768.00/213.02 [#pred(#neg(#s(@x)))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#neg(#s(#s(@x)))] 768.00/213.02 768.00/213.02 [#pred(#pos(#s(#0())))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#0()] 768.00/213.02 768.00/213.02 [#pred(#pos(#s(#s(@x))))] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#pos(#s(@x))] 768.00/213.02 768.00/213.02 [#pred(#0())] = [0] 768.00/213.02 [0] 768.00/213.02 >= [0] 768.00/213.02 [0] 768.00/213.02 = [#neg(#s(#0()))] 768.00/213.02 768.00/213.02 [matrixMultList^#(@acc, @mm)] = [5 0] @mm + [0] 768.00/213.02 [0 0] [0] 768.00/213.02 >= [5 0] @mm + [0] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_2(matrixMultList#1^#(@mm, @acc))] 768.00/213.02 768.00/213.02 [matrixMultList#1^#(::(@m, @ms), @acc)] = [5 0] @m + [0 0] @acc + [5 0] @ms + [5] 768.00/213.02 [0 0] [0 4] [0 0] [0] 768.00/213.02 > [5 0] @ms + [3] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_3(matrixMultList^#(matrixMult(@acc, @m), @ms))] 768.00/213.02 768.00/213.02 [matrixMultList#1^#(::(@m, @ms), @acc)] = [5 0] @m + [0 0] @acc + [5 0] @ms + [5] 768.00/213.02 [0 0] [0 4] [0 0] [0] 768.00/213.02 > [5 0] @m + [2] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_4(matrixMult^#(@acc, @m))] 768.00/213.02 768.00/213.02 [matrixMult3^#(@m1, @m2, @m3)] = [7 7] @m2 + [7 7] @m1 + [7 7] @m3 + [7] 768.00/213.02 [7 7] [7 7] [7 7] [7] 768.00/213.02 > [5 0] @m2 + [4] 768.00/213.02 [0 0] [7] 768.00/213.02 = [c_5(matrixMult^#(@m1, @m2))] 768.00/213.02 768.00/213.02 [matrixMult3^#(@m1, @m2, @m3)] = [7 7] @m2 + [7 7] @m1 + [7 7] @m3 + [7] 768.00/213.02 [7 7] [7 7] [7 7] [7] 768.00/213.02 > [5 0] @m3 + [4] 768.00/213.02 [0 0] [7] 768.00/213.02 = [c_6(matrixMult^#(matrixMult(@m1, @m2), @m3))] 768.00/213.02 768.00/213.02 [matrixMult^#(@m1, @m2)] = [5 0] @m2 + [1] 768.00/213.02 [0 0] [0] 768.00/213.02 >= [5 0] @m2 + [1] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_7(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))))] 768.00/213.02 768.00/213.02 [matrixMult'^#(@m1, @m2)] = [1 0] @m2 + [0 0] @m1 + [1] 768.00/213.02 [0 4] [4 4] [0] 768.00/213.02 >= [1 0] @m2 + [1] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_8(matrixMult'#1^#(@m1, @m2))] 768.00/213.02 768.00/213.02 [matrixMult'#1^#(::(@l, @ls), @m2)] = [1 0] @m2 + [1] 768.00/213.02 [4 0] [0] 768.00/213.02 >= [1 0] @m2 + [1] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_9(matrixMult'^#(@ls, @m2))] 768.00/213.02 768.00/213.02 [matrixMult'#1^#(::(@l, @ls), @m2)] = [1 0] @m2 + [1] 768.00/213.02 [4 0] [0] 768.00/213.02 > [1 0] @m2 + [0] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_10(lineMult^#(@l, @m2))] 768.00/213.02 768.00/213.02 [lineMult^#(@l, @m2)] = [0 0] @l + [1 0] @m2 + [0] 768.00/213.02 [4 4] [4 4] [0] 768.00/213.02 >= [1 0] @m2 + [0] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_1(lineMult#1^#(@m2, @l))] 768.00/213.02 768.00/213.02 [matrixMultOld^#(@m1, @m2)] = [7 7] @m2 + [7 7] @m1 + [7] 768.00/213.02 [7 7] [7 7] [7] 768.00/213.02 > [2 4] @m2 + [4] 768.00/213.02 [0 0] [7] 768.00/213.02 = [c_11(matrixMult'^#(@m1, transpose(@m2)))] 768.00/213.02 768.00/213.02 [lineMult#1^#(::(@x, @xs), @l)] = [1 0] @x + [1 0] @xs + [0 0] @l + [1] 768.00/213.02 [0 0] [0 0] [4 0] [0] 768.00/213.02 > [1 0] @xs + [0] 768.00/213.02 [0 0] [0] 768.00/213.02 = [c_12(lineMult^#(@l, @xs))] 768.00/213.02 768.00/213.02 768.00/213.02 We return to the main proof. Consider the set of all dependency 768.00/213.02 pairs 768.00/213.02 768.00/213.02 : 768.00/213.02 { 1: lineMult^#(@l, @m2) -> c_1(lineMult#1^#(@m2, @l)) 768.00/213.02 , 2: matrixMultList^#(@acc, @mm) -> 768.00/213.02 c_2(matrixMultList#1^#(@mm, @acc)) 768.00/213.02 , 3: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.02 c_3(matrixMultList^#(matrixMult(@acc, @m), @ms)) 768.00/213.02 , 4: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.02 c_4(matrixMult^#(@acc, @m)) 768.00/213.02 , 5: matrixMult3^#(@m1, @m2, @m3) -> c_5(matrixMult^#(@m1, @m2)) 768.00/213.02 , 6: matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.02 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3)) 768.00/213.02 , 7: matrixMult^#(@m1, @m2) -> 768.00/213.02 c_7(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 768.00/213.02 , 8: matrixMult'^#(@m1, @m2) -> c_8(matrixMult'#1^#(@m1, @m2)) 768.00/213.02 , 9: matrixMult'#1^#(::(@l, @ls), @m2) -> 768.00/213.02 c_9(matrixMult'^#(@ls, @m2)) 768.00/213.02 , 10: matrixMult'#1^#(::(@l, @ls), @m2) -> 768.00/213.02 c_10(lineMult^#(@l, @m2)) 768.00/213.02 , 11: matrixMultOld^#(@m1, @m2) -> 768.00/213.02 c_11(matrixMult'^#(@m1, transpose(@m2))) 768.00/213.02 , 12: lineMult#1^#(::(@x, @xs), @l) -> c_12(lineMult^#(@l, @xs)) } 768.00/213.02 768.00/213.02 Processor 'matrix interpretation of dimension 2' induces the 768.00/213.02 complexity certificate YES(?,O(n^1)) on application of dependency 768.00/213.02 pairs {3,4,5,6,10,11,12}. These cover all (indirect) predecessors 768.00/213.02 of dependency pairs {1,2,3,4,5,6,7,10,11,12}, their number of 768.00/213.02 application is equally bounded. The dependency pairs are shifted 768.00/213.02 into the weak component. 768.00/213.02 768.00/213.02 We are left with following problem, upon which TcT provides the 768.00/213.02 certificate YES(O(1),O(1)). 768.00/213.02 768.00/213.02 Weak DPs: 768.00/213.02 { matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 768.00/213.02 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.02 c_3(matrixMultList^#(matrixMult(@acc, @m), @ms)) 768.00/213.02 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.02 c_4(matrixMult^#(@acc, @m)) 768.00/213.02 , matrixMult3^#(@m1, @m2, @m3) -> c_5(matrixMult^#(@m1, @m2)) 768.00/213.02 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.02 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3)) 768.00/213.02 , matrixMult^#(@m1, @m2) -> 768.00/213.02 c_7(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 768.00/213.02 , matrixMult'^#(@m1, @m2) -> c_8(matrixMult'#1^#(@m1, @m2)) 768.00/213.02 , matrixMult'#1^#(::(@l, @ls), @m2) -> c_9(matrixMult'^#(@ls, @m2)) 768.00/213.02 , matrixMult'#1^#(::(@l, @ls), @m2) -> c_10(lineMult^#(@l, @m2)) 768.00/213.02 , lineMult^#(@l, @m2) -> c_1(lineMult#1^#(@m2, @l)) 768.00/213.02 , matrixMultOld^#(@m1, @m2) -> 768.00/213.02 c_11(matrixMult'^#(@m1, transpose(@m2))) 768.00/213.02 , lineMult#1^#(::(@x, @xs), @l) -> c_12(lineMult^#(@l, @xs)) } 768.00/213.02 Weak Trs: 768.00/213.02 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.02 , split(@m) -> split#1(@m) 768.00/213.02 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.02 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.02 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.02 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.02 , #add(#0(), @y) -> @y 768.00/213.02 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.02 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.02 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.02 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.02 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.02 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.02 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.02 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.02 , +(@x, @y) -> #add(@x, @y) 768.00/213.02 , transAcc#1(nil(), @base) -> @base 768.00/213.02 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.02 attach(@l, transAcc(@m', @base)) 768.00/213.02 , *(@x, @y) -> #mult(@x, @y) 768.00/213.02 , mkBase#1(nil()) -> nil() 768.00/213.02 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.02 , transpose#3(nil(), @l) -> nil() 768.00/213.02 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.02 , attach#1(nil(), @m) -> nil() 768.00/213.02 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.02 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.02 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.02 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.02 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.02 , #natmult(#0(), @y) -> #0() 768.00/213.02 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.02 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.02 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.02 , mkBase(@m) -> mkBase#1(@m) 768.00/213.02 , makeBase(@m) -> makeBase#1(@m) 768.00/213.02 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.02 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.02 , lineMult#1(nil(), @l) -> nil() 768.00/213.02 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.02 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.02 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.02 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.02 , #mult(#neg(@x), #0()) -> #0() 768.00/213.02 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.02 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.02 , #mult(#pos(@x), #0()) -> #0() 768.00/213.02 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.02 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.02 , #mult(#0(), #0()) -> #0() 768.00/213.02 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.02 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.02 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.02 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.02 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.02 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.02 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.02 , makeBase#1(nil()) -> nil() 768.00/213.02 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.02 , matrixMult(@m1, @m2) -> 768.00/213.02 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.02 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.02 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.02 , #abs(#0()) -> #0() 768.00/213.02 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.02 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.02 , transpose#1(nil(), @m) -> nil() 768.00/213.02 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.02 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.02 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.02 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.02 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.02 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.02 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.02 Obligation: 768.00/213.02 innermost runtime complexity 768.00/213.02 Answer: 768.00/213.02 YES(O(1),O(1)) 768.00/213.02 768.00/213.02 The following weak DPs constitute a sub-graph of the DG that is 768.00/213.02 closed under successors. The DPs are removed. 768.00/213.02 768.00/213.02 { matrixMultList^#(@acc, @mm) -> c_2(matrixMultList#1^#(@mm, @acc)) 768.00/213.02 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.02 c_3(matrixMultList^#(matrixMult(@acc, @m), @ms)) 768.00/213.02 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.02 c_4(matrixMult^#(@acc, @m)) 768.00/213.02 , matrixMult3^#(@m1, @m2, @m3) -> c_5(matrixMult^#(@m1, @m2)) 768.00/213.02 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.02 c_6(matrixMult^#(matrixMult(@m1, @m2), @m3)) 768.00/213.02 , matrixMult^#(@m1, @m2) -> 768.00/213.02 c_7(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2)))) 768.00/213.02 , matrixMult'^#(@m1, @m2) -> c_8(matrixMult'#1^#(@m1, @m2)) 768.00/213.02 , matrixMult'#1^#(::(@l, @ls), @m2) -> c_9(matrixMult'^#(@ls, @m2)) 768.00/213.02 , matrixMult'#1^#(::(@l, @ls), @m2) -> c_10(lineMult^#(@l, @m2)) 768.00/213.02 , lineMult^#(@l, @m2) -> c_1(lineMult#1^#(@m2, @l)) 768.00/213.02 , matrixMultOld^#(@m1, @m2) -> 768.00/213.02 c_11(matrixMult'^#(@m1, transpose(@m2))) 768.00/213.02 , lineMult#1^#(::(@x, @xs), @l) -> c_12(lineMult^#(@l, @xs)) } 768.00/213.02 768.00/213.02 We are left with following problem, upon which TcT provides the 768.00/213.02 certificate YES(O(1),O(1)). 768.00/213.02 768.00/213.02 Weak Trs: 768.00/213.02 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.02 , split(@m) -> split#1(@m) 768.00/213.02 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.02 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.02 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.02 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.02 , #add(#0(), @y) -> @y 768.00/213.02 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.02 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.02 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.02 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.02 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.02 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.02 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.02 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.02 , +(@x, @y) -> #add(@x, @y) 768.00/213.02 , transAcc#1(nil(), @base) -> @base 768.00/213.02 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.03 attach(@l, transAcc(@m', @base)) 768.00/213.03 , *(@x, @y) -> #mult(@x, @y) 768.00/213.03 , mkBase#1(nil()) -> nil() 768.00/213.03 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.03 , transpose#3(nil(), @l) -> nil() 768.00/213.03 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.03 , attach#1(nil(), @m) -> nil() 768.00/213.03 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.03 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.03 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.03 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.03 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.03 , #natmult(#0(), @y) -> #0() 768.00/213.03 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.03 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.03 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.03 , mkBase(@m) -> mkBase#1(@m) 768.00/213.03 , makeBase(@m) -> makeBase#1(@m) 768.00/213.03 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.03 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.03 , lineMult#1(nil(), @l) -> nil() 768.00/213.03 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.03 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.03 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #0()) -> #0() 768.00/213.03 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #0()) -> #0() 768.00/213.03 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.03 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.03 , #mult(#0(), #0()) -> #0() 768.00/213.03 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.03 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.03 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.03 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.03 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.03 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.03 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.03 , makeBase#1(nil()) -> nil() 768.00/213.03 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.03 , matrixMult(@m1, @m2) -> 768.00/213.03 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.03 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.03 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.03 , #abs(#0()) -> #0() 768.00/213.03 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.03 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.03 , transpose#1(nil(), @m) -> nil() 768.00/213.03 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.03 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.03 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.03 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.03 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.03 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.03 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.03 Obligation: 768.00/213.03 innermost runtime complexity 768.00/213.03 Answer: 768.00/213.03 YES(O(1),O(1)) 768.00/213.03 768.00/213.03 No rule is usable, rules are removed from the input problem. 768.00/213.03 768.00/213.03 We are left with following problem, upon which TcT provides the 768.00/213.03 certificate YES(O(1),O(1)). 768.00/213.03 768.00/213.03 Rules: Empty 768.00/213.03 Obligation: 768.00/213.03 innermost runtime complexity 768.00/213.03 Answer: 768.00/213.03 YES(O(1),O(1)) 768.00/213.03 768.00/213.03 Empty rules are trivially bounded 768.00/213.03 768.00/213.03 S) We are left with following problem, upon which TcT provides the 768.00/213.03 certificate YES(O(1),O(n^1)). 768.00/213.03 768.00/213.03 Strict DPs: 768.00/213.03 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.03 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.03 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.03 matrixMult^#(@acc, @m)) 768.00/213.03 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.03 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.03 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.03 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.03 , transpose'^#(@m) -> 768.00/213.03 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.03 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 768.00/213.03 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 768.00/213.03 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 768.00/213.03 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 768.00/213.03 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.03 c_16(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.03 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.03 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.03 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 768.00/213.03 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 768.00/213.03 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 768.00/213.03 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 768.00/213.03 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 768.00/213.03 , matrixMultOld^#(@m1, @m2) -> 768.00/213.03 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 768.00/213.03 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 768.00/213.03 Weak DPs: 768.00/213.03 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.03 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.03 matrixMult^#(@m1, @m2)) 768.00/213.03 , matrixMult^#(@m1, @m2) -> 768.00/213.03 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 768.00/213.03 transAcc^#(@m2, makeBase(@m2)), 768.00/213.03 makeBase^#(@m2)) 768.00/213.03 , mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 768.00/213.03 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 768.00/213.03 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 768.00/213.03 , matrixMult'#1^#(::(@l, @ls), @m2) -> 768.00/213.03 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 768.00/213.03 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 768.00/213.03 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 768.00/213.03 , lineMult#1^#(::(@x, @xs), @l) -> 768.00/213.03 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 768.00/213.03 Weak Trs: 768.00/213.03 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.03 , split(@m) -> split#1(@m) 768.00/213.03 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.03 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.03 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#0(), @y) -> @y 768.00/213.03 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.03 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.03 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.03 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.03 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.03 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.03 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.03 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.03 , +(@x, @y) -> #add(@x, @y) 768.00/213.03 , transAcc#1(nil(), @base) -> @base 768.00/213.03 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.03 attach(@l, transAcc(@m', @base)) 768.00/213.03 , *(@x, @y) -> #mult(@x, @y) 768.00/213.03 , mkBase#1(nil()) -> nil() 768.00/213.03 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.03 , transpose#3(nil(), @l) -> nil() 768.00/213.03 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.03 , attach#1(nil(), @m) -> nil() 768.00/213.03 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.03 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.03 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.03 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.03 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.03 , #natmult(#0(), @y) -> #0() 768.00/213.03 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.03 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.03 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.03 , mkBase(@m) -> mkBase#1(@m) 768.00/213.03 , makeBase(@m) -> makeBase#1(@m) 768.00/213.03 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.03 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.03 , lineMult#1(nil(), @l) -> nil() 768.00/213.03 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.03 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.03 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #0()) -> #0() 768.00/213.03 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #0()) -> #0() 768.00/213.03 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.03 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.03 , #mult(#0(), #0()) -> #0() 768.00/213.03 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.03 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.03 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.03 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.03 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.03 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.03 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.03 , makeBase#1(nil()) -> nil() 768.00/213.03 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.03 , matrixMult(@m1, @m2) -> 768.00/213.03 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.03 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.03 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.03 , #abs(#0()) -> #0() 768.00/213.03 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.03 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.03 , transpose#1(nil(), @m) -> nil() 768.00/213.03 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.03 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.03 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.03 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.03 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.03 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.03 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.03 Obligation: 768.00/213.03 innermost runtime complexity 768.00/213.03 Answer: 768.00/213.03 YES(O(1),O(n^1)) 768.00/213.03 768.00/213.03 The following weak DPs constitute a sub-graph of the DG that is 768.00/213.03 closed under successors. The DPs are removed. 768.00/213.03 768.00/213.03 { mult#2^#(::(@y, @ys), @x, @xs) -> c_9(mult^#(@xs, @ys)) 768.00/213.03 , mult^#(@l1, @l2) -> c_10(mult#1^#(@l1, @l2)) 768.00/213.03 , matrixMult'^#(@m1, @m2) -> c_17(matrixMult'#1^#(@m1, @m2)) 768.00/213.03 , matrixMult'#1^#(::(@l, @ls), @m2) -> 768.00/213.03 c_18(lineMult^#(@l, @m2), matrixMult'^#(@ls, @m2)) 768.00/213.03 , mult#1^#(::(@x, @xs), @l2) -> c_20(mult#2^#(@l2, @x, @xs)) 768.00/213.03 , lineMult^#(@l, @m2) -> c_26(lineMult#1^#(@m2, @l)) 768.00/213.03 , lineMult#1^#(::(@x, @xs), @l) -> 768.00/213.03 c_29(mult^#(@l, @x), lineMult^#(@l, @xs)) } 768.00/213.03 768.00/213.03 We are left with following problem, upon which TcT provides the 768.00/213.03 certificate YES(O(1),O(n^1)). 768.00/213.03 768.00/213.03 Strict DPs: 768.00/213.03 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.03 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.03 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.03 matrixMult^#(@acc, @m)) 768.00/213.03 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.03 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.03 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.03 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.03 , transpose'^#(@m) -> 768.00/213.03 c_11(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.03 , transAcc^#(@m, @base) -> c_12(transAcc#1^#(@m, @base)) 768.00/213.03 , makeBase^#(@m) -> c_13(makeBase#1^#(@m)) 768.00/213.03 , split#2^#(::(@x, @xs), @ls) -> c_14(split^#(@ls)) 768.00/213.03 , transpose^#(@m) -> c_15(transpose#1^#(@m, @m)) 768.00/213.03 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.03 c_16(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.03 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.03 c_19(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.03 , mkBase#1^#(::(@l, @m')) -> c_21(mkBase^#(@m')) 768.00/213.03 , mkBase^#(@m) -> c_22(mkBase#1^#(@m)) 768.00/213.03 , transpose#3^#(::(@y, @ys), @l) -> c_23(transpose^#(::(@y, @ys))) 768.00/213.03 , attach#2^#(::(@l, @ls), @x, @xs) -> c_24(attach^#(@xs, @ls)) 768.00/213.03 , transpose#2^#(tuple#2(@l, @m')) -> c_25(transpose#3^#(@m', @l)) 768.00/213.03 , matrixMultOld^#(@m1, @m2) -> 768.00/213.03 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) 768.00/213.03 , makeBase#1^#(::(@l, @m')) -> c_28(mkBase^#(@l)) } 768.00/213.03 Weak DPs: 768.00/213.03 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.03 c_7(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.03 matrixMult^#(@m1, @m2)) 768.00/213.03 , matrixMult^#(@m1, @m2) -> 768.00/213.03 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 768.00/213.03 transAcc^#(@m2, makeBase(@m2)), 768.00/213.03 makeBase^#(@m2)) } 768.00/213.03 Weak Trs: 768.00/213.03 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.03 , split(@m) -> split#1(@m) 768.00/213.03 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.03 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.03 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#0(), @y) -> @y 768.00/213.03 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.03 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.03 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.03 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.03 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.03 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.03 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.03 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.03 , +(@x, @y) -> #add(@x, @y) 768.00/213.03 , transAcc#1(nil(), @base) -> @base 768.00/213.03 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.03 attach(@l, transAcc(@m', @base)) 768.00/213.03 , *(@x, @y) -> #mult(@x, @y) 768.00/213.03 , mkBase#1(nil()) -> nil() 768.00/213.03 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.03 , transpose#3(nil(), @l) -> nil() 768.00/213.03 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.03 , attach#1(nil(), @m) -> nil() 768.00/213.03 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.03 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.03 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.03 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.03 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.03 , #natmult(#0(), @y) -> #0() 768.00/213.03 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.03 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.03 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.03 , mkBase(@m) -> mkBase#1(@m) 768.00/213.03 , makeBase(@m) -> makeBase#1(@m) 768.00/213.03 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.03 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.03 , lineMult#1(nil(), @l) -> nil() 768.00/213.03 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.03 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.03 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #0()) -> #0() 768.00/213.03 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #0()) -> #0() 768.00/213.03 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.03 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.03 , #mult(#0(), #0()) -> #0() 768.00/213.03 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.03 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.03 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.03 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.03 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.03 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.03 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.03 , makeBase#1(nil()) -> nil() 768.00/213.03 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.03 , matrixMult(@m1, @m2) -> 768.00/213.03 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.03 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.03 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.03 , #abs(#0()) -> #0() 768.00/213.03 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.03 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.03 , transpose#1(nil(), @m) -> nil() 768.00/213.03 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.03 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.03 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.03 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.03 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.03 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.03 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.03 Obligation: 768.00/213.03 innermost runtime complexity 768.00/213.03 Answer: 768.00/213.03 YES(O(1),O(n^1)) 768.00/213.03 768.00/213.03 Due to missing edges in the dependency-graph, the right-hand sides 768.00/213.03 of following rules could be simplified: 768.00/213.03 768.00/213.03 { matrixMult^#(@m1, @m2) -> 768.00/213.03 c_8(matrixMult'^#(@m1, transAcc(@m2, makeBase(@m2))), 768.00/213.03 transAcc^#(@m2, makeBase(@m2)), 768.00/213.03 makeBase^#(@m2)) 768.00/213.03 , matrixMultOld^#(@m1, @m2) -> 768.00/213.03 c_27(matrixMult'^#(@m1, transpose(@m2)), transpose^#(@m2)) } 768.00/213.03 768.00/213.03 We are left with following problem, upon which TcT provides the 768.00/213.03 certificate YES(O(1),O(n^1)). 768.00/213.03 768.00/213.03 Strict DPs: 768.00/213.03 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.03 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.03 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.03 matrixMult^#(@acc, @m)) 768.00/213.03 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.03 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.03 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.03 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.03 , transpose'^#(@m) -> 768.00/213.03 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.03 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.03 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.03 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.03 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.03 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.03 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.03 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.03 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.03 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.03 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.03 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.03 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.03 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.03 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) 768.00/213.03 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.03 Weak DPs: 768.00/213.03 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.03 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.03 matrixMult^#(@m1, @m2)) 768.00/213.03 , matrixMult^#(@m1, @m2) -> 768.00/213.03 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) } 768.00/213.03 Weak Trs: 768.00/213.03 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.03 , split(@m) -> split#1(@m) 768.00/213.03 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.03 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.03 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#0(), @y) -> @y 768.00/213.03 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.03 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.03 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.03 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.03 , transpose(@m) -> transpose#1(@m, @m) 768.00/213.03 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.03 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.03 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.03 , +(@x, @y) -> #add(@x, @y) 768.00/213.03 , transAcc#1(nil(), @base) -> @base 768.00/213.03 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.03 attach(@l, transAcc(@m', @base)) 768.00/213.03 , *(@x, @y) -> #mult(@x, @y) 768.00/213.03 , mkBase#1(nil()) -> nil() 768.00/213.03 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.03 , transpose#3(nil(), @l) -> nil() 768.00/213.03 , transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) 768.00/213.03 , attach#1(nil(), @m) -> nil() 768.00/213.03 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.03 , transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) 768.00/213.03 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.03 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.03 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.03 , #natmult(#0(), @y) -> #0() 768.00/213.03 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.03 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.03 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.03 , mkBase(@m) -> mkBase#1(@m) 768.00/213.03 , makeBase(@m) -> makeBase#1(@m) 768.00/213.03 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.03 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.03 , lineMult#1(nil(), @l) -> nil() 768.00/213.03 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.03 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.03 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #0()) -> #0() 768.00/213.03 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #0()) -> #0() 768.00/213.03 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.03 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.03 , #mult(#0(), #0()) -> #0() 768.00/213.03 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.03 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.03 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.03 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.03 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.03 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.03 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.03 , makeBase#1(nil()) -> nil() 768.00/213.03 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.03 , matrixMult(@m1, @m2) -> 768.00/213.03 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.03 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.03 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.03 , #abs(#0()) -> #0() 768.00/213.03 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.03 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.03 , transpose#1(nil(), @m) -> nil() 768.00/213.03 , transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) 768.00/213.03 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.03 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.03 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.03 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.03 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.03 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.03 Obligation: 768.00/213.03 innermost runtime complexity 768.00/213.03 Answer: 768.00/213.03 YES(O(1),O(n^1)) 768.00/213.03 768.00/213.03 We replace rewrite rules by usable rules: 768.00/213.03 768.00/213.03 Weak Usable Rules: 768.00/213.03 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.03 , split(@m) -> split#1(@m) 768.00/213.03 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.03 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.03 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.03 , #add(#0(), @y) -> @y 768.00/213.03 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.03 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.03 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.03 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.03 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.03 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.03 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.03 , +(@x, @y) -> #add(@x, @y) 768.00/213.03 , transAcc#1(nil(), @base) -> @base 768.00/213.03 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.03 attach(@l, transAcc(@m', @base)) 768.00/213.03 , *(@x, @y) -> #mult(@x, @y) 768.00/213.03 , mkBase#1(nil()) -> nil() 768.00/213.03 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.03 , attach#1(nil(), @m) -> nil() 768.00/213.03 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.03 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.03 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.03 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.03 , #natmult(#0(), @y) -> #0() 768.00/213.03 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.03 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.03 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.03 , mkBase(@m) -> mkBase#1(@m) 768.00/213.03 , makeBase(@m) -> makeBase#1(@m) 768.00/213.03 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.03 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.03 , lineMult#1(nil(), @l) -> nil() 768.00/213.03 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.03 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.03 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#neg(@x), #0()) -> #0() 768.00/213.03 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.03 , #mult(#pos(@x), #0()) -> #0() 768.00/213.03 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.03 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.03 , #mult(#0(), #0()) -> #0() 768.00/213.03 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.04 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.04 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.04 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.04 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.04 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.04 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.04 , makeBase#1(nil()) -> nil() 768.00/213.04 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.04 , matrixMult(@m1, @m2) -> 768.00/213.04 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.04 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.04 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.04 , #abs(#0()) -> #0() 768.00/213.04 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.04 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.04 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.04 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.04 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.04 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.04 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.04 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.04 768.00/213.04 We are left with following problem, upon which TcT provides the 768.00/213.04 certificate YES(O(1),O(n^1)). 768.00/213.04 768.00/213.04 Strict DPs: 768.00/213.04 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.04 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.04 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.04 matrixMult^#(@acc, @m)) 768.00/213.04 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.04 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.04 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.04 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.04 , transpose'^#(@m) -> 768.00/213.04 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.04 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.04 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.04 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.04 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.04 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.04 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.04 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.04 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.04 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.04 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.04 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.04 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.04 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.04 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) 768.00/213.04 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.04 Weak DPs: 768.00/213.04 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.04 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.04 matrixMult^#(@m1, @m2)) 768.00/213.04 , matrixMult^#(@m1, @m2) -> 768.00/213.04 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) } 768.00/213.04 Weak Trs: 768.00/213.04 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.04 , split(@m) -> split#1(@m) 768.00/213.04 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.04 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.04 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#0(), @y) -> @y 768.00/213.04 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.04 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.04 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.04 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.04 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.04 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.04 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.04 , +(@x, @y) -> #add(@x, @y) 768.00/213.04 , transAcc#1(nil(), @base) -> @base 768.00/213.04 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.04 attach(@l, transAcc(@m', @base)) 768.00/213.04 , *(@x, @y) -> #mult(@x, @y) 768.00/213.04 , mkBase#1(nil()) -> nil() 768.00/213.04 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.04 , attach#1(nil(), @m) -> nil() 768.00/213.04 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.04 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.04 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.04 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.04 , #natmult(#0(), @y) -> #0() 768.00/213.04 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.04 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.04 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.04 , mkBase(@m) -> mkBase#1(@m) 768.00/213.04 , makeBase(@m) -> makeBase#1(@m) 768.00/213.04 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.04 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.04 , lineMult#1(nil(), @l) -> nil() 768.00/213.04 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.04 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.04 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.04 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.04 , #mult(#neg(@x), #0()) -> #0() 768.00/213.04 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.04 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.04 , #mult(#pos(@x), #0()) -> #0() 768.00/213.04 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.04 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.04 , #mult(#0(), #0()) -> #0() 768.00/213.04 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.04 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.04 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.04 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.04 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.04 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.04 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.04 , makeBase#1(nil()) -> nil() 768.00/213.04 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.04 , matrixMult(@m1, @m2) -> 768.00/213.04 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.04 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.04 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.04 , #abs(#0()) -> #0() 768.00/213.04 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.04 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.04 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.04 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.04 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.04 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.04 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.04 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.04 Obligation: 768.00/213.04 innermost runtime complexity 768.00/213.04 Answer: 768.00/213.04 YES(O(1),O(n^1)) 768.00/213.04 768.00/213.04 We analyse the complexity of following sub-problems (R) and (S). 768.00/213.04 Problem (S) is obtained from the input problem by shifting strict 768.00/213.04 rules from (R) into the weak component: 768.00/213.04 768.00/213.04 Problem (R): 768.00/213.04 ------------ 768.00/213.04 Strict DPs: 768.00/213.04 { transpose'^#(@m) -> 768.00/213.04 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.04 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.04 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.04 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.04 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.04 Weak DPs: 768.00/213.04 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.04 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.04 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.04 matrixMult^#(@acc, @m)) 768.00/213.04 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.04 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.04 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.04 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.04 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.04 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.04 matrixMult^#(@m1, @m2)) 768.00/213.04 , matrixMult^#(@m1, @m2) -> 768.00/213.04 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.04 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.04 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.04 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.04 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.04 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.04 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.04 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.04 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.04 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.04 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.04 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.04 Weak Trs: 768.00/213.04 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.04 , split(@m) -> split#1(@m) 768.00/213.04 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.04 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.04 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#0(), @y) -> @y 768.00/213.04 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.04 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.04 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.04 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.04 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.04 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.04 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.04 , +(@x, @y) -> #add(@x, @y) 768.00/213.04 , transAcc#1(nil(), @base) -> @base 768.00/213.04 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.04 attach(@l, transAcc(@m', @base)) 768.00/213.04 , *(@x, @y) -> #mult(@x, @y) 768.00/213.04 , mkBase#1(nil()) -> nil() 768.00/213.04 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.04 , attach#1(nil(), @m) -> nil() 768.00/213.04 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.04 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.04 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.04 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.04 , #natmult(#0(), @y) -> #0() 768.00/213.04 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.04 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.04 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.04 , mkBase(@m) -> mkBase#1(@m) 768.00/213.04 , makeBase(@m) -> makeBase#1(@m) 768.00/213.04 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.04 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.04 , lineMult#1(nil(), @l) -> nil() 768.00/213.04 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.04 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.04 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.04 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.04 , #mult(#neg(@x), #0()) -> #0() 768.00/213.04 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.04 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.04 , #mult(#pos(@x), #0()) -> #0() 768.00/213.04 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.04 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.04 , #mult(#0(), #0()) -> #0() 768.00/213.04 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.04 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.04 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.04 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.04 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.04 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.04 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.04 , makeBase#1(nil()) -> nil() 768.00/213.04 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.04 , matrixMult(@m1, @m2) -> 768.00/213.04 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.04 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.04 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.04 , #abs(#0()) -> #0() 768.00/213.04 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.04 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.04 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.04 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.04 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.04 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.04 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.04 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.04 StartTerms: basic terms 768.00/213.04 Strategy: innermost 768.00/213.04 768.00/213.04 Problem (S): 768.00/213.04 ------------ 768.00/213.04 Strict DPs: 768.00/213.04 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.04 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.04 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.04 matrixMult^#(@acc, @m)) 768.00/213.04 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.04 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.04 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.04 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.04 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.04 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.04 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.04 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.04 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.04 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.04 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.04 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.04 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.04 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.04 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.04 Weak DPs: 768.00/213.04 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.04 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.04 matrixMult^#(@m1, @m2)) 768.00/213.04 , matrixMult^#(@m1, @m2) -> 768.00/213.04 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.04 , transpose'^#(@m) -> 768.00/213.04 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.04 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.04 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.04 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.04 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.04 Weak Trs: 768.00/213.04 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.04 , split(@m) -> split#1(@m) 768.00/213.04 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.04 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.04 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#0(), @y) -> @y 768.00/213.04 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.04 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.04 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.04 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.04 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.04 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.04 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.04 , +(@x, @y) -> #add(@x, @y) 768.00/213.04 , transAcc#1(nil(), @base) -> @base 768.00/213.04 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.04 attach(@l, transAcc(@m', @base)) 768.00/213.04 , *(@x, @y) -> #mult(@x, @y) 768.00/213.04 , mkBase#1(nil()) -> nil() 768.00/213.04 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.04 , attach#1(nil(), @m) -> nil() 768.00/213.04 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.04 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.04 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.04 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.04 , #natmult(#0(), @y) -> #0() 768.00/213.04 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.04 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.04 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.04 , mkBase(@m) -> mkBase#1(@m) 768.00/213.04 , makeBase(@m) -> makeBase#1(@m) 768.00/213.04 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.04 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.04 , lineMult#1(nil(), @l) -> nil() 768.00/213.04 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.04 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.04 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.04 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.04 , #mult(#neg(@x), #0()) -> #0() 768.00/213.04 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.04 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.04 , #mult(#pos(@x), #0()) -> #0() 768.00/213.04 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.04 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.04 , #mult(#0(), #0()) -> #0() 768.00/213.04 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.04 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.04 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.04 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.04 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.04 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.04 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.04 , makeBase#1(nil()) -> nil() 768.00/213.04 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.04 , matrixMult(@m1, @m2) -> 768.00/213.04 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.04 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.04 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.04 , #abs(#0()) -> #0() 768.00/213.04 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.04 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.04 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.04 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.04 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.04 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.04 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.04 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.04 StartTerms: basic terms 768.00/213.04 Strategy: innermost 768.00/213.04 768.00/213.04 Overall, the transformation results in the following sub-problem(s): 768.00/213.04 768.00/213.04 Generated new problems: 768.00/213.04 ----------------------- 768.00/213.04 R) Strict DPs: 768.00/213.04 { transpose'^#(@m) -> 768.00/213.04 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.04 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.04 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.04 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.04 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.04 Weak DPs: 768.00/213.04 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.04 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.04 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.04 matrixMult^#(@acc, @m)) 768.00/213.04 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.04 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.04 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.04 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.04 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.04 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.04 matrixMult^#(@m1, @m2)) 768.00/213.04 , matrixMult^#(@m1, @m2) -> 768.00/213.04 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.04 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.04 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.04 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.04 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.04 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.04 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.04 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.04 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.04 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.04 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.04 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.04 Weak Trs: 768.00/213.04 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.04 , split(@m) -> split#1(@m) 768.00/213.04 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.04 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.04 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.04 , #add(#0(), @y) -> @y 768.00/213.04 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.04 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.04 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.05 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.05 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.05 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.05 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.05 , +(@x, @y) -> #add(@x, @y) 768.00/213.05 , transAcc#1(nil(), @base) -> @base 768.00/213.05 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.05 attach(@l, transAcc(@m', @base)) 768.00/213.05 , *(@x, @y) -> #mult(@x, @y) 768.00/213.05 , mkBase#1(nil()) -> nil() 768.00/213.05 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.05 , attach#1(nil(), @m) -> nil() 768.00/213.05 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.05 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.05 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.05 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.05 , #natmult(#0(), @y) -> #0() 768.00/213.05 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.05 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.05 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.05 , mkBase(@m) -> mkBase#1(@m) 768.00/213.05 , makeBase(@m) -> makeBase#1(@m) 768.00/213.05 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.05 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.05 , lineMult#1(nil(), @l) -> nil() 768.00/213.05 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.05 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.05 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #0()) -> #0() 768.00/213.05 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #0()) -> #0() 768.00/213.05 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.05 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.05 , #mult(#0(), #0()) -> #0() 768.00/213.05 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.05 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.05 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.05 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.05 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.05 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.05 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.05 , makeBase#1(nil()) -> nil() 768.00/213.05 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.05 , matrixMult(@m1, @m2) -> 768.00/213.05 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.05 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.05 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.05 , #abs(#0()) -> #0() 768.00/213.05 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.05 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.05 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.05 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.05 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.05 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.05 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.05 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.05 StartTerms: basic terms 768.00/213.05 Strategy: innermost 768.00/213.05 768.00/213.05 This problem was proven YES(O(1),O(n^1)). 768.00/213.05 768.00/213.05 S) Strict DPs: 768.00/213.05 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.05 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.05 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.05 matrixMult^#(@acc, @m)) 768.00/213.05 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.05 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.05 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.05 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.05 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.05 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.05 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.05 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.05 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.05 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.05 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.05 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.05 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.05 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.05 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.05 Weak DPs: 768.00/213.05 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.05 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.05 matrixMult^#(@m1, @m2)) 768.00/213.05 , matrixMult^#(@m1, @m2) -> 768.00/213.05 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.05 , transpose'^#(@m) -> 768.00/213.05 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.05 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.05 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.05 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.05 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.05 Weak Trs: 768.00/213.05 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.05 , split(@m) -> split#1(@m) 768.00/213.05 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.05 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.05 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#0(), @y) -> @y 768.00/213.05 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.05 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.05 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.05 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.05 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.05 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.05 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.05 , +(@x, @y) -> #add(@x, @y) 768.00/213.05 , transAcc#1(nil(), @base) -> @base 768.00/213.05 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.05 attach(@l, transAcc(@m', @base)) 768.00/213.05 , *(@x, @y) -> #mult(@x, @y) 768.00/213.05 , mkBase#1(nil()) -> nil() 768.00/213.05 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.05 , attach#1(nil(), @m) -> nil() 768.00/213.05 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.05 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.05 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.05 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.05 , #natmult(#0(), @y) -> #0() 768.00/213.05 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.05 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.05 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.05 , mkBase(@m) -> mkBase#1(@m) 768.00/213.05 , makeBase(@m) -> makeBase#1(@m) 768.00/213.05 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.05 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.05 , lineMult#1(nil(), @l) -> nil() 768.00/213.05 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.05 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.05 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #0()) -> #0() 768.00/213.05 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #0()) -> #0() 768.00/213.05 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.05 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.05 , #mult(#0(), #0()) -> #0() 768.00/213.05 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.05 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.05 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.05 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.05 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.05 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.05 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.05 , makeBase#1(nil()) -> nil() 768.00/213.05 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.05 , matrixMult(@m1, @m2) -> 768.00/213.05 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.05 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.05 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.05 , #abs(#0()) -> #0() 768.00/213.05 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.05 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.05 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.05 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.05 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.05 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.05 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.05 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.05 StartTerms: basic terms 768.00/213.05 Strategy: innermost 768.00/213.05 768.00/213.05 This problem was proven YES(O(1),O(n^1)). 768.00/213.05 768.00/213.05 768.00/213.05 Proofs for generated problems: 768.00/213.05 ------------------------------ 768.00/213.05 R) We are left with following problem, upon which TcT provides the 768.00/213.05 certificate YES(O(1),O(n^1)). 768.00/213.05 768.00/213.05 Strict DPs: 768.00/213.05 { transpose'^#(@m) -> 768.00/213.05 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.05 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.05 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.05 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.05 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.05 Weak DPs: 768.00/213.05 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.05 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.05 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.05 matrixMult^#(@acc, @m)) 768.00/213.05 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.05 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.05 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.05 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.05 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.05 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.05 matrixMult^#(@m1, @m2)) 768.00/213.05 , matrixMult^#(@m1, @m2) -> 768.00/213.05 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.05 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.05 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.05 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.05 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.05 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.05 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.05 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.05 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.05 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.05 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.05 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.05 Weak Trs: 768.00/213.05 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.05 , split(@m) -> split#1(@m) 768.00/213.05 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.05 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.05 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#0(), @y) -> @y 768.00/213.05 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.05 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.05 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.05 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.05 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.05 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.05 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.05 , +(@x, @y) -> #add(@x, @y) 768.00/213.05 , transAcc#1(nil(), @base) -> @base 768.00/213.05 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.05 attach(@l, transAcc(@m', @base)) 768.00/213.05 , *(@x, @y) -> #mult(@x, @y) 768.00/213.05 , mkBase#1(nil()) -> nil() 768.00/213.05 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.05 , attach#1(nil(), @m) -> nil() 768.00/213.05 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.05 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.05 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.05 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.05 , #natmult(#0(), @y) -> #0() 768.00/213.05 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.05 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.05 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.05 , mkBase(@m) -> mkBase#1(@m) 768.00/213.05 , makeBase(@m) -> makeBase#1(@m) 768.00/213.05 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.05 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.05 , lineMult#1(nil(), @l) -> nil() 768.00/213.05 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.05 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.05 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #0()) -> #0() 768.00/213.05 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #0()) -> #0() 768.00/213.05 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.05 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.05 , #mult(#0(), #0()) -> #0() 768.00/213.05 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.05 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.05 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.05 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.05 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.05 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.05 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.05 , makeBase#1(nil()) -> nil() 768.00/213.05 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.05 , matrixMult(@m1, @m2) -> 768.00/213.05 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.05 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.05 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.05 , #abs(#0()) -> #0() 768.00/213.05 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.05 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.05 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.05 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.05 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.05 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.05 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.05 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.05 Obligation: 768.00/213.05 innermost runtime complexity 768.00/213.05 Answer: 768.00/213.05 YES(O(1),O(n^1)) 768.00/213.05 768.00/213.05 The following weak DPs constitute a sub-graph of the DG that is 768.00/213.05 closed under successors. The DPs are removed. 768.00/213.05 768.00/213.05 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.05 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.05 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.05 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.05 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.05 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.05 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.05 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.05 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.05 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.05 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.05 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.05 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.05 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.05 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.05 768.00/213.05 We are left with following problem, upon which TcT provides the 768.00/213.05 certificate YES(O(1),O(n^1)). 768.00/213.05 768.00/213.05 Strict DPs: 768.00/213.05 { transpose'^#(@m) -> 768.00/213.05 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.05 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.05 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.05 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.05 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.05 Weak DPs: 768.00/213.05 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.05 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.05 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.05 matrixMult^#(@acc, @m)) 768.00/213.05 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.05 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.05 matrixMult^#(@m1, @m2)) 768.00/213.05 , matrixMult^#(@m1, @m2) -> 768.00/213.05 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) } 768.00/213.05 Weak Trs: 768.00/213.05 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.05 , split(@m) -> split#1(@m) 768.00/213.05 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.05 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.05 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#0(), @y) -> @y 768.00/213.05 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.05 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.05 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.05 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.05 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.05 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.05 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.05 , +(@x, @y) -> #add(@x, @y) 768.00/213.05 , transAcc#1(nil(), @base) -> @base 768.00/213.05 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.05 attach(@l, transAcc(@m', @base)) 768.00/213.05 , *(@x, @y) -> #mult(@x, @y) 768.00/213.05 , mkBase#1(nil()) -> nil() 768.00/213.05 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.05 , attach#1(nil(), @m) -> nil() 768.00/213.05 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.05 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.05 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.05 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.05 , #natmult(#0(), @y) -> #0() 768.00/213.05 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.05 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.05 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.05 , mkBase(@m) -> mkBase#1(@m) 768.00/213.05 , makeBase(@m) -> makeBase#1(@m) 768.00/213.05 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.05 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.05 , lineMult#1(nil(), @l) -> nil() 768.00/213.05 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.05 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.05 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #0()) -> #0() 768.00/213.05 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #0()) -> #0() 768.00/213.05 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.05 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.05 , #mult(#0(), #0()) -> #0() 768.00/213.05 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.05 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.05 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.05 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.05 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.05 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.05 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.05 , makeBase#1(nil()) -> nil() 768.00/213.05 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.05 , matrixMult(@m1, @m2) -> 768.00/213.05 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.05 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.05 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.05 , #abs(#0()) -> #0() 768.00/213.05 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.05 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.05 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.05 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.05 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.05 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.05 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.05 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.05 Obligation: 768.00/213.05 innermost runtime complexity 768.00/213.05 Answer: 768.00/213.05 YES(O(1),O(n^1)) 768.00/213.05 768.00/213.05 Due to missing edges in the dependency-graph, the right-hand sides 768.00/213.05 of following rules could be simplified: 768.00/213.05 768.00/213.05 { matrixMult^#(@m1, @m2) -> 768.00/213.05 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.05 , transpose'^#(@m) -> 768.00/213.05 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) } 768.00/213.05 768.00/213.05 We are left with following problem, upon which TcT provides the 768.00/213.05 certificate YES(O(1),O(n^1)). 768.00/213.05 768.00/213.05 Strict DPs: 768.00/213.05 { transpose'^#(@m) -> c_1(makeBase^#(@m)) 768.00/213.05 , makeBase^#(@m) -> c_2(makeBase#1^#(@m)) 768.00/213.05 , mkBase#1^#(::(@l, @m')) -> c_3(mkBase^#(@m')) 768.00/213.05 , mkBase^#(@m) -> c_4(mkBase#1^#(@m)) 768.00/213.05 , makeBase#1^#(::(@l, @m')) -> c_5(mkBase^#(@l)) } 768.00/213.05 Weak DPs: 768.00/213.05 { matrixMultList^#(@acc, @mm) -> c_6(matrixMultList#1^#(@mm, @acc)) 768.00/213.05 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.05 c_7(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.05 matrixMult^#(@acc, @m)) 768.00/213.05 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.05 c_8(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.05 matrixMult^#(@m1, @m2)) 768.00/213.05 , matrixMult^#(@m1, @m2) -> c_9(makeBase^#(@m2)) } 768.00/213.05 Weak Trs: 768.00/213.05 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.05 , split(@m) -> split#1(@m) 768.00/213.05 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.05 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.05 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#0(), @y) -> @y 768.00/213.05 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.05 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.05 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.05 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.05 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.05 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.05 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.05 , +(@x, @y) -> #add(@x, @y) 768.00/213.05 , transAcc#1(nil(), @base) -> @base 768.00/213.05 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.05 attach(@l, transAcc(@m', @base)) 768.00/213.05 , *(@x, @y) -> #mult(@x, @y) 768.00/213.05 , mkBase#1(nil()) -> nil() 768.00/213.05 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.05 , attach#1(nil(), @m) -> nil() 768.00/213.05 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.05 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.05 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.05 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.05 , #natmult(#0(), @y) -> #0() 768.00/213.05 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.05 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.05 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.05 , mkBase(@m) -> mkBase#1(@m) 768.00/213.05 , makeBase(@m) -> makeBase#1(@m) 768.00/213.05 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.05 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.05 , lineMult#1(nil(), @l) -> nil() 768.00/213.05 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.05 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.05 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#neg(@x), #0()) -> #0() 768.00/213.05 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.05 , #mult(#pos(@x), #0()) -> #0() 768.00/213.05 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.05 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.05 , #mult(#0(), #0()) -> #0() 768.00/213.05 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.05 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.05 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.05 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.05 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.05 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.05 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.05 , makeBase#1(nil()) -> nil() 768.00/213.05 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.05 , matrixMult(@m1, @m2) -> 768.00/213.05 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.05 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.05 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.05 , #abs(#0()) -> #0() 768.00/213.05 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.05 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.05 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.05 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.05 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.05 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.05 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.05 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.05 Obligation: 768.00/213.05 innermost runtime complexity 768.00/213.05 Answer: 768.00/213.05 YES(O(1),O(n^1)) 768.00/213.05 768.00/213.05 We replace rewrite rules by usable rules: 768.00/213.05 768.00/213.05 Weak Usable Rules: 768.00/213.05 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.05 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.05 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.05 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.05 , #add(#0(), @y) -> @y 768.00/213.05 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.05 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.05 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.05 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.05 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.05 , +(@x, @y) -> #add(@x, @y) 768.00/213.05 , transAcc#1(nil(), @base) -> @base 768.00/213.05 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.05 attach(@l, transAcc(@m', @base)) 768.00/213.05 , *(@x, @y) -> #mult(@x, @y) 768.00/213.05 , mkBase#1(nil()) -> nil() 768.00/213.05 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.05 , attach#1(nil(), @m) -> nil() 768.00/213.05 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.05 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.05 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.05 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.05 , #natmult(#0(), @y) -> #0() 768.00/213.05 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.05 , mkBase(@m) -> mkBase#1(@m) 768.00/213.05 , makeBase(@m) -> makeBase#1(@m) 768.00/213.06 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.06 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.06 , lineMult#1(nil(), @l) -> nil() 768.00/213.06 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.06 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.06 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #0()) -> #0() 768.00/213.06 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #0()) -> #0() 768.00/213.06 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.06 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.06 , #mult(#0(), #0()) -> #0() 768.00/213.06 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.06 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.06 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.06 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.06 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.06 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.06 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.06 , makeBase#1(nil()) -> nil() 768.00/213.06 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.06 , matrixMult(@m1, @m2) -> 768.00/213.06 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.06 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.06 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.06 , #abs(#0()) -> #0() 768.00/213.06 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.06 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.06 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.06 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.06 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.06 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.06 768.00/213.06 We are left with following problem, upon which TcT provides the 768.00/213.06 certificate YES(O(1),O(n^1)). 768.00/213.06 768.00/213.06 Strict DPs: 768.00/213.06 { transpose'^#(@m) -> c_1(makeBase^#(@m)) 768.00/213.06 , makeBase^#(@m) -> c_2(makeBase#1^#(@m)) 768.00/213.06 , mkBase#1^#(::(@l, @m')) -> c_3(mkBase^#(@m')) 768.00/213.06 , mkBase^#(@m) -> c_4(mkBase#1^#(@m)) 768.00/213.06 , makeBase#1^#(::(@l, @m')) -> c_5(mkBase^#(@l)) } 768.00/213.06 Weak DPs: 768.00/213.06 { matrixMultList^#(@acc, @mm) -> c_6(matrixMultList#1^#(@mm, @acc)) 768.00/213.06 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.06 c_7(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.06 matrixMult^#(@acc, @m)) 768.00/213.06 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.06 c_8(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.06 matrixMult^#(@m1, @m2)) 768.00/213.06 , matrixMult^#(@m1, @m2) -> c_9(makeBase^#(@m2)) } 768.00/213.06 Weak Trs: 768.00/213.06 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.06 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.06 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.06 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.06 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.06 , #add(#0(), @y) -> @y 768.00/213.06 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.06 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.06 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.06 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.06 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.06 , +(@x, @y) -> #add(@x, @y) 768.00/213.06 , transAcc#1(nil(), @base) -> @base 768.00/213.06 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.06 attach(@l, transAcc(@m', @base)) 768.00/213.06 , *(@x, @y) -> #mult(@x, @y) 768.00/213.06 , mkBase#1(nil()) -> nil() 768.00/213.06 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.06 , attach#1(nil(), @m) -> nil() 768.00/213.06 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.06 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.06 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.06 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.06 , #natmult(#0(), @y) -> #0() 768.00/213.06 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.06 , mkBase(@m) -> mkBase#1(@m) 768.00/213.06 , makeBase(@m) -> makeBase#1(@m) 768.00/213.06 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.06 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.06 , lineMult#1(nil(), @l) -> nil() 768.00/213.06 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.06 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.06 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #0()) -> #0() 768.00/213.06 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #0()) -> #0() 768.00/213.06 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.06 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.06 , #mult(#0(), #0()) -> #0() 768.00/213.06 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.06 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.06 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.06 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.06 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.06 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.06 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.06 , makeBase#1(nil()) -> nil() 768.00/213.06 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.06 , matrixMult(@m1, @m2) -> 768.00/213.06 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.06 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.06 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.06 , #abs(#0()) -> #0() 768.00/213.06 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.06 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.06 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.06 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.06 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.06 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.06 Obligation: 768.00/213.06 innermost runtime complexity 768.00/213.06 Answer: 768.00/213.06 YES(O(1),O(n^1)) 768.00/213.06 768.00/213.06 We use the processor 'matrix interpretation of dimension 1' to 768.00/213.06 orient following rules strictly. 768.00/213.06 768.00/213.06 DPs: 768.00/213.06 { 1: transpose'^#(@m) -> c_1(makeBase^#(@m)) 768.00/213.06 , 3: mkBase#1^#(::(@l, @m')) -> c_3(mkBase^#(@m')) 768.00/213.06 , 5: makeBase#1^#(::(@l, @m')) -> c_5(mkBase^#(@l)) 768.00/213.06 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.06 c_7(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.06 matrixMult^#(@acc, @m)) } 768.00/213.06 768.00/213.06 Sub-proof: 768.00/213.06 ---------- 768.00/213.06 The following argument positions are usable: 768.00/213.06 Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, 768.00/213.06 Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, 768.00/213.06 Uargs(c_7) = {1, 2}, Uargs(c_8) = {1, 2}, Uargs(c_9) = {1} 768.00/213.06 768.00/213.06 TcT has computed the following constructor-based matrix 768.00/213.06 interpretation satisfying not(EDA). 768.00/213.06 768.00/213.06 [attach](x1, x2) = [3] x1 + [2] 768.00/213.06 768.00/213.06 [#add](x1, x2) = [0] 768.00/213.06 768.00/213.06 [mult#2](x1, x2, x3) = [4] x2 + [7] x3 + [0] 768.00/213.06 768.00/213.06 [nil] = [0] 768.00/213.06 768.00/213.06 [matrixMult'](x1, x2) = [4] x1 + [0] 768.00/213.06 768.00/213.06 [transAcc](x1, x2) = [0] 768.00/213.06 768.00/213.06 [mult](x1, x2) = [0] 768.00/213.06 768.00/213.06 [+](x1, x2) = [0] 768.00/213.06 768.00/213.06 [transAcc#1](x1, x2) = [4] x2 + [0] 768.00/213.06 768.00/213.06 [#neg](x1) = [0] 768.00/213.06 768.00/213.06 [*](x1, x2) = [0] 768.00/213.06 768.00/213.06 [mkBase#1](x1) = [0] 768.00/213.06 768.00/213.06 [attach#1](x1, x2) = [4] x2 + [0] 768.00/213.06 768.00/213.06 [matrixMult'#1](x1, x2) = [0] 768.00/213.06 768.00/213.06 [#natmult](x1, x2) = [0] 768.00/213.06 768.00/213.06 [#pos](x1) = [0] 768.00/213.06 768.00/213.06 [mkBase](x1) = [2] x1 + [0] 768.00/213.06 768.00/213.06 [makeBase](x1) = [0] 768.00/213.06 768.00/213.06 [mult#1](x1, x2) = [4] x2 + [0] 768.00/213.06 768.00/213.06 [::](x1, x2) = [1] x1 + [1] x2 + [1] 768.00/213.06 768.00/213.06 [lineMult#1](x1, x2) = [4] x2 + [0] 768.00/213.06 768.00/213.06 [#mult](x1, x2) = [0] 768.00/213.06 768.00/213.06 [attach#2](x1, x2, x3) = [7] x3 + [0] 768.00/213.06 768.00/213.06 [#succ](x1) = [0] 768.00/213.06 768.00/213.06 [#0] = [0] 768.00/213.06 768.00/213.06 [makeBase#1](x1) = [0] 768.00/213.06 768.00/213.06 [matrixMult](x1, x2) = [0] 768.00/213.06 768.00/213.06 [#abs](x1) = [0] 768.00/213.06 768.00/213.06 [lineMult](x1, x2) = [0] 768.00/213.06 768.00/213.06 [#pred](x1) = [0] 768.00/213.06 768.00/213.06 [#s](x1) = [0] 768.00/213.06 768.00/213.06 [matrixMultList^#](x1, x2) = [4] x2 + [0] 768.00/213.06 768.00/213.06 [matrixMultList#1^#](x1, x2) = [4] x1 + [0] 768.00/213.06 768.00/213.06 [matrixMult3^#](x1, x2, x3) = [7] x1 + [7] x2 + [7] x3 + [7] 768.00/213.06 768.00/213.06 [matrixMult^#](x1, x2) = [4] x2 + [0] 768.00/213.06 768.00/213.06 [transpose'^#](x1) = [7] x1 + [7] 768.00/213.06 768.00/213.06 [makeBase^#](x1) = [4] x1 + [0] 768.00/213.06 768.00/213.06 [mkBase#1^#](x1) = [1] x1 + [0] 768.00/213.06 768.00/213.06 [mkBase^#](x1) = [1] x1 + [0] 768.00/213.06 768.00/213.06 [makeBase#1^#](x1) = [4] x1 + [0] 768.00/213.06 768.00/213.06 [c_1](x1) = [1] x1 + [3] 768.00/213.06 768.00/213.06 [c_2](x1) = [1] x1 + [0] 768.00/213.06 768.00/213.06 [c_3](x1) = [1] x1 + [0] 768.00/213.06 768.00/213.06 [c_4](x1) = [1] x1 + [0] 768.00/213.06 768.00/213.06 [c_5](x1) = [4] x1 + [1] 768.00/213.06 768.00/213.06 [c_6](x1) = [1] x1 + [0] 768.00/213.06 768.00/213.06 [c_7](x1, x2) = [1] x1 + [1] x2 + [3] 768.00/213.06 768.00/213.06 [c_8](x1, x2) = [1] x1 + [1] x2 + [7] 768.00/213.06 768.00/213.06 [c_9](x1) = [1] x1 + [0] 768.00/213.06 768.00/213.06 The order satisfies the following ordering constraints: 768.00/213.06 768.00/213.06 [attach(@line, @m)] = [3] @line + [2] 768.00/213.06 ? [4] @m + [0] 768.00/213.06 = [attach#1(@line, @m)] 768.00/213.06 768.00/213.06 [#add(#neg(#s(#0())), @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pred(@y)] 768.00/213.06 768.00/213.06 [#add(#neg(#s(#s(@x))), @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pred(#add(#pos(#s(@x)), @y))] 768.00/213.06 768.00/213.06 [#add(#pos(#s(#0())), @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#succ(@y)] 768.00/213.06 768.00/213.06 [#add(#pos(#s(#s(@x))), @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#succ(#add(#pos(#s(@x)), @y))] 768.00/213.06 768.00/213.06 [#add(#0(), @y)] = [0] 768.00/213.06 ? [1] @y + [0] 768.00/213.06 = [@y] 768.00/213.06 768.00/213.06 [mult#2(nil(), @x, @xs)] = [4] @x + [7] @xs + [0] 768.00/213.06 >= [0] 768.00/213.06 = [#abs(#0())] 768.00/213.06 768.00/213.06 [mult#2(::(@y, @ys), @x, @xs)] = [4] @x + [7] @xs + [0] 768.00/213.06 >= [0] 768.00/213.06 = [+(*(@x, @y), mult(@xs, @ys))] 768.00/213.06 768.00/213.06 [matrixMult'(@m1, @m2)] = [4] @m1 + [0] 768.00/213.06 >= [0] 768.00/213.06 = [matrixMult'#1(@m1, @m2)] 768.00/213.06 768.00/213.06 [transAcc(@m, @base)] = [0] 768.00/213.06 ? [4] @base + [0] 768.00/213.06 = [transAcc#1(@m, @base)] 768.00/213.06 768.00/213.06 [mult(@l1, @l2)] = [0] 768.00/213.06 ? [4] @l2 + [0] 768.00/213.06 = [mult#1(@l1, @l2)] 768.00/213.06 768.00/213.06 [+(@x, @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#add(@x, @y)] 768.00/213.06 768.00/213.06 [transAcc#1(nil(), @base)] = [4] @base + [0] 768.00/213.06 >= [1] @base + [0] 768.00/213.06 = [@base] 768.00/213.06 768.00/213.06 [transAcc#1(::(@l, @m'), @base)] = [4] @base + [0] 768.00/213.06 ? [3] @l + [2] 768.00/213.06 = [attach(@l, transAcc(@m', @base))] 768.00/213.06 768.00/213.06 [*(@x, @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#mult(@x, @y)] 768.00/213.06 768.00/213.06 [mkBase#1(nil())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [nil()] 768.00/213.06 768.00/213.06 [mkBase#1(::(@l, @m'))] = [0] 768.00/213.06 ? [2] @m' + [1] 768.00/213.06 = [::(nil(), mkBase(@m'))] 768.00/213.06 768.00/213.06 [attach#1(nil(), @m)] = [4] @m + [0] 768.00/213.06 >= [0] 768.00/213.06 = [nil()] 768.00/213.06 768.00/213.06 [attach#1(::(@x, @xs), @m)] = [4] @m + [0] 768.00/213.06 ? [7] @xs + [0] 768.00/213.06 = [attach#2(@m, @x, @xs)] 768.00/213.06 768.00/213.06 [matrixMult'#1(nil(), @m2)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [nil()] 768.00/213.06 768.00/213.06 [matrixMult'#1(::(@l, @ls), @m2)] = [0] 768.00/213.06 ? [4] @ls + [1] 768.00/213.06 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 768.00/213.06 768.00/213.06 [#natmult(#0(), @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#natmult(#s(@x), @y)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#add(#pos(@y), #natmult(@x, @y))] 768.00/213.06 768.00/213.06 [mkBase(@m)] = [2] @m + [0] 768.00/213.06 >= [0] 768.00/213.06 = [mkBase#1(@m)] 768.00/213.06 768.00/213.06 [makeBase(@m)] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [makeBase#1(@m)] 768.00/213.06 768.00/213.06 [mult#1(nil(), @l2)] = [4] @l2 + [0] 768.00/213.06 >= [0] 768.00/213.06 = [#abs(#0())] 768.00/213.06 768.00/213.06 [mult#1(::(@x, @xs), @l2)] = [4] @l2 + [0] 768.00/213.06 ? [4] @x + [7] @xs + [0] 768.00/213.06 = [mult#2(@l2, @x, @xs)] 768.00/213.06 768.00/213.06 [lineMult#1(nil(), @l)] = [4] @l + [0] 768.00/213.06 >= [0] 768.00/213.06 = [nil()] 768.00/213.06 768.00/213.06 [lineMult#1(::(@x, @xs), @l)] = [4] @l + [0] 768.00/213.06 ? [1] 768.00/213.06 = [::(mult(@l, @x), lineMult(@l, @xs))] 768.00/213.06 768.00/213.06 [#mult(#neg(@x), #neg(@y))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(#natmult(@x, @y))] 768.00/213.06 768.00/213.06 [#mult(#neg(@x), #pos(@y))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#neg(#natmult(@x, @y))] 768.00/213.06 768.00/213.06 [#mult(#neg(@x), #0())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#mult(#pos(@x), #neg(@y))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#neg(#natmult(@x, @y))] 768.00/213.06 768.00/213.06 [#mult(#pos(@x), #pos(@y))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(#natmult(@x, @y))] 768.00/213.06 768.00/213.06 [#mult(#pos(@x), #0())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#mult(#0(), #neg(@y))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#mult(#0(), #pos(@y))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#mult(#0(), #0())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [attach#2(nil(), @x, @xs)] = [7] @xs + [0] 768.00/213.06 >= [0] 768.00/213.06 = [nil()] 768.00/213.06 768.00/213.06 [attach#2(::(@l, @ls), @x, @xs)] = [7] @xs + [0] 768.00/213.06 ? [1] @x + [3] @xs + [1] @l + [4] 768.00/213.06 = [::(::(@x, @l), attach(@xs, @ls))] 768.00/213.06 768.00/213.06 [#succ(#neg(#s(#0())))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#succ(#neg(#s(#s(@x))))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#neg(#s(@x))] 768.00/213.06 768.00/213.06 [#succ(#pos(#s(@x)))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(#s(#s(@x)))] 768.00/213.06 768.00/213.06 [#succ(#0())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(#s(#0()))] 768.00/213.06 768.00/213.06 [makeBase#1(nil())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [nil()] 768.00/213.06 768.00/213.06 [makeBase#1(::(@l, @m'))] = [0] 768.00/213.06 ? [2] @l + [0] 768.00/213.06 = [mkBase(@l)] 768.00/213.06 768.00/213.06 [matrixMult(@m1, @m2)] = [0] 768.00/213.06 ? [4] @m1 + [0] 768.00/213.06 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 768.00/213.06 768.00/213.06 [#abs(#neg(@x))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(@x)] 768.00/213.06 768.00/213.06 [#abs(#pos(@x))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(@x)] 768.00/213.06 768.00/213.06 [#abs(#0())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#abs(#s(@x))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(#s(@x))] 768.00/213.06 768.00/213.06 [lineMult(@l, @m2)] = [0] 768.00/213.06 ? [4] @l + [0] 768.00/213.06 = [lineMult#1(@m2, @l)] 768.00/213.06 768.00/213.06 [#pred(#neg(#s(@x)))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#neg(#s(#s(@x)))] 768.00/213.06 768.00/213.06 [#pred(#pos(#s(#0())))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#0()] 768.00/213.06 768.00/213.06 [#pred(#pos(#s(#s(@x))))] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#pos(#s(@x))] 768.00/213.06 768.00/213.06 [#pred(#0())] = [0] 768.00/213.06 >= [0] 768.00/213.06 = [#neg(#s(#0()))] 768.00/213.06 768.00/213.06 [matrixMultList^#(@acc, @mm)] = [4] @mm + [0] 768.00/213.06 >= [4] @mm + [0] 768.00/213.06 = [c_6(matrixMultList#1^#(@mm, @acc))] 768.00/213.06 768.00/213.06 [matrixMultList#1^#(::(@m, @ms), @acc)] = [4] @m + [4] @ms + [4] 768.00/213.06 > [4] @m + [4] @ms + [3] 768.00/213.06 = [c_7(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.06 matrixMult^#(@acc, @m))] 768.00/213.06 768.00/213.06 [matrixMult3^#(@m1, @m2, @m3)] = [7] @m2 + [7] @m1 + [7] @m3 + [7] 768.00/213.06 >= [4] @m2 + [4] @m3 + [7] 768.00/213.06 = [c_8(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.06 matrixMult^#(@m1, @m2))] 768.00/213.06 768.00/213.06 [matrixMult^#(@m1, @m2)] = [4] @m2 + [0] 768.00/213.06 >= [4] @m2 + [0] 768.00/213.06 = [c_9(makeBase^#(@m2))] 768.00/213.06 768.00/213.06 [transpose'^#(@m)] = [7] @m + [7] 768.00/213.06 > [4] @m + [3] 768.00/213.06 = [c_1(makeBase^#(@m))] 768.00/213.06 768.00/213.06 [makeBase^#(@m)] = [4] @m + [0] 768.00/213.06 >= [4] @m + [0] 768.00/213.06 = [c_2(makeBase#1^#(@m))] 768.00/213.06 768.00/213.06 [mkBase#1^#(::(@l, @m'))] = [1] @l + [1] @m' + [1] 768.00/213.06 > [1] @m' + [0] 768.00/213.06 = [c_3(mkBase^#(@m'))] 768.00/213.06 768.00/213.06 [mkBase^#(@m)] = [1] @m + [0] 768.00/213.06 >= [1] @m + [0] 768.00/213.06 = [c_4(mkBase#1^#(@m))] 768.00/213.06 768.00/213.06 [makeBase#1^#(::(@l, @m'))] = [4] @l + [4] @m' + [4] 768.00/213.06 > [4] @l + [1] 768.00/213.06 = [c_5(mkBase^#(@l))] 768.00/213.06 768.00/213.06 768.00/213.06 We return to the main proof. Consider the set of all dependency 768.00/213.06 pairs 768.00/213.06 768.00/213.06 : 768.00/213.06 { 1: transpose'^#(@m) -> c_1(makeBase^#(@m)) 768.00/213.06 , 2: makeBase^#(@m) -> c_2(makeBase#1^#(@m)) 768.00/213.06 , 3: mkBase#1^#(::(@l, @m')) -> c_3(mkBase^#(@m')) 768.00/213.06 , 4: mkBase^#(@m) -> c_4(mkBase#1^#(@m)) 768.00/213.06 , 5: makeBase#1^#(::(@l, @m')) -> c_5(mkBase^#(@l)) 768.00/213.06 , 6: matrixMultList^#(@acc, @mm) -> 768.00/213.06 c_6(matrixMultList#1^#(@mm, @acc)) 768.00/213.06 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.06 c_7(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.06 matrixMult^#(@acc, @m)) 768.00/213.06 , 8: matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.06 c_8(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.06 matrixMult^#(@m1, @m2)) 768.00/213.06 , 9: matrixMult^#(@m1, @m2) -> c_9(makeBase^#(@m2)) } 768.00/213.06 768.00/213.06 Processor 'matrix interpretation of dimension 1' induces the 768.00/213.06 complexity certificate YES(?,O(n^1)) on application of dependency 768.00/213.06 pairs {1,3,5,7}. These cover all (indirect) predecessors of 768.00/213.06 dependency pairs {1,2,3,4,5,6,7,8,9}, their number of application 768.00/213.06 is equally bounded. The dependency pairs are shifted into the weak 768.00/213.06 component. 768.00/213.06 768.00/213.06 We are left with following problem, upon which TcT provides the 768.00/213.06 certificate YES(O(1),O(1)). 768.00/213.06 768.00/213.06 Weak DPs: 768.00/213.06 { matrixMultList^#(@acc, @mm) -> c_6(matrixMultList#1^#(@mm, @acc)) 768.00/213.06 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.06 c_7(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.06 matrixMult^#(@acc, @m)) 768.00/213.06 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.06 c_8(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.06 matrixMult^#(@m1, @m2)) 768.00/213.06 , matrixMult^#(@m1, @m2) -> c_9(makeBase^#(@m2)) 768.00/213.06 , transpose'^#(@m) -> c_1(makeBase^#(@m)) 768.00/213.06 , makeBase^#(@m) -> c_2(makeBase#1^#(@m)) 768.00/213.06 , mkBase#1^#(::(@l, @m')) -> c_3(mkBase^#(@m')) 768.00/213.06 , mkBase^#(@m) -> c_4(mkBase#1^#(@m)) 768.00/213.06 , makeBase#1^#(::(@l, @m')) -> c_5(mkBase^#(@l)) } 768.00/213.06 Weak Trs: 768.00/213.06 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.06 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.06 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.06 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.06 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.06 , #add(#0(), @y) -> @y 768.00/213.06 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.06 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.06 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.06 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.06 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.06 , +(@x, @y) -> #add(@x, @y) 768.00/213.06 , transAcc#1(nil(), @base) -> @base 768.00/213.06 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.06 attach(@l, transAcc(@m', @base)) 768.00/213.06 , *(@x, @y) -> #mult(@x, @y) 768.00/213.06 , mkBase#1(nil()) -> nil() 768.00/213.06 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.06 , attach#1(nil(), @m) -> nil() 768.00/213.06 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.06 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.06 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.06 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.06 , #natmult(#0(), @y) -> #0() 768.00/213.06 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.06 , mkBase(@m) -> mkBase#1(@m) 768.00/213.06 , makeBase(@m) -> makeBase#1(@m) 768.00/213.06 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.06 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.06 , lineMult#1(nil(), @l) -> nil() 768.00/213.06 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.06 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.06 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #0()) -> #0() 768.00/213.06 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #0()) -> #0() 768.00/213.06 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.06 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.06 , #mult(#0(), #0()) -> #0() 768.00/213.06 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.06 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.06 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.06 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.06 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.06 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.06 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.06 , makeBase#1(nil()) -> nil() 768.00/213.06 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.06 , matrixMult(@m1, @m2) -> 768.00/213.06 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.06 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.06 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.06 , #abs(#0()) -> #0() 768.00/213.06 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.06 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.06 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.06 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.06 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.06 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.06 Obligation: 768.00/213.06 innermost runtime complexity 768.00/213.06 Answer: 768.00/213.06 YES(O(1),O(1)) 768.00/213.06 768.00/213.06 The following weak DPs constitute a sub-graph of the DG that is 768.00/213.06 closed under successors. The DPs are removed. 768.00/213.06 768.00/213.06 { matrixMultList^#(@acc, @mm) -> c_6(matrixMultList#1^#(@mm, @acc)) 768.00/213.06 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.06 c_7(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.06 matrixMult^#(@acc, @m)) 768.00/213.06 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.06 c_8(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.06 matrixMult^#(@m1, @m2)) 768.00/213.06 , matrixMult^#(@m1, @m2) -> c_9(makeBase^#(@m2)) 768.00/213.06 , transpose'^#(@m) -> c_1(makeBase^#(@m)) 768.00/213.06 , makeBase^#(@m) -> c_2(makeBase#1^#(@m)) 768.00/213.06 , mkBase#1^#(::(@l, @m')) -> c_3(mkBase^#(@m')) 768.00/213.06 , mkBase^#(@m) -> c_4(mkBase#1^#(@m)) 768.00/213.06 , makeBase#1^#(::(@l, @m')) -> c_5(mkBase^#(@l)) } 768.00/213.06 768.00/213.06 We are left with following problem, upon which TcT provides the 768.00/213.06 certificate YES(O(1),O(1)). 768.00/213.06 768.00/213.06 Weak Trs: 768.00/213.06 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.06 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.06 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.06 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.06 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.06 , #add(#0(), @y) -> @y 768.00/213.06 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.06 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.06 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.06 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.06 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.06 , +(@x, @y) -> #add(@x, @y) 768.00/213.06 , transAcc#1(nil(), @base) -> @base 768.00/213.06 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.06 attach(@l, transAcc(@m', @base)) 768.00/213.06 , *(@x, @y) -> #mult(@x, @y) 768.00/213.06 , mkBase#1(nil()) -> nil() 768.00/213.06 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.06 , attach#1(nil(), @m) -> nil() 768.00/213.06 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.06 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.06 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.06 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.06 , #natmult(#0(), @y) -> #0() 768.00/213.06 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.06 , mkBase(@m) -> mkBase#1(@m) 768.00/213.06 , makeBase(@m) -> makeBase#1(@m) 768.00/213.06 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.06 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.06 , lineMult#1(nil(), @l) -> nil() 768.00/213.06 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.06 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.06 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#neg(@x), #0()) -> #0() 768.00/213.06 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.06 , #mult(#pos(@x), #0()) -> #0() 768.00/213.06 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.06 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.06 , #mult(#0(), #0()) -> #0() 768.00/213.06 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.06 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.06 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.06 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.06 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.06 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.06 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.06 , makeBase#1(nil()) -> nil() 768.00/213.07 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.07 , matrixMult(@m1, @m2) -> 768.00/213.07 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.07 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.07 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.07 , #abs(#0()) -> #0() 768.00/213.07 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.07 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.07 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.07 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.07 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.07 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.07 Obligation: 768.00/213.07 innermost runtime complexity 768.00/213.07 Answer: 768.00/213.07 YES(O(1),O(1)) 768.00/213.07 768.00/213.07 No rule is usable, rules are removed from the input problem. 768.00/213.07 768.00/213.07 We are left with following problem, upon which TcT provides the 768.00/213.07 certificate YES(O(1),O(1)). 768.00/213.07 768.00/213.07 Rules: Empty 768.00/213.07 Obligation: 768.00/213.07 innermost runtime complexity 768.00/213.07 Answer: 768.00/213.07 YES(O(1),O(1)) 768.00/213.07 768.00/213.07 Empty rules are trivially bounded 768.00/213.07 768.00/213.07 S) We are left with following problem, upon which TcT provides the 768.00/213.07 certificate YES(O(1),O(n^1)). 768.00/213.07 768.00/213.07 Strict DPs: 768.00/213.07 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.07 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.07 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.07 matrixMult^#(@acc, @m)) 768.00/213.07 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.07 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.07 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.07 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.07 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.07 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.07 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.07 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.07 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.07 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.07 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.07 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.07 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.07 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.07 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.07 Weak DPs: 768.00/213.07 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.07 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.07 matrixMult^#(@m1, @m2)) 768.00/213.07 , matrixMult^#(@m1, @m2) -> 768.00/213.07 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.07 , transpose'^#(@m) -> 768.00/213.07 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) 768.00/213.07 , makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.07 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.07 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.07 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.07 Weak Trs: 768.00/213.07 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.07 , split(@m) -> split#1(@m) 768.00/213.07 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.07 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.07 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.07 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.07 , #add(#0(), @y) -> @y 768.00/213.07 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.07 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.07 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.07 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.07 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.07 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.07 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.07 , +(@x, @y) -> #add(@x, @y) 768.00/213.07 , transAcc#1(nil(), @base) -> @base 768.00/213.07 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.07 attach(@l, transAcc(@m', @base)) 768.00/213.07 , *(@x, @y) -> #mult(@x, @y) 768.00/213.07 , mkBase#1(nil()) -> nil() 768.00/213.07 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.07 , attach#1(nil(), @m) -> nil() 768.00/213.07 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.07 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.07 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.07 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.07 , #natmult(#0(), @y) -> #0() 768.00/213.07 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.07 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.07 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.07 , mkBase(@m) -> mkBase#1(@m) 768.00/213.07 , makeBase(@m) -> makeBase#1(@m) 768.00/213.07 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.07 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.07 , lineMult#1(nil(), @l) -> nil() 768.00/213.07 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.07 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.07 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.07 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.07 , #mult(#neg(@x), #0()) -> #0() 768.00/213.07 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.07 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.07 , #mult(#pos(@x), #0()) -> #0() 768.00/213.07 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.07 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.07 , #mult(#0(), #0()) -> #0() 768.00/213.07 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.07 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.07 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.07 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.07 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.07 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.07 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.07 , makeBase#1(nil()) -> nil() 768.00/213.07 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.07 , matrixMult(@m1, @m2) -> 768.00/213.07 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.07 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.07 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.07 , #abs(#0()) -> #0() 768.00/213.07 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.07 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.07 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.07 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.07 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.07 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.07 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.07 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.07 Obligation: 768.00/213.07 innermost runtime complexity 768.00/213.07 Answer: 768.00/213.07 YES(O(1),O(n^1)) 768.00/213.07 768.00/213.07 The following weak DPs constitute a sub-graph of the DG that is 768.00/213.07 closed under successors. The DPs are removed. 768.00/213.07 768.00/213.07 { makeBase^#(@m) -> c_9(makeBase#1^#(@m)) 768.00/213.07 , mkBase#1^#(::(@l, @m')) -> c_14(mkBase^#(@m')) 768.00/213.07 , mkBase^#(@m) -> c_15(mkBase#1^#(@m)) 768.00/213.07 , makeBase#1^#(::(@l, @m')) -> c_20(mkBase^#(@l)) } 768.00/213.07 768.00/213.07 We are left with following problem, upon which TcT provides the 768.00/213.07 certificate YES(O(1),O(n^1)). 768.00/213.07 768.00/213.07 Strict DPs: 768.00/213.07 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.07 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.07 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.07 matrixMult^#(@acc, @m)) 768.00/213.07 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.07 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.07 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.07 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.07 , transAcc^#(@m, @base) -> c_8(transAcc#1^#(@m, @base)) 768.00/213.07 , split#2^#(::(@x, @xs), @ls) -> c_10(split^#(@ls)) 768.00/213.07 , transpose^#(@m) -> c_11(transpose#1^#(@m, @m)) 768.00/213.07 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.07 c_12(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.07 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.07 c_13(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.07 , transpose#3^#(::(@y, @ys), @l) -> c_16(transpose^#(::(@y, @ys))) 768.00/213.07 , attach#2^#(::(@l, @ls), @x, @xs) -> c_17(attach^#(@xs, @ls)) 768.00/213.07 , transpose#2^#(tuple#2(@l, @m')) -> c_18(transpose#3^#(@m', @l)) 768.00/213.07 , matrixMultOld^#(@m1, @m2) -> c_19(transpose^#(@m2)) } 768.00/213.07 Weak DPs: 768.00/213.07 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.07 c_21(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.07 matrixMult^#(@m1, @m2)) 768.00/213.07 , matrixMult^#(@m1, @m2) -> 768.00/213.07 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.07 , transpose'^#(@m) -> 768.00/213.07 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) } 768.00/213.07 Weak Trs: 768.00/213.07 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.07 , split(@m) -> split#1(@m) 768.00/213.07 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.07 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.07 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.07 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.07 , #add(#0(), @y) -> @y 768.00/213.07 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.07 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.07 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.07 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.07 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.07 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.07 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.07 , +(@x, @y) -> #add(@x, @y) 768.00/213.07 , transAcc#1(nil(), @base) -> @base 768.00/213.07 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.07 attach(@l, transAcc(@m', @base)) 768.00/213.07 , *(@x, @y) -> #mult(@x, @y) 768.00/213.07 , mkBase#1(nil()) -> nil() 768.00/213.07 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.07 , attach#1(nil(), @m) -> nil() 768.00/213.07 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.07 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.07 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.07 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.07 , #natmult(#0(), @y) -> #0() 768.00/213.07 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.07 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.07 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.07 , mkBase(@m) -> mkBase#1(@m) 768.00/213.07 , makeBase(@m) -> makeBase#1(@m) 768.00/213.07 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.07 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.07 , lineMult#1(nil(), @l) -> nil() 768.00/213.07 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.07 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.07 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.07 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.07 , #mult(#neg(@x), #0()) -> #0() 768.00/213.07 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.07 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.07 , #mult(#pos(@x), #0()) -> #0() 768.00/213.07 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.07 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.07 , #mult(#0(), #0()) -> #0() 768.00/213.07 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.07 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.07 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.07 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.07 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.07 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.07 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.07 , makeBase#1(nil()) -> nil() 768.00/213.07 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.07 , matrixMult(@m1, @m2) -> 768.00/213.07 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.07 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.07 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.07 , #abs(#0()) -> #0() 768.00/213.07 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.07 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.07 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.07 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.07 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.07 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.07 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.07 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.07 Obligation: 768.00/213.07 innermost runtime complexity 768.00/213.07 Answer: 768.00/213.07 YES(O(1),O(n^1)) 768.00/213.07 768.00/213.07 Due to missing edges in the dependency-graph, the right-hand sides 768.00/213.07 of following rules could be simplified: 768.00/213.07 768.00/213.07 { matrixMult^#(@m1, @m2) -> 768.00/213.07 c_22(transAcc^#(@m2, makeBase(@m2)), makeBase^#(@m2)) 768.00/213.07 , transpose'^#(@m) -> 768.00/213.07 c_7(transAcc^#(@m, makeBase(@m)), makeBase^#(@m)) } 768.00/213.07 768.00/213.07 We are left with following problem, upon which TcT provides the 768.00/213.07 certificate YES(O(1),O(n^1)). 768.00/213.07 768.00/213.07 Strict DPs: 768.00/213.07 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.07 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.07 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.07 matrixMult^#(@acc, @m)) 768.00/213.07 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.07 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.07 , split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.07 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.07 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.00/213.07 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.07 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.07 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.07 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.07 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.07 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.07 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.07 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) 768.00/213.07 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.07 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.07 Weak DPs: 768.00/213.07 { matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.07 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.07 matrixMult^#(@m1, @m2)) 768.00/213.07 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.00/213.07 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.00/213.07 Weak Trs: 768.00/213.07 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.07 , split(@m) -> split#1(@m) 768.00/213.07 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.07 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.07 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.07 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.07 , #add(#0(), @y) -> @y 768.00/213.07 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.07 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.07 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.07 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.07 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.07 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.07 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.07 , +(@x, @y) -> #add(@x, @y) 768.00/213.07 , transAcc#1(nil(), @base) -> @base 768.00/213.07 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.07 attach(@l, transAcc(@m', @base)) 768.00/213.07 , *(@x, @y) -> #mult(@x, @y) 768.00/213.07 , mkBase#1(nil()) -> nil() 768.00/213.07 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.07 , attach#1(nil(), @m) -> nil() 768.00/213.07 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.07 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.07 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.07 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.07 , #natmult(#0(), @y) -> #0() 768.00/213.07 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.07 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.07 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.07 , mkBase(@m) -> mkBase#1(@m) 768.00/213.07 , makeBase(@m) -> makeBase#1(@m) 768.00/213.07 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.07 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.07 , lineMult#1(nil(), @l) -> nil() 768.00/213.07 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.07 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.07 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.07 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.07 , #mult(#neg(@x), #0()) -> #0() 768.00/213.07 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.07 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.07 , #mult(#pos(@x), #0()) -> #0() 768.00/213.07 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.07 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.07 , #mult(#0(), #0()) -> #0() 768.00/213.07 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.07 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.07 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.07 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.07 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.07 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.07 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.07 , makeBase#1(nil()) -> nil() 768.00/213.07 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.07 , matrixMult(@m1, @m2) -> 768.00/213.07 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.07 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.07 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.07 , #abs(#0()) -> #0() 768.00/213.07 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.08 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.08 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.08 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.08 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.08 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.08 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.08 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.08 Obligation: 768.00/213.08 innermost runtime complexity 768.00/213.08 Answer: 768.00/213.08 YES(O(1),O(n^1)) 768.00/213.08 768.00/213.08 We analyse the complexity of following sub-problems (R) and (S). 768.00/213.08 Problem (S) is obtained from the input problem by shifting strict 768.00/213.08 rules from (R) into the weak component: 768.00/213.08 768.00/213.08 Problem (R): 768.00/213.08 ------------ 768.00/213.08 Strict DPs: 768.00/213.08 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.08 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.08 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.08 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.08 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.08 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.08 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.08 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.08 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.08 Weak DPs: 768.00/213.08 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.08 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.08 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.08 matrixMult^#(@acc, @m)) 768.00/213.08 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.08 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.08 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.08 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.08 matrixMult^#(@m1, @m2)) 768.00/213.08 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.00/213.08 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.00/213.08 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.00/213.08 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.08 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.08 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.00/213.08 Weak Trs: 768.00/213.08 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.08 , split(@m) -> split#1(@m) 768.00/213.08 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.08 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.08 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#0(), @y) -> @y 768.00/213.08 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.08 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.08 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.08 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.08 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.08 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.08 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.08 , +(@x, @y) -> #add(@x, @y) 768.00/213.08 , transAcc#1(nil(), @base) -> @base 768.00/213.08 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.08 attach(@l, transAcc(@m', @base)) 768.00/213.08 , *(@x, @y) -> #mult(@x, @y) 768.00/213.08 , mkBase#1(nil()) -> nil() 768.00/213.08 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.08 , attach#1(nil(), @m) -> nil() 768.00/213.08 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.08 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.08 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.08 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.08 , #natmult(#0(), @y) -> #0() 768.00/213.08 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.08 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.08 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.08 , mkBase(@m) -> mkBase#1(@m) 768.00/213.08 , makeBase(@m) -> makeBase#1(@m) 768.00/213.08 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.08 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.08 , lineMult#1(nil(), @l) -> nil() 768.00/213.08 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.08 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.08 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #0()) -> #0() 768.00/213.08 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #0()) -> #0() 768.00/213.08 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.08 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.08 , #mult(#0(), #0()) -> #0() 768.00/213.08 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.08 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.08 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.08 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.08 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.08 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.08 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.08 , makeBase#1(nil()) -> nil() 768.00/213.08 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.08 , matrixMult(@m1, @m2) -> 768.00/213.08 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.08 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.08 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.08 , #abs(#0()) -> #0() 768.00/213.08 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.08 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.08 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.08 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.08 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.08 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.08 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.08 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.08 StartTerms: basic terms 768.00/213.08 Strategy: innermost 768.00/213.08 768.00/213.08 Problem (S): 768.00/213.08 ------------ 768.00/213.08 Strict DPs: 768.00/213.08 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.08 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.08 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.08 matrixMult^#(@acc, @m)) 768.00/213.08 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.08 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.08 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.00/213.08 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.08 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.08 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.00/213.08 Weak DPs: 768.00/213.08 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.08 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.08 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.08 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.08 matrixMult^#(@m1, @m2)) 768.00/213.08 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.00/213.08 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.00/213.08 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.08 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.08 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.08 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.08 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.08 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.08 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.08 Weak Trs: 768.00/213.08 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.08 , split(@m) -> split#1(@m) 768.00/213.08 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.08 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.08 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#0(), @y) -> @y 768.00/213.08 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.08 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.08 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.08 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.08 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.08 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.08 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.08 , +(@x, @y) -> #add(@x, @y) 768.00/213.08 , transAcc#1(nil(), @base) -> @base 768.00/213.08 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.08 attach(@l, transAcc(@m', @base)) 768.00/213.08 , *(@x, @y) -> #mult(@x, @y) 768.00/213.08 , mkBase#1(nil()) -> nil() 768.00/213.08 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.08 , attach#1(nil(), @m) -> nil() 768.00/213.08 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.08 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.08 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.08 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.08 , #natmult(#0(), @y) -> #0() 768.00/213.08 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.08 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.08 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.08 , mkBase(@m) -> mkBase#1(@m) 768.00/213.08 , makeBase(@m) -> makeBase#1(@m) 768.00/213.08 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.08 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.08 , lineMult#1(nil(), @l) -> nil() 768.00/213.08 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.08 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.08 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #0()) -> #0() 768.00/213.08 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #0()) -> #0() 768.00/213.08 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.08 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.08 , #mult(#0(), #0()) -> #0() 768.00/213.08 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.08 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.08 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.08 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.08 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.08 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.08 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.08 , makeBase#1(nil()) -> nil() 768.00/213.08 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.08 , matrixMult(@m1, @m2) -> 768.00/213.08 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.08 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.08 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.08 , #abs(#0()) -> #0() 768.00/213.08 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.08 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.08 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.08 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.08 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.08 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.08 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.08 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.08 StartTerms: basic terms 768.00/213.08 Strategy: innermost 768.00/213.08 768.00/213.08 Overall, the transformation results in the following sub-problem(s): 768.00/213.08 768.00/213.08 Generated new problems: 768.00/213.08 ----------------------- 768.00/213.08 R) Strict DPs: 768.00/213.08 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.08 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.08 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.08 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.08 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.08 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.08 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.08 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.08 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.08 Weak DPs: 768.00/213.08 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.08 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.08 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.08 matrixMult^#(@acc, @m)) 768.00/213.08 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.08 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.08 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.08 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.08 matrixMult^#(@m1, @m2)) 768.00/213.08 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.00/213.08 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.00/213.08 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.00/213.08 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.08 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.08 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.00/213.08 Weak Trs: 768.00/213.08 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.08 , split(@m) -> split#1(@m) 768.00/213.08 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.08 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.08 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#0(), @y) -> @y 768.00/213.08 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.08 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.08 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.08 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.08 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.08 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.08 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.08 , +(@x, @y) -> #add(@x, @y) 768.00/213.08 , transAcc#1(nil(), @base) -> @base 768.00/213.08 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.08 attach(@l, transAcc(@m', @base)) 768.00/213.08 , *(@x, @y) -> #mult(@x, @y) 768.00/213.08 , mkBase#1(nil()) -> nil() 768.00/213.08 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.08 , attach#1(nil(), @m) -> nil() 768.00/213.08 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.08 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.08 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.08 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.08 , #natmult(#0(), @y) -> #0() 768.00/213.08 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.08 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.08 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.08 , mkBase(@m) -> mkBase#1(@m) 768.00/213.08 , makeBase(@m) -> makeBase#1(@m) 768.00/213.08 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.08 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.08 , lineMult#1(nil(), @l) -> nil() 768.00/213.08 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.08 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.08 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #0()) -> #0() 768.00/213.08 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #0()) -> #0() 768.00/213.08 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.08 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.08 , #mult(#0(), #0()) -> #0() 768.00/213.08 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.08 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.08 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.08 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.08 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.08 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.08 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.08 , makeBase#1(nil()) -> nil() 768.00/213.08 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.08 , matrixMult(@m1, @m2) -> 768.00/213.08 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.08 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.08 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.08 , #abs(#0()) -> #0() 768.00/213.08 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.08 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.08 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.08 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.08 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.08 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.08 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.08 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.08 StartTerms: basic terms 768.00/213.08 Strategy: innermost 768.00/213.08 768.00/213.08 This problem was proven YES(O(1),O(n^1)). 768.00/213.08 768.00/213.08 S) Strict DPs: 768.00/213.08 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.08 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.08 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.08 matrixMult^#(@acc, @m)) 768.00/213.08 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.08 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.08 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.00/213.08 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.08 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.08 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.00/213.08 Weak DPs: 768.00/213.08 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.08 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.08 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.08 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.08 matrixMult^#(@m1, @m2)) 768.00/213.08 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.00/213.08 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.00/213.08 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.08 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.08 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.08 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.08 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.08 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.08 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.08 Weak Trs: 768.00/213.08 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.08 , split(@m) -> split#1(@m) 768.00/213.08 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.08 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.08 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#0(), @y) -> @y 768.00/213.08 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.08 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.08 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.08 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.08 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.08 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.08 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.08 , +(@x, @y) -> #add(@x, @y) 768.00/213.08 , transAcc#1(nil(), @base) -> @base 768.00/213.08 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.08 attach(@l, transAcc(@m', @base)) 768.00/213.08 , *(@x, @y) -> #mult(@x, @y) 768.00/213.08 , mkBase#1(nil()) -> nil() 768.00/213.08 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.08 , attach#1(nil(), @m) -> nil() 768.00/213.08 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.08 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.08 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.08 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.08 , #natmult(#0(), @y) -> #0() 768.00/213.08 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.08 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.08 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.08 , mkBase(@m) -> mkBase#1(@m) 768.00/213.08 , makeBase(@m) -> makeBase#1(@m) 768.00/213.08 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.08 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.08 , lineMult#1(nil(), @l) -> nil() 768.00/213.08 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.08 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.08 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#neg(@x), #0()) -> #0() 768.00/213.08 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.08 , #mult(#pos(@x), #0()) -> #0() 768.00/213.08 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.08 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.08 , #mult(#0(), #0()) -> #0() 768.00/213.08 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.08 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.08 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.08 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.08 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.08 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.08 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.08 , makeBase#1(nil()) -> nil() 768.00/213.08 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.08 , matrixMult(@m1, @m2) -> 768.00/213.08 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.08 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.08 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.08 , #abs(#0()) -> #0() 768.00/213.08 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.08 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.08 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.08 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.08 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.08 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.08 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.08 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.08 StartTerms: basic terms 768.00/213.08 Strategy: innermost 768.00/213.08 768.00/213.08 This problem was proven YES(O(1),O(n^1)). 768.00/213.08 768.00/213.08 768.00/213.08 Proofs for generated problems: 768.00/213.08 ------------------------------ 768.00/213.08 R) We are left with following problem, upon which TcT provides the 768.00/213.08 certificate YES(O(1),O(n^1)). 768.00/213.08 768.00/213.08 Strict DPs: 768.00/213.08 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.08 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.08 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.08 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.08 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.08 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.08 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.08 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.08 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.08 Weak DPs: 768.00/213.08 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.08 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.08 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.08 matrixMult^#(@acc, @m)) 768.00/213.08 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.08 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.08 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.08 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.08 matrixMult^#(@m1, @m2)) 768.00/213.08 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.00/213.08 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.00/213.08 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.00/213.08 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.08 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.08 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.00/213.08 Weak Trs: 768.00/213.08 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.08 , split(@m) -> split#1(@m) 768.00/213.08 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.08 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.08 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.08 , #add(#0(), @y) -> @y 768.00/213.08 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.08 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.08 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.08 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.08 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.08 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.08 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.08 , +(@x, @y) -> #add(@x, @y) 768.00/213.08 , transAcc#1(nil(), @base) -> @base 768.00/213.08 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.08 attach(@l, transAcc(@m', @base)) 768.00/213.08 , *(@x, @y) -> #mult(@x, @y) 768.00/213.08 , mkBase#1(nil()) -> nil() 768.00/213.08 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.08 , attach#1(nil(), @m) -> nil() 768.00/213.08 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.08 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.08 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.08 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.08 , #natmult(#0(), @y) -> #0() 768.00/213.08 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.08 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.08 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.08 , mkBase(@m) -> mkBase#1(@m) 768.00/213.09 , makeBase(@m) -> makeBase#1(@m) 768.00/213.09 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.09 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.09 , lineMult#1(nil(), @l) -> nil() 768.00/213.09 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.09 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.09 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.09 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.09 , #mult(#neg(@x), #0()) -> #0() 768.00/213.09 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.09 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.09 , #mult(#pos(@x), #0()) -> #0() 768.00/213.09 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.09 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.09 , #mult(#0(), #0()) -> #0() 768.00/213.09 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.09 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.09 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.09 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.09 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.09 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.09 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.09 , makeBase#1(nil()) -> nil() 768.00/213.09 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.09 , matrixMult(@m1, @m2) -> 768.00/213.09 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.09 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.09 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.09 , #abs(#0()) -> #0() 768.00/213.09 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.09 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.09 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.09 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.09 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.09 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.09 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.09 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.09 Obligation: 768.00/213.09 innermost runtime complexity 768.00/213.09 Answer: 768.00/213.09 YES(O(1),O(n^1)) 768.00/213.09 768.00/213.09 The following weak DPs constitute a sub-graph of the DG that is 768.00/213.09 closed under successors. The DPs are removed. 768.00/213.09 768.00/213.09 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.00/213.09 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.00/213.09 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.00/213.09 matrixMult^#(@acc, @m)) 768.00/213.09 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.00/213.09 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.00/213.09 , matrixMult3^#(@m1, @m2, @m3) -> 768.00/213.09 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.00/213.09 matrixMult^#(@m1, @m2)) 768.00/213.09 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.00/213.09 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.00/213.09 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.00/213.09 , transAcc#1^#(::(@l, @m'), @base) -> 768.00/213.09 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.00/213.09 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.00/213.09 768.00/213.09 We are left with following problem, upon which TcT provides the 768.00/213.09 certificate YES(O(1),O(n^1)). 768.00/213.09 768.00/213.09 Strict DPs: 768.00/213.09 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.09 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.09 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.09 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.09 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.09 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.09 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.09 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.09 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.09 Weak Trs: 768.00/213.09 { attach(@line, @m) -> attach#1(@line, @m) 768.00/213.09 , split(@m) -> split#1(@m) 768.00/213.09 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.00/213.09 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.00/213.09 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.00/213.09 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.00/213.09 , #add(#0(), @y) -> @y 768.00/213.09 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.00/213.09 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.00/213.09 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.09 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.09 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.00/213.09 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.00/213.09 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.00/213.09 , +(@x, @y) -> #add(@x, @y) 768.00/213.09 , transAcc#1(nil(), @base) -> @base 768.00/213.09 , transAcc#1(::(@l, @m'), @base) -> 768.00/213.09 attach(@l, transAcc(@m', @base)) 768.00/213.09 , *(@x, @y) -> #mult(@x, @y) 768.00/213.09 , mkBase#1(nil()) -> nil() 768.00/213.09 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.00/213.09 , attach#1(nil(), @m) -> nil() 768.00/213.09 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.00/213.09 , matrixMult'#1(nil(), @m2) -> nil() 768.00/213.09 , matrixMult'#1(::(@l, @ls), @m2) -> 768.00/213.09 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.00/213.09 , #natmult(#0(), @y) -> #0() 768.00/213.09 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.00/213.09 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.09 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.09 , mkBase(@m) -> mkBase#1(@m) 768.00/213.09 , makeBase(@m) -> makeBase#1(@m) 768.00/213.09 , mult#1(nil(), @l2) -> #abs(#0()) 768.00/213.09 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.00/213.09 , lineMult#1(nil(), @l) -> nil() 768.00/213.09 , lineMult#1(::(@x, @xs), @l) -> 768.00/213.09 ::(mult(@l, @x), lineMult(@l, @xs)) 768.00/213.09 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.09 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.09 , #mult(#neg(@x), #0()) -> #0() 768.00/213.09 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.00/213.09 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.00/213.09 , #mult(#pos(@x), #0()) -> #0() 768.00/213.09 , #mult(#0(), #neg(@y)) -> #0() 768.00/213.09 , #mult(#0(), #pos(@y)) -> #0() 768.00/213.09 , #mult(#0(), #0()) -> #0() 768.00/213.09 , attach#2(nil(), @x, @xs) -> nil() 768.00/213.09 , attach#2(::(@l, @ls), @x, @xs) -> 768.00/213.09 ::(::(@x, @l), attach(@xs, @ls)) 768.00/213.09 , #succ(#neg(#s(#0()))) -> #0() 768.00/213.09 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.00/213.09 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.00/213.09 , #succ(#0()) -> #pos(#s(#0())) 768.00/213.09 , makeBase#1(nil()) -> nil() 768.00/213.09 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.00/213.09 , matrixMult(@m1, @m2) -> 768.00/213.09 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.00/213.09 , #abs(#neg(@x)) -> #pos(@x) 768.00/213.09 , #abs(#pos(@x)) -> #pos(@x) 768.00/213.09 , #abs(#0()) -> #0() 768.00/213.09 , #abs(#s(@x)) -> #pos(#s(@x)) 768.00/213.09 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.00/213.09 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.09 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.00/213.09 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.00/213.09 , #pred(#pos(#s(#0()))) -> #0() 768.00/213.09 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.00/213.09 , #pred(#0()) -> #neg(#s(#0())) } 768.00/213.09 Obligation: 768.00/213.09 innermost runtime complexity 768.00/213.09 Answer: 768.00/213.09 YES(O(1),O(n^1)) 768.00/213.09 768.00/213.09 We replace rewrite rules by usable rules: 768.00/213.09 768.00/213.09 Weak Usable Rules: 768.00/213.09 { split(@m) -> split#1(@m) 768.00/213.09 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.09 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.09 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.09 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.09 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.09 tuple#2(::(@x, @ys), ::(@xs, @m')) } 768.00/213.09 768.00/213.09 We are left with following problem, upon which TcT provides the 768.00/213.09 certificate YES(O(1),O(n^1)). 768.00/213.09 768.00/213.09 Strict DPs: 768.00/213.09 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.09 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.09 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.09 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.09 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.09 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.09 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.09 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.00/213.09 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.09 Weak Trs: 768.00/213.09 { split(@m) -> split#1(@m) 768.00/213.09 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.09 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.09 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.09 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.09 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.09 tuple#2(::(@x, @ys), ::(@xs, @m')) } 768.00/213.09 Obligation: 768.00/213.09 innermost runtime complexity 768.00/213.09 Answer: 768.00/213.09 YES(O(1),O(n^1)) 768.00/213.09 768.00/213.09 We use the processor 'matrix interpretation of dimension 2' to 768.00/213.09 orient following rules strictly. 768.00/213.09 768.00/213.09 DPs: 768.00/213.09 { 2: split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.09 , 8: matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.09 Trs: 768.00/213.09 { split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.09 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) } 768.00/213.09 768.00/213.09 Sub-proof: 768.00/213.09 ---------- 768.00/213.09 The following argument positions are usable: 768.00/213.09 Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_8) = {1}, 768.00/213.09 Uargs(c_9) = {1}, Uargs(c_10) = {1, 2}, Uargs(c_12) = {1}, 768.00/213.09 Uargs(c_14) = {1}, Uargs(c_15) = {1} 768.00/213.09 768.00/213.09 TcT has computed the following constructor-based matrix 768.00/213.09 interpretation satisfying not(EDA) and not(IDA(1)). 768.00/213.09 768.00/213.09 [split](x1) = [4 4] x1 + [0] 768.00/213.09 [1 0] [0] 768.00/213.09 768.00/213.09 [nil] = [0] 768.00/213.09 [0] 768.00/213.09 768.00/213.09 [split#1](x1) = [0 2] x1 + [0] 768.00/213.09 [1 0] [0] 768.00/213.09 768.00/213.09 [split#2](x1, x2) = [0 0] x1 + [0 0] x2 + [4] 768.00/213.09 [0 1] [1 0] [0] 768.00/213.09 768.00/213.09 [tuple#2](x1, x2) = [0 0] x2 + [0] 768.00/213.09 [1 1] [0] 768.00/213.09 768.00/213.09 [::](x1, x2) = [0 1] x1 + [1 0] x2 + [0] 768.00/213.09 [0 0] [0 1] [2] 768.00/213.09 768.00/213.09 [split#3](x1, x2, x3) = [0 0] x1 + [0 0] x3 + [0] 768.00/213.09 [0 1] [0 1] [2] 768.00/213.09 768.00/213.09 [split^#](x1) = [0 1] x1 + [0] 768.00/213.09 [0 4] [0] 768.00/213.09 768.00/213.09 [split#1^#](x1) = [0 1] x1 + [0] 768.00/213.09 [0 4] [0] 768.00/213.09 768.00/213.09 [split#2^#](x1, x2) = [0 0] x1 + [0 1] x2 + [0] 768.00/213.09 [0 4] [0 4] [0] 768.00/213.09 768.00/213.09 [transpose^#](x1) = [1 1] x1 + [0] 768.00/213.09 [4 4] [0] 768.00/213.09 768.00/213.09 [transpose#1^#](x1, x2) = [1 1] x2 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [transpose#3^#](x1, x2) = [1 1] x1 + [0] 768.00/213.09 [4 0] [0] 768.00/213.09 768.00/213.09 [transpose#2^#](x1) = [0 1] x1 + [0] 768.00/213.09 [0 0] [4] 768.00/213.09 768.00/213.09 [matrixMultOld^#](x1, x2) = [7 7] x1 + [7 7] x2 + [7] 768.00/213.09 [7 7] [7 7] [7] 768.00/213.09 768.00/213.09 [c_5](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [c_6](x1) = [1 0] x1 + [1] 768.00/213.09 [0 0] [3] 768.00/213.09 768.00/213.09 [c_8](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 768.00/213.09 [c_9](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [c_10](x1, x2) = [1 0] x1 + [1 0] x2 + [0] 768.00/213.09 [0 0] [0 0] [0] 768.00/213.09 768.00/213.09 [c_12](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [c_14](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 768.00/213.09 [c_15](x1) = [1 0] x1 + [3] 768.00/213.09 [0 0] [7] 768.00/213.09 768.00/213.09 The order satisfies the following ordering constraints: 768.00/213.09 768.00/213.09 [split(@m)] = [4 4] @m + [0] 768.00/213.09 [1 0] [0] 768.00/213.09 >= [0 2] @m + [0] 768.00/213.09 [1 0] [0] 768.00/213.09 = [split#1(@m)] 768.00/213.09 768.00/213.09 [split#1(nil())] = [0] 768.00/213.09 [0] 768.00/213.09 >= [0] 768.00/213.09 [0] 768.00/213.09 = [tuple#2(nil(), nil())] 768.00/213.09 768.00/213.09 [split#1(::(@l, @ls))] = [0 0] @l + [0 2] @ls + [4] 768.00/213.09 [0 1] [1 0] [0] 768.00/213.09 >= [0 0] @l + [0 0] @ls + [4] 768.00/213.09 [0 1] [1 0] [0] 768.00/213.09 = [split#2(@l, @ls)] 768.00/213.09 768.00/213.09 [split#2(nil(), @ls)] = [0 0] @ls + [4] 768.00/213.09 [1 0] [0] 768.00/213.09 > [0] 768.00/213.09 [0] 768.00/213.09 = [tuple#2(nil(), nil())] 768.00/213.09 768.00/213.09 [split#2(::(@x, @xs), @ls)] = [0 0] @xs + [0 0] @ls + [4] 768.00/213.09 [0 1] [1 0] [2] 768.00/213.09 > [0 0] @xs + [0 0] @ls + [0] 768.00/213.09 [0 1] [1 0] [2] 768.00/213.09 = [split#3(split(@ls), @x, @xs)] 768.00/213.09 768.00/213.09 [split#3(tuple#2(@ys, @m'), @x, @xs)] = [0 0] @xs + [0 0] @m' + [0] 768.00/213.09 [0 1] [1 1] [2] 768.00/213.09 >= [0 0] @xs + [0 0] @m' + [0] 768.00/213.09 [0 1] [1 1] [2] 768.00/213.09 = [tuple#2(::(@x, @ys), ::(@xs, @m'))] 768.00/213.09 768.00/213.09 [split^#(@m)] = [0 1] @m + [0] 768.00/213.09 [0 4] [0] 768.00/213.09 >= [0 1] @m + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 = [c_5(split#1^#(@m))] 768.00/213.09 768.00/213.09 [split#1^#(::(@l, @ls))] = [0 1] @ls + [2] 768.00/213.09 [0 4] [8] 768.00/213.09 > [0 1] @ls + [1] 768.00/213.09 [0 0] [3] 768.00/213.09 = [c_6(split#2^#(@l, @ls))] 768.00/213.09 768.00/213.09 [split#2^#(::(@x, @xs), @ls)] = [0 0] @xs + [0 1] @ls + [0] 768.00/213.09 [0 4] [0 4] [8] 768.00/213.09 >= [0 1] @ls + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 = [c_8(split^#(@ls))] 768.00/213.09 768.00/213.09 [transpose^#(@m)] = [1 1] @m + [0] 768.00/213.09 [4 4] [0] 768.00/213.09 >= [1 1] @m + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 = [c_9(transpose#1^#(@m, @m))] 768.00/213.09 768.00/213.09 [transpose#1^#(::(@xs, @xss), @m)] = [1 1] @m + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 >= [1 1] @m + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 = [c_10(transpose#2^#(split(@m)), split^#(@m))] 768.00/213.09 768.00/213.09 [transpose#3^#(::(@y, @ys), @l)] = [0 1] @y + [1 1] @ys + [2] 768.00/213.09 [0 4] [4 0] [0] 768.00/213.09 >= [0 1] @y + [1 1] @ys + [2] 768.00/213.09 [0 0] [0 0] [0] 768.00/213.09 = [c_12(transpose^#(::(@y, @ys)))] 768.00/213.09 768.00/213.09 [transpose#2^#(tuple#2(@l, @m'))] = [1 1] @m' + [0] 768.00/213.09 [0 0] [4] 768.00/213.09 >= [1 1] @m' + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 = [c_14(transpose#3^#(@m', @l))] 768.00/213.09 768.00/213.09 [matrixMultOld^#(@m1, @m2)] = [7 7] @m2 + [7 7] @m1 + [7] 768.00/213.09 [7 7] [7 7] [7] 768.00/213.09 > [1 1] @m2 + [3] 768.00/213.09 [0 0] [7] 768.00/213.09 = [c_15(transpose^#(@m2))] 768.00/213.09 768.00/213.09 768.00/213.09 We return to the main proof. Consider the set of all dependency 768.00/213.09 pairs 768.00/213.09 768.00/213.09 : 768.00/213.09 { 1: split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.09 , 2: split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.09 , 3: split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.09 , 4: transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.09 , 5: transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.09 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.09 , 6: transpose#3^#(::(@y, @ys), @l) -> 768.00/213.09 c_12(transpose^#(::(@y, @ys))) 768.00/213.09 , 7: transpose#2^#(tuple#2(@l, @m')) -> 768.00/213.09 c_14(transpose#3^#(@m', @l)) 768.00/213.09 , 8: matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.09 768.00/213.09 Processor 'matrix interpretation of dimension 2' induces the 768.00/213.09 complexity certificate YES(?,O(n^1)) on application of dependency 768.00/213.09 pairs {2,8}. These cover all (indirect) predecessors of dependency 768.00/213.09 pairs {2,3,8}, their number of application is equally bounded. The 768.00/213.09 dependency pairs are shifted into the weak component. 768.00/213.09 768.00/213.09 We are left with following problem, upon which TcT provides the 768.00/213.09 certificate YES(O(1),O(n^1)). 768.00/213.09 768.00/213.09 Strict DPs: 768.00/213.09 { split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.09 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.09 , transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.09 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.09 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.00/213.09 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) } 768.00/213.09 Weak DPs: 768.00/213.09 { split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.09 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.09 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.09 Weak Trs: 768.00/213.09 { split(@m) -> split#1(@m) 768.00/213.09 , split#1(nil()) -> tuple#2(nil(), nil()) 768.00/213.09 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.00/213.09 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.00/213.09 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.00/213.09 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.00/213.09 tuple#2(::(@x, @ys), ::(@xs, @m')) } 768.00/213.09 Obligation: 768.00/213.09 innermost runtime complexity 768.00/213.09 Answer: 768.00/213.09 YES(O(1),O(n^1)) 768.00/213.09 768.00/213.09 We use the processor 'matrix interpretation of dimension 2' to 768.00/213.09 orient following rules strictly. 768.00/213.09 768.00/213.09 DPs: 768.00/213.09 { 2: transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.09 , 7: split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.09 , 8: matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.00/213.09 768.00/213.09 Sub-proof: 768.00/213.09 ---------- 768.00/213.09 The following argument positions are usable: 768.00/213.09 Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_8) = {1}, 768.00/213.09 Uargs(c_9) = {1}, Uargs(c_10) = {1, 2}, Uargs(c_12) = {1}, 768.00/213.09 Uargs(c_14) = {1}, Uargs(c_15) = {1} 768.00/213.09 768.00/213.09 TcT has computed the following constructor-based matrix 768.00/213.09 interpretation satisfying not(EDA) and not(IDA(1)). 768.00/213.09 768.00/213.09 [split](x1) = [0 0] x1 + [2] 768.00/213.09 [1 0] [0] 768.00/213.09 768.00/213.09 [nil] = [0] 768.00/213.09 [0] 768.00/213.09 768.00/213.09 [split#1](x1) = [0 0] x1 + [2] 768.00/213.09 [1 0] [0] 768.00/213.09 768.00/213.09 [split#2](x1, x2) = [0 0] x1 + [0 0] x2 + [2] 768.00/213.09 [1 0] [1 0] [4] 768.00/213.09 768.00/213.09 [tuple#2](x1, x2) = [0 0] x2 + [2] 768.00/213.09 [1 1] [0] 768.00/213.09 768.00/213.09 [::](x1, x2) = [1 0] x1 + [1 0] x2 + [4] 768.00/213.09 [0 0] [0 1] [1] 768.00/213.09 768.00/213.09 [split#3](x1, x2, x3) = [1 0] x1 + [0 0] x2 + [0 0] x3 + [0] 768.00/213.09 [2 1] [1 0] [1 0] [2] 768.00/213.09 768.00/213.09 [split^#](x1) = [0 1] x1 + [0] 768.00/213.09 [4 4] [0] 768.00/213.09 768.00/213.09 [split#1^#](x1) = [0 1] x1 + [0] 768.00/213.09 [0 4] [4] 768.00/213.09 768.00/213.09 [split#2^#](x1, x2) = [0 1] x2 + [1] 768.00/213.09 [4 4] [4] 768.00/213.09 768.00/213.09 [transpose^#](x1) = [3 2] x1 + [1] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [transpose#1^#](x1, x2) = [3 2] x2 + [0] 768.00/213.09 [0 0] [4] 768.00/213.09 768.00/213.09 [transpose#3^#](x1, x2) = [3 3] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [transpose#2^#](x1) = [0 3] x1 + [0] 768.00/213.09 [0 4] [0] 768.00/213.09 768.00/213.09 [matrixMultOld^#](x1, x2) = [7 7] x1 + [7 7] x2 + [7] 768.00/213.09 [7 7] [7 7] [7] 768.00/213.09 768.00/213.09 [c_5](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [c_6](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 768.00/213.09 [c_8](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 768.00/213.09 [c_9](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [c_10](x1, x2) = [1 0] x1 + [2 0] x2 + [0] 768.00/213.09 [0 0] [0 0] [3] 768.00/213.09 768.00/213.09 [c_12](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [c_14](x1) = [1 0] x1 + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 768.00/213.09 [c_15](x1) = [1 0] x1 + [3] 768.00/213.09 [0 0] [7] 768.00/213.09 768.00/213.09 The order satisfies the following ordering constraints: 768.00/213.09 768.00/213.09 [split(@m)] = [0 0] @m + [2] 768.00/213.09 [1 0] [0] 768.00/213.09 >= [0 0] @m + [2] 768.00/213.09 [1 0] [0] 768.00/213.09 = [split#1(@m)] 768.00/213.09 768.00/213.09 [split#1(nil())] = [2] 768.00/213.09 [0] 768.00/213.09 >= [2] 768.00/213.09 [0] 768.00/213.09 = [tuple#2(nil(), nil())] 768.00/213.09 768.00/213.09 [split#1(::(@l, @ls))] = [0 0] @l + [0 0] @ls + [2] 768.00/213.09 [1 0] [1 0] [4] 768.00/213.09 >= [0 0] @l + [0 0] @ls + [2] 768.00/213.09 [1 0] [1 0] [4] 768.00/213.09 = [split#2(@l, @ls)] 768.00/213.09 768.00/213.09 [split#2(nil(), @ls)] = [0 0] @ls + [2] 768.00/213.09 [1 0] [4] 768.00/213.09 >= [2] 768.00/213.09 [0] 768.00/213.09 = [tuple#2(nil(), nil())] 768.00/213.09 768.00/213.09 [split#2(::(@x, @xs), @ls)] = [0 0] @x + [0 0] @xs + [0 0] @ls + [2] 768.00/213.09 [1 0] [1 0] [1 0] [8] 768.00/213.09 >= [0 0] @x + [0 0] @xs + [0 0] @ls + [2] 768.00/213.09 [1 0] [1 0] [1 0] [6] 768.00/213.09 = [split#3(split(@ls), @x, @xs)] 768.00/213.09 768.00/213.09 [split#3(tuple#2(@ys, @m'), @x, @xs)] = [0 0] @x + [0 0] @xs + [0 0] @m' + [2] 768.00/213.09 [1 0] [1 0] [1 1] [6] 768.00/213.09 >= [0 0] @xs + [0 0] @m' + [2] 768.00/213.09 [1 0] [1 1] [5] 768.00/213.09 = [tuple#2(::(@x, @ys), ::(@xs, @m'))] 768.00/213.09 768.00/213.09 [split^#(@m)] = [0 1] @m + [0] 768.00/213.09 [4 4] [0] 768.00/213.09 >= [0 1] @m + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 = [c_5(split#1^#(@m))] 768.00/213.09 768.00/213.09 [split#1^#(::(@l, @ls))] = [0 1] @ls + [1] 768.00/213.09 [0 4] [8] 768.00/213.09 >= [0 1] @ls + [1] 768.00/213.09 [0 0] [3] 768.00/213.09 = [c_6(split#2^#(@l, @ls))] 768.00/213.09 768.00/213.09 [split#2^#(::(@x, @xs), @ls)] = [0 1] @ls + [1] 768.00/213.09 [4 4] [4] 768.00/213.09 > [0 1] @ls + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 = [c_8(split^#(@ls))] 768.00/213.09 768.00/213.09 [transpose^#(@m)] = [3 2] @m + [1] 768.00/213.09 [0 0] [0] 768.00/213.09 > [3 2] @m + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 = [c_9(transpose#1^#(@m, @m))] 768.00/213.09 768.00/213.09 [transpose#1^#(::(@xs, @xss), @m)] = [3 2] @m + [0] 768.00/213.09 [0 0] [4] 768.00/213.09 >= [3 2] @m + [0] 768.00/213.09 [0 0] [3] 768.00/213.09 = [c_10(transpose#2^#(split(@m)), split^#(@m))] 768.00/213.09 768.00/213.09 [transpose#3^#(::(@y, @ys), @l)] = [3 0] @y + [3 3] @ys + [15] 768.00/213.09 [0 0] [0 0] [0] 768.00/213.09 >= [3 0] @y + [3 2] @ys + [15] 768.00/213.09 [0 0] [0 0] [0] 768.00/213.09 = [c_12(transpose^#(::(@y, @ys)))] 768.00/213.09 768.00/213.09 [transpose#2^#(tuple#2(@l, @m'))] = [3 3] @m' + [0] 768.00/213.09 [4 4] [0] 768.00/213.09 >= [3 3] @m' + [0] 768.00/213.09 [0 0] [0] 768.00/213.09 = [c_14(transpose#3^#(@m', @l))] 768.00/213.09 768.00/213.09 [matrixMultOld^#(@m1, @m2)] = [7 7] @m2 + [7 7] @m1 + [7] 768.00/213.09 [7 7] [7 7] [7] 768.00/213.09 > [3 2] @m2 + [4] 768.00/213.09 [0 0] [7] 768.00/213.09 = [c_15(transpose^#(@m2))] 768.00/213.09 768.00/213.09 768.00/213.09 We return to the main proof. Consider the set of all dependency 768.00/213.09 pairs 768.00/213.09 768.00/213.09 : 768.00/213.09 { 1: split^#(@m) -> c_5(split#1^#(@m)) 768.00/213.09 , 2: transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.00/213.09 , 3: transpose#1^#(::(@xs, @xss), @m) -> 768.00/213.09 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.00/213.09 , 4: transpose#3^#(::(@y, @ys), @l) -> 768.00/213.09 c_12(transpose^#(::(@y, @ys))) 768.00/213.09 , 5: transpose#2^#(tuple#2(@l, @m')) -> 768.00/213.09 c_14(transpose#3^#(@m', @l)) 768.00/213.09 , 6: split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.00/213.09 , 7: split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.00/213.09 , 8: matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.24/213.10 768.24/213.10 Processor 'matrix interpretation of dimension 2' induces the 768.24/213.10 complexity certificate YES(?,O(n^1)) on application of dependency 768.24/213.10 pairs {2,7,8}. These cover all (indirect) predecessors of 768.24/213.10 dependency pairs {1,2,3,4,5,6,7,8}, their number of application is 768.24/213.10 equally bounded. The dependency pairs are shifted into the weak 768.24/213.10 component. 768.24/213.10 768.24/213.10 We are left with following problem, upon which TcT provides the 768.24/213.10 certificate YES(O(1),O(1)). 768.24/213.10 768.24/213.10 Weak DPs: 768.24/213.10 { split^#(@m) -> c_5(split#1^#(@m)) 768.24/213.10 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.24/213.10 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.24/213.10 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.24/213.10 , transpose#1^#(::(@xs, @xss), @m) -> 768.24/213.10 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.24/213.10 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.24/213.10 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.24/213.10 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.24/213.10 Weak Trs: 768.24/213.10 { split(@m) -> split#1(@m) 768.24/213.10 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.10 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.10 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.10 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.10 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.10 tuple#2(::(@x, @ys), ::(@xs, @m')) } 768.24/213.10 Obligation: 768.24/213.10 innermost runtime complexity 768.24/213.10 Answer: 768.24/213.10 YES(O(1),O(1)) 768.24/213.10 768.24/213.10 The following weak DPs constitute a sub-graph of the DG that is 768.24/213.10 closed under successors. The DPs are removed. 768.24/213.10 768.24/213.10 { split^#(@m) -> c_5(split#1^#(@m)) 768.24/213.10 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.24/213.10 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.24/213.10 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.24/213.10 , transpose#1^#(::(@xs, @xss), @m) -> 768.24/213.10 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.24/213.10 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.24/213.10 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.24/213.10 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.24/213.10 768.24/213.10 We are left with following problem, upon which TcT provides the 768.24/213.10 certificate YES(O(1),O(1)). 768.24/213.10 768.24/213.10 Weak Trs: 768.24/213.10 { split(@m) -> split#1(@m) 768.24/213.10 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.10 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.10 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.10 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.10 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.10 tuple#2(::(@x, @ys), ::(@xs, @m')) } 768.24/213.10 Obligation: 768.24/213.10 innermost runtime complexity 768.24/213.10 Answer: 768.24/213.10 YES(O(1),O(1)) 768.24/213.10 768.24/213.10 No rule is usable, rules are removed from the input problem. 768.24/213.10 768.24/213.10 We are left with following problem, upon which TcT provides the 768.24/213.10 certificate YES(O(1),O(1)). 768.24/213.10 768.24/213.10 Rules: Empty 768.24/213.10 Obligation: 768.24/213.10 innermost runtime complexity 768.24/213.10 Answer: 768.24/213.10 YES(O(1),O(1)) 768.24/213.10 768.24/213.10 Empty rules are trivially bounded 768.24/213.10 768.24/213.10 S) We are left with following problem, upon which TcT provides the 768.24/213.10 certificate YES(O(1),O(n^1)). 768.24/213.10 768.24/213.10 Strict DPs: 768.24/213.10 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.10 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.10 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.10 matrixMult^#(@acc, @m)) 768.24/213.10 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.10 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.10 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.10 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.10 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.10 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.10 Weak DPs: 768.24/213.10 { split^#(@m) -> c_5(split#1^#(@m)) 768.24/213.10 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.24/213.10 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.10 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.10 matrixMult^#(@m1, @m2)) 768.24/213.10 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.10 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.24/213.10 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.24/213.10 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.24/213.10 , transpose#1^#(::(@xs, @xss), @m) -> 768.24/213.10 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.24/213.10 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.24/213.10 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.24/213.10 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.24/213.10 Weak Trs: 768.24/213.10 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.10 , split(@m) -> split#1(@m) 768.24/213.10 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.10 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.10 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.10 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.10 , #add(#0(), @y) -> @y 768.24/213.10 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.10 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.10 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.10 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.10 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.10 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.10 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.10 , +(@x, @y) -> #add(@x, @y) 768.24/213.10 , transAcc#1(nil(), @base) -> @base 768.24/213.10 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.10 attach(@l, transAcc(@m', @base)) 768.24/213.10 , *(@x, @y) -> #mult(@x, @y) 768.24/213.10 , mkBase#1(nil()) -> nil() 768.24/213.10 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.10 , attach#1(nil(), @m) -> nil() 768.24/213.10 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.10 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.10 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.10 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.10 , #natmult(#0(), @y) -> #0() 768.24/213.10 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.10 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.10 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.10 , mkBase(@m) -> mkBase#1(@m) 768.24/213.10 , makeBase(@m) -> makeBase#1(@m) 768.24/213.10 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.10 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.10 , lineMult#1(nil(), @l) -> nil() 768.24/213.10 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.10 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.10 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.10 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.10 , #mult(#neg(@x), #0()) -> #0() 768.24/213.10 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.10 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.10 , #mult(#pos(@x), #0()) -> #0() 768.24/213.10 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.10 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.10 , #mult(#0(), #0()) -> #0() 768.24/213.10 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.10 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.10 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.10 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.10 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.10 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.10 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.10 , makeBase#1(nil()) -> nil() 768.24/213.10 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.10 , matrixMult(@m1, @m2) -> 768.24/213.10 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.10 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.10 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.10 , #abs(#0()) -> #0() 768.24/213.10 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.10 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.10 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.10 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.10 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.10 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.10 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.10 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.10 Obligation: 768.24/213.10 innermost runtime complexity 768.24/213.10 Answer: 768.24/213.10 YES(O(1),O(n^1)) 768.24/213.10 768.24/213.10 The following weak DPs constitute a sub-graph of the DG that is 768.24/213.10 closed under successors. The DPs are removed. 768.24/213.10 768.24/213.10 { split^#(@m) -> c_5(split#1^#(@m)) 768.24/213.10 , split#1^#(::(@l, @ls)) -> c_6(split#2^#(@l, @ls)) 768.24/213.10 , split#2^#(::(@x, @xs), @ls) -> c_8(split^#(@ls)) 768.24/213.10 , transpose^#(@m) -> c_9(transpose#1^#(@m, @m)) 768.24/213.10 , transpose#1^#(::(@xs, @xss), @m) -> 768.24/213.10 c_10(transpose#2^#(split(@m)), split^#(@m)) 768.24/213.10 , transpose#3^#(::(@y, @ys), @l) -> c_12(transpose^#(::(@y, @ys))) 768.24/213.10 , transpose#2^#(tuple#2(@l, @m')) -> c_14(transpose#3^#(@m', @l)) 768.24/213.10 , matrixMultOld^#(@m1, @m2) -> c_15(transpose^#(@m2)) } 768.24/213.10 768.24/213.10 We are left with following problem, upon which TcT provides the 768.24/213.10 certificate YES(O(1),O(n^1)). 768.24/213.10 768.24/213.10 Strict DPs: 768.24/213.10 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.10 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.10 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.10 matrixMult^#(@acc, @m)) 768.24/213.10 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.10 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.10 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.10 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.10 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.10 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.10 Weak DPs: 768.24/213.10 { matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.10 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.10 matrixMult^#(@m1, @m2)) 768.24/213.10 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.10 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.24/213.10 Weak Trs: 768.24/213.10 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.10 , split(@m) -> split#1(@m) 768.24/213.10 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.10 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.10 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.10 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.10 , #add(#0(), @y) -> @y 768.24/213.10 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.10 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.10 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.10 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.10 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.10 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.10 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.10 , +(@x, @y) -> #add(@x, @y) 768.24/213.10 , transAcc#1(nil(), @base) -> @base 768.24/213.10 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.10 attach(@l, transAcc(@m', @base)) 768.24/213.10 , *(@x, @y) -> #mult(@x, @y) 768.24/213.10 , mkBase#1(nil()) -> nil() 768.24/213.10 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.10 , attach#1(nil(), @m) -> nil() 768.24/213.10 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.10 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.10 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.10 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.10 , #natmult(#0(), @y) -> #0() 768.24/213.10 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.10 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.10 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.10 , mkBase(@m) -> mkBase#1(@m) 768.24/213.10 , makeBase(@m) -> makeBase#1(@m) 768.24/213.10 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.10 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.10 , lineMult#1(nil(), @l) -> nil() 768.24/213.10 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.10 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.10 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.10 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.10 , #mult(#neg(@x), #0()) -> #0() 768.24/213.10 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.10 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.10 , #mult(#pos(@x), #0()) -> #0() 768.24/213.10 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.10 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.10 , #mult(#0(), #0()) -> #0() 768.24/213.10 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.10 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.10 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.10 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.10 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.10 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.10 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.10 , makeBase#1(nil()) -> nil() 768.24/213.10 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.10 , matrixMult(@m1, @m2) -> 768.24/213.10 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.10 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.10 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.10 , #abs(#0()) -> #0() 768.24/213.10 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.10 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.10 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.10 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.10 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.10 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.10 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.10 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.10 Obligation: 768.24/213.10 innermost runtime complexity 768.24/213.10 Answer: 768.24/213.10 YES(O(1),O(n^1)) 768.24/213.10 768.24/213.10 We analyse the complexity of following sub-problems (R) and (S). 768.24/213.10 Problem (S) is obtained from the input problem by shifting strict 768.24/213.10 rules from (R) into the weak component: 768.24/213.10 768.24/213.10 Problem (R): 768.24/213.10 ------------ 768.24/213.10 Strict DPs: 768.24/213.10 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.10 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.10 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.10 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.10 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.10 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.10 Weak DPs: 768.24/213.10 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.10 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.10 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.10 matrixMult^#(@acc, @m)) 768.24/213.10 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.10 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.10 matrixMult^#(@m1, @m2)) 768.24/213.10 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.10 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.24/213.10 Weak Trs: 768.24/213.10 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.10 , split(@m) -> split#1(@m) 768.24/213.10 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.10 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.10 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.10 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.10 , #add(#0(), @y) -> @y 768.24/213.10 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.10 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.10 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.10 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.10 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.10 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.10 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.10 , +(@x, @y) -> #add(@x, @y) 768.24/213.10 , transAcc#1(nil(), @base) -> @base 768.24/213.10 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.10 attach(@l, transAcc(@m', @base)) 768.24/213.10 , *(@x, @y) -> #mult(@x, @y) 768.24/213.10 , mkBase#1(nil()) -> nil() 768.24/213.11 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.11 , attach#1(nil(), @m) -> nil() 768.24/213.11 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.11 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.11 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.11 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.11 , #natmult(#0(), @y) -> #0() 768.24/213.11 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.11 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.11 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.11 , mkBase(@m) -> mkBase#1(@m) 768.24/213.11 , makeBase(@m) -> makeBase#1(@m) 768.24/213.11 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.11 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.11 , lineMult#1(nil(), @l) -> nil() 768.24/213.11 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.11 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.11 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #0()) -> #0() 768.24/213.11 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #0()) -> #0() 768.24/213.11 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.11 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.11 , #mult(#0(), #0()) -> #0() 768.24/213.11 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.11 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.11 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.11 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.11 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.11 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.11 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.11 , makeBase#1(nil()) -> nil() 768.24/213.11 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.11 , matrixMult(@m1, @m2) -> 768.24/213.11 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.11 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.11 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.11 , #abs(#0()) -> #0() 768.24/213.11 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.11 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.11 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.11 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.11 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.11 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.11 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.11 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.11 StartTerms: basic terms 768.24/213.11 Strategy: innermost 768.24/213.11 768.24/213.11 Problem (S): 768.24/213.11 ------------ 768.24/213.11 Strict DPs: 768.24/213.11 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.11 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.11 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.11 matrixMult^#(@acc, @m)) } 768.24/213.11 Weak DPs: 768.24/213.11 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.11 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.11 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.11 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.11 matrixMult^#(@m1, @m2)) 768.24/213.11 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.11 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.24/213.11 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.11 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.11 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.11 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.11 Weak Trs: 768.24/213.11 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.11 , split(@m) -> split#1(@m) 768.24/213.11 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.11 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.11 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#0(), @y) -> @y 768.24/213.11 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.11 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.11 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.11 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.11 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.11 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.11 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.11 , +(@x, @y) -> #add(@x, @y) 768.24/213.11 , transAcc#1(nil(), @base) -> @base 768.24/213.11 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.11 attach(@l, transAcc(@m', @base)) 768.24/213.11 , *(@x, @y) -> #mult(@x, @y) 768.24/213.11 , mkBase#1(nil()) -> nil() 768.24/213.11 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.11 , attach#1(nil(), @m) -> nil() 768.24/213.11 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.11 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.11 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.11 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.11 , #natmult(#0(), @y) -> #0() 768.24/213.11 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.11 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.11 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.11 , mkBase(@m) -> mkBase#1(@m) 768.24/213.11 , makeBase(@m) -> makeBase#1(@m) 768.24/213.11 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.11 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.11 , lineMult#1(nil(), @l) -> nil() 768.24/213.11 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.11 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.11 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #0()) -> #0() 768.24/213.11 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #0()) -> #0() 768.24/213.11 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.11 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.11 , #mult(#0(), #0()) -> #0() 768.24/213.11 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.11 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.11 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.11 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.11 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.11 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.11 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.11 , makeBase#1(nil()) -> nil() 768.24/213.11 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.11 , matrixMult(@m1, @m2) -> 768.24/213.11 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.11 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.11 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.11 , #abs(#0()) -> #0() 768.24/213.11 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.11 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.11 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.11 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.11 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.11 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.11 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.11 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.11 StartTerms: basic terms 768.24/213.11 Strategy: innermost 768.24/213.11 768.24/213.11 Overall, the transformation results in the following sub-problem(s): 768.24/213.11 768.24/213.11 Generated new problems: 768.24/213.11 ----------------------- 768.24/213.11 R) Strict DPs: 768.24/213.11 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.11 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.11 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.11 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.11 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.11 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.11 Weak DPs: 768.24/213.11 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.11 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.11 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.11 matrixMult^#(@acc, @m)) 768.24/213.11 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.11 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.11 matrixMult^#(@m1, @m2)) 768.24/213.11 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.11 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.24/213.11 Weak Trs: 768.24/213.11 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.11 , split(@m) -> split#1(@m) 768.24/213.11 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.11 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.11 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#0(), @y) -> @y 768.24/213.11 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.11 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.11 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.11 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.11 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.11 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.11 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.11 , +(@x, @y) -> #add(@x, @y) 768.24/213.11 , transAcc#1(nil(), @base) -> @base 768.24/213.11 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.11 attach(@l, transAcc(@m', @base)) 768.24/213.11 , *(@x, @y) -> #mult(@x, @y) 768.24/213.11 , mkBase#1(nil()) -> nil() 768.24/213.11 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.11 , attach#1(nil(), @m) -> nil() 768.24/213.11 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.11 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.11 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.11 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.11 , #natmult(#0(), @y) -> #0() 768.24/213.11 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.11 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.11 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.11 , mkBase(@m) -> mkBase#1(@m) 768.24/213.11 , makeBase(@m) -> makeBase#1(@m) 768.24/213.11 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.11 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.11 , lineMult#1(nil(), @l) -> nil() 768.24/213.11 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.11 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.11 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #0()) -> #0() 768.24/213.11 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #0()) -> #0() 768.24/213.11 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.11 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.11 , #mult(#0(), #0()) -> #0() 768.24/213.11 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.11 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.11 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.11 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.11 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.11 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.11 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.11 , makeBase#1(nil()) -> nil() 768.24/213.11 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.11 , matrixMult(@m1, @m2) -> 768.24/213.11 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.11 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.11 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.11 , #abs(#0()) -> #0() 768.24/213.11 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.11 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.11 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.11 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.11 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.11 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.11 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.11 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.11 StartTerms: basic terms 768.24/213.11 Strategy: innermost 768.24/213.11 768.24/213.11 This problem was proven YES(O(1),O(n^1)). 768.24/213.11 768.24/213.11 S) Strict DPs: 768.24/213.11 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.11 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.11 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.11 matrixMult^#(@acc, @m)) } 768.24/213.11 Weak DPs: 768.24/213.11 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.11 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.11 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.11 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.11 matrixMult^#(@m1, @m2)) 768.24/213.11 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.11 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.24/213.11 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.11 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.11 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.11 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.11 Weak Trs: 768.24/213.11 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.11 , split(@m) -> split#1(@m) 768.24/213.11 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.11 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.11 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#0(), @y) -> @y 768.24/213.11 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.11 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.11 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.11 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.11 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.11 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.11 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.11 , +(@x, @y) -> #add(@x, @y) 768.24/213.11 , transAcc#1(nil(), @base) -> @base 768.24/213.11 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.11 attach(@l, transAcc(@m', @base)) 768.24/213.11 , *(@x, @y) -> #mult(@x, @y) 768.24/213.11 , mkBase#1(nil()) -> nil() 768.24/213.11 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.11 , attach#1(nil(), @m) -> nil() 768.24/213.11 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.11 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.11 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.11 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.11 , #natmult(#0(), @y) -> #0() 768.24/213.11 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.11 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.11 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.11 , mkBase(@m) -> mkBase#1(@m) 768.24/213.11 , makeBase(@m) -> makeBase#1(@m) 768.24/213.11 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.11 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.11 , lineMult#1(nil(), @l) -> nil() 768.24/213.11 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.11 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.11 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #0()) -> #0() 768.24/213.11 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #0()) -> #0() 768.24/213.11 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.11 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.11 , #mult(#0(), #0()) -> #0() 768.24/213.11 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.11 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.11 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.11 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.11 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.11 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.11 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.11 , makeBase#1(nil()) -> nil() 768.24/213.11 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.11 , matrixMult(@m1, @m2) -> 768.24/213.11 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.11 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.11 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.11 , #abs(#0()) -> #0() 768.24/213.11 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.11 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.11 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.11 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.11 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.11 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.11 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.11 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.11 StartTerms: basic terms 768.24/213.11 Strategy: innermost 768.24/213.11 768.24/213.11 This problem was proven YES(O(1),O(n^1)). 768.24/213.11 768.24/213.11 768.24/213.11 Proofs for generated problems: 768.24/213.11 ------------------------------ 768.24/213.11 R) We are left with following problem, upon which TcT provides the 768.24/213.11 certificate YES(O(1),O(n^1)). 768.24/213.11 768.24/213.11 Strict DPs: 768.24/213.11 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.11 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.11 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.11 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.11 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.11 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.11 Weak DPs: 768.24/213.11 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.11 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.11 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.11 matrixMult^#(@acc, @m)) 768.24/213.11 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.11 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.11 matrixMult^#(@m1, @m2)) 768.24/213.11 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.11 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.24/213.11 Weak Trs: 768.24/213.11 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.11 , split(@m) -> split#1(@m) 768.24/213.11 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.11 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.11 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#0(), @y) -> @y 768.24/213.11 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.11 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.11 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.11 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.11 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.11 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.11 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.11 , +(@x, @y) -> #add(@x, @y) 768.24/213.11 , transAcc#1(nil(), @base) -> @base 768.24/213.11 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.11 attach(@l, transAcc(@m', @base)) 768.24/213.11 , *(@x, @y) -> #mult(@x, @y) 768.24/213.11 , mkBase#1(nil()) -> nil() 768.24/213.11 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.11 , attach#1(nil(), @m) -> nil() 768.24/213.11 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.11 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.11 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.11 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.11 , #natmult(#0(), @y) -> #0() 768.24/213.11 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.11 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.11 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.11 , mkBase(@m) -> mkBase#1(@m) 768.24/213.11 , makeBase(@m) -> makeBase#1(@m) 768.24/213.11 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.11 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.11 , lineMult#1(nil(), @l) -> nil() 768.24/213.11 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.11 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.11 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #0()) -> #0() 768.24/213.11 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #0()) -> #0() 768.24/213.11 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.11 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.11 , #mult(#0(), #0()) -> #0() 768.24/213.11 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.11 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.11 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.11 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.11 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.11 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.11 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.11 , makeBase#1(nil()) -> nil() 768.24/213.11 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.11 , matrixMult(@m1, @m2) -> 768.24/213.11 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.11 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.11 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.11 , #abs(#0()) -> #0() 768.24/213.11 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.11 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.11 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.11 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.11 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.11 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.11 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.11 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.11 Obligation: 768.24/213.11 innermost runtime complexity 768.24/213.11 Answer: 768.24/213.11 YES(O(1),O(n^1)) 768.24/213.11 768.24/213.11 We replace rewrite rules by usable rules: 768.24/213.11 768.24/213.11 Weak Usable Rules: 768.24/213.11 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.11 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.11 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.11 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.11 , #add(#0(), @y) -> @y 768.24/213.11 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.11 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.11 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.11 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.11 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.11 , +(@x, @y) -> #add(@x, @y) 768.24/213.11 , transAcc#1(nil(), @base) -> @base 768.24/213.11 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.11 attach(@l, transAcc(@m', @base)) 768.24/213.11 , *(@x, @y) -> #mult(@x, @y) 768.24/213.11 , mkBase#1(nil()) -> nil() 768.24/213.11 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.11 , attach#1(nil(), @m) -> nil() 768.24/213.11 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.11 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.11 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.11 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.11 , #natmult(#0(), @y) -> #0() 768.24/213.11 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.11 , mkBase(@m) -> mkBase#1(@m) 768.24/213.11 , makeBase(@m) -> makeBase#1(@m) 768.24/213.11 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.11 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.11 , lineMult#1(nil(), @l) -> nil() 768.24/213.11 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.11 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.11 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#neg(@x), #0()) -> #0() 768.24/213.11 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.11 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.12 , #mult(#pos(@x), #0()) -> #0() 768.24/213.12 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.12 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.12 , #mult(#0(), #0()) -> #0() 768.24/213.12 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.12 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.12 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.12 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.12 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.12 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.12 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.12 , makeBase#1(nil()) -> nil() 768.24/213.12 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.12 , matrixMult(@m1, @m2) -> 768.24/213.12 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.12 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.12 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.12 , #abs(#0()) -> #0() 768.24/213.12 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.12 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.12 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.12 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.12 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.12 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.12 768.24/213.12 We are left with following problem, upon which TcT provides the 768.24/213.12 certificate YES(O(1),O(n^1)). 768.24/213.12 768.24/213.12 Strict DPs: 768.24/213.12 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.12 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.12 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.12 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.12 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.12 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.12 Weak DPs: 768.24/213.12 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.12 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.12 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.12 matrixMult^#(@acc, @m)) 768.24/213.12 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.12 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.12 matrixMult^#(@m1, @m2)) 768.24/213.12 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.12 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.24/213.12 Weak Trs: 768.24/213.12 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.12 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.12 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.12 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.12 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.12 , #add(#0(), @y) -> @y 768.24/213.12 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.12 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.12 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.12 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.12 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.12 , +(@x, @y) -> #add(@x, @y) 768.24/213.12 , transAcc#1(nil(), @base) -> @base 768.24/213.12 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.12 attach(@l, transAcc(@m', @base)) 768.24/213.12 , *(@x, @y) -> #mult(@x, @y) 768.24/213.12 , mkBase#1(nil()) -> nil() 768.24/213.12 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.12 , attach#1(nil(), @m) -> nil() 768.24/213.12 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.12 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.12 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.12 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.12 , #natmult(#0(), @y) -> #0() 768.24/213.12 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.12 , mkBase(@m) -> mkBase#1(@m) 768.24/213.12 , makeBase(@m) -> makeBase#1(@m) 768.24/213.12 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.12 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.12 , lineMult#1(nil(), @l) -> nil() 768.24/213.12 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.12 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.12 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.12 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.12 , #mult(#neg(@x), #0()) -> #0() 768.24/213.12 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.12 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.12 , #mult(#pos(@x), #0()) -> #0() 768.24/213.12 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.12 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.12 , #mult(#0(), #0()) -> #0() 768.24/213.12 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.12 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.12 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.12 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.12 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.12 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.12 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.12 , makeBase#1(nil()) -> nil() 768.24/213.12 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.12 , matrixMult(@m1, @m2) -> 768.24/213.12 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.12 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.12 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.12 , #abs(#0()) -> #0() 768.24/213.12 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.12 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.12 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.12 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.12 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.12 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.12 Obligation: 768.24/213.12 innermost runtime complexity 768.24/213.12 Answer: 768.24/213.12 YES(O(1),O(n^1)) 768.24/213.12 768.24/213.12 We use the processor 'matrix interpretation of dimension 1' to 768.24/213.12 orient following rules strictly. 768.24/213.12 768.24/213.12 DPs: 768.24/213.12 { 2: attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.12 , 4: transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.12 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.12 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.12 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.12 matrixMult^#(@acc, @m)) 768.24/213.12 , 10: transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.24/213.12 768.24/213.12 Sub-proof: 768.24/213.12 ---------- 768.24/213.12 The following argument positions are usable: 768.24/213.12 Uargs(c_1) = {1}, Uargs(c_2) = {1, 2}, Uargs(c_3) = {1}, 768.24/213.12 Uargs(c_4) = {1}, Uargs(c_7) = {1}, Uargs(c_11) = {1, 2}, 768.24/213.12 Uargs(c_13) = {1}, Uargs(c_16) = {1, 2}, Uargs(c_17) = {1}, 768.24/213.12 Uargs(c_18) = {1} 768.24/213.12 768.24/213.12 TcT has computed the following constructor-based matrix 768.24/213.12 interpretation satisfying not(EDA). 768.24/213.12 768.24/213.12 [attach](x1, x2) = [3] x1 + [0] 768.24/213.12 768.24/213.12 [#add](x1, x2) = [0] 768.24/213.12 768.24/213.12 [mult#2](x1, x2, x3) = [4] x2 + [7] x3 + [0] 768.24/213.12 768.24/213.12 [nil] = [0] 768.24/213.12 768.24/213.12 [matrixMult'](x1, x2) = [4] x1 + [0] 768.24/213.12 768.24/213.12 [transAcc](x1, x2) = [0] 768.24/213.12 768.24/213.12 [mult](x1, x2) = [0] 768.24/213.12 768.24/213.12 [+](x1, x2) = [0] 768.24/213.12 768.24/213.12 [transAcc#1](x1, x2) = [4] x2 + [0] 768.24/213.12 768.24/213.12 [#neg](x1) = [0] 768.24/213.12 768.24/213.12 [*](x1, x2) = [0] 768.24/213.12 768.24/213.12 [mkBase#1](x1) = [0] 768.24/213.12 768.24/213.12 [attach#1](x1, x2) = [4] x2 + [0] 768.24/213.12 768.24/213.12 [matrixMult'#1](x1, x2) = [0] 768.24/213.12 768.24/213.12 [#natmult](x1, x2) = [0] 768.24/213.12 768.24/213.12 [#pos](x1) = [0] 768.24/213.12 768.24/213.12 [mkBase](x1) = [2] x1 + [0] 768.24/213.12 768.24/213.12 [makeBase](x1) = [0] 768.24/213.12 768.24/213.12 [mult#1](x1, x2) = [4] x2 + [0] 768.24/213.12 768.24/213.12 [::](x1, x2) = [1] x1 + [1] x2 + [2] 768.24/213.12 768.24/213.12 [lineMult#1](x1, x2) = [4] x2 + [0] 768.24/213.12 768.24/213.12 [#mult](x1, x2) = [0] 768.24/213.12 768.24/213.12 [attach#2](x1, x2, x3) = [4] x2 + [7] x3 + [0] 768.24/213.12 768.24/213.12 [#succ](x1) = [0] 768.24/213.12 768.24/213.12 [#0] = [0] 768.24/213.12 768.24/213.12 [makeBase#1](x1) = [0] 768.24/213.12 768.24/213.12 [matrixMult](x1, x2) = [0] 768.24/213.12 768.24/213.12 [#abs](x1) = [0] 768.24/213.12 768.24/213.12 [lineMult](x1, x2) = [0] 768.24/213.12 768.24/213.12 [#pred](x1) = [0] 768.24/213.12 768.24/213.12 [#s](x1) = [0] 768.24/213.12 768.24/213.12 [matrixMultList^#](x1, x2) = [4] x2 + [0] 768.24/213.12 768.24/213.12 [matrixMultList#1^#](x1, x2) = [4] x1 + [0] 768.24/213.12 768.24/213.12 [attach^#](x1, x2) = [4] x1 + [0] 768.24/213.12 768.24/213.12 [attach#1^#](x1, x2) = [4] x1 + [0] 768.24/213.12 768.24/213.12 [matrixMult3^#](x1, x2, x3) = [7] x1 + [7] x2 + [7] x3 + [7] 768.24/213.12 768.24/213.12 [matrixMult^#](x1, x2) = [4] x2 + [0] 768.24/213.12 768.24/213.12 [transpose'^#](x1) = [7] x1 + [7] 768.24/213.12 768.24/213.12 [transAcc^#](x1, x2) = [4] x1 + [0] 768.24/213.12 768.24/213.12 [transAcc#1^#](x1, x2) = [4] x1 + [0] 768.24/213.12 768.24/213.12 [attach#2^#](x1, x2, x3) = [4] x2 + [4] x3 + [0] 768.24/213.12 768.24/213.12 [c_1](x1) = [1] x1 + [0] 768.24/213.12 768.24/213.12 [c_2](x1, x2) = [1] x1 + [1] x2 + [7] 768.24/213.12 768.24/213.12 [c_3](x1) = [1] x1 + [0] 768.24/213.12 768.24/213.12 [c_4](x1) = [1] x1 + [1] 768.24/213.12 768.24/213.12 [c_7](x1) = [1] x1 + [0] 768.24/213.12 768.24/213.12 [c_11](x1, x2) = [1] x1 + [1] x2 + [7] 768.24/213.12 768.24/213.12 [c_13](x1) = [1] x1 + [0] 768.24/213.12 768.24/213.12 [c_16](x1, x2) = [1] x1 + [1] x2 + [7] 768.24/213.12 768.24/213.12 [c_17](x1) = [1] x1 + [0] 768.24/213.12 768.24/213.12 [c_18](x1) = [1] x1 + [3] 768.24/213.12 768.24/213.12 The order satisfies the following ordering constraints: 768.24/213.12 768.24/213.12 [attach(@line, @m)] = [3] @line + [0] 768.24/213.12 ? [4] @m + [0] 768.24/213.12 = [attach#1(@line, @m)] 768.24/213.12 768.24/213.12 [#add(#neg(#s(#0())), @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pred(@y)] 768.24/213.12 768.24/213.12 [#add(#neg(#s(#s(@x))), @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pred(#add(#pos(#s(@x)), @y))] 768.24/213.12 768.24/213.12 [#add(#pos(#s(#0())), @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#succ(@y)] 768.24/213.12 768.24/213.12 [#add(#pos(#s(#s(@x))), @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#succ(#add(#pos(#s(@x)), @y))] 768.24/213.12 768.24/213.12 [#add(#0(), @y)] = [0] 768.24/213.12 ? [1] @y + [0] 768.24/213.12 = [@y] 768.24/213.12 768.24/213.12 [mult#2(nil(), @x, @xs)] = [4] @x + [7] @xs + [0] 768.24/213.12 >= [0] 768.24/213.12 = [#abs(#0())] 768.24/213.12 768.24/213.12 [mult#2(::(@y, @ys), @x, @xs)] = [4] @x + [7] @xs + [0] 768.24/213.12 >= [0] 768.24/213.12 = [+(*(@x, @y), mult(@xs, @ys))] 768.24/213.12 768.24/213.12 [matrixMult'(@m1, @m2)] = [4] @m1 + [0] 768.24/213.12 >= [0] 768.24/213.12 = [matrixMult'#1(@m1, @m2)] 768.24/213.12 768.24/213.12 [transAcc(@m, @base)] = [0] 768.24/213.12 ? [4] @base + [0] 768.24/213.12 = [transAcc#1(@m, @base)] 768.24/213.12 768.24/213.12 [mult(@l1, @l2)] = [0] 768.24/213.12 ? [4] @l2 + [0] 768.24/213.12 = [mult#1(@l1, @l2)] 768.24/213.12 768.24/213.12 [+(@x, @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#add(@x, @y)] 768.24/213.12 768.24/213.12 [transAcc#1(nil(), @base)] = [4] @base + [0] 768.24/213.12 >= [1] @base + [0] 768.24/213.12 = [@base] 768.24/213.12 768.24/213.12 [transAcc#1(::(@l, @m'), @base)] = [4] @base + [0] 768.24/213.12 ? [3] @l + [0] 768.24/213.12 = [attach(@l, transAcc(@m', @base))] 768.24/213.12 768.24/213.12 [*(@x, @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#mult(@x, @y)] 768.24/213.12 768.24/213.12 [mkBase#1(nil())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [nil()] 768.24/213.12 768.24/213.12 [mkBase#1(::(@l, @m'))] = [0] 768.24/213.12 ? [2] @m' + [2] 768.24/213.12 = [::(nil(), mkBase(@m'))] 768.24/213.12 768.24/213.12 [attach#1(nil(), @m)] = [4] @m + [0] 768.24/213.12 >= [0] 768.24/213.12 = [nil()] 768.24/213.12 768.24/213.12 [attach#1(::(@x, @xs), @m)] = [4] @m + [0] 768.24/213.12 ? [4] @x + [7] @xs + [0] 768.24/213.12 = [attach#2(@m, @x, @xs)] 768.24/213.12 768.24/213.12 [matrixMult'#1(nil(), @m2)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [nil()] 768.24/213.12 768.24/213.12 [matrixMult'#1(::(@l, @ls), @m2)] = [0] 768.24/213.12 ? [4] @ls + [2] 768.24/213.12 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 768.24/213.12 768.24/213.12 [#natmult(#0(), @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#natmult(#s(@x), @y)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#add(#pos(@y), #natmult(@x, @y))] 768.24/213.12 768.24/213.12 [mkBase(@m)] = [2] @m + [0] 768.24/213.12 >= [0] 768.24/213.12 = [mkBase#1(@m)] 768.24/213.12 768.24/213.12 [makeBase(@m)] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [makeBase#1(@m)] 768.24/213.12 768.24/213.12 [mult#1(nil(), @l2)] = [4] @l2 + [0] 768.24/213.12 >= [0] 768.24/213.12 = [#abs(#0())] 768.24/213.12 768.24/213.12 [mult#1(::(@x, @xs), @l2)] = [4] @l2 + [0] 768.24/213.12 ? [4] @x + [7] @xs + [0] 768.24/213.12 = [mult#2(@l2, @x, @xs)] 768.24/213.12 768.24/213.12 [lineMult#1(nil(), @l)] = [4] @l + [0] 768.24/213.12 >= [0] 768.24/213.12 = [nil()] 768.24/213.12 768.24/213.12 [lineMult#1(::(@x, @xs), @l)] = [4] @l + [0] 768.24/213.12 ? [2] 768.24/213.12 = [::(mult(@l, @x), lineMult(@l, @xs))] 768.24/213.12 768.24/213.12 [#mult(#neg(@x), #neg(@y))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(#natmult(@x, @y))] 768.24/213.12 768.24/213.12 [#mult(#neg(@x), #pos(@y))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#neg(#natmult(@x, @y))] 768.24/213.12 768.24/213.12 [#mult(#neg(@x), #0())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#mult(#pos(@x), #neg(@y))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#neg(#natmult(@x, @y))] 768.24/213.12 768.24/213.12 [#mult(#pos(@x), #pos(@y))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(#natmult(@x, @y))] 768.24/213.12 768.24/213.12 [#mult(#pos(@x), #0())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#mult(#0(), #neg(@y))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#mult(#0(), #pos(@y))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#mult(#0(), #0())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [attach#2(nil(), @x, @xs)] = [4] @x + [7] @xs + [0] 768.24/213.12 >= [0] 768.24/213.12 = [nil()] 768.24/213.12 768.24/213.12 [attach#2(::(@l, @ls), @x, @xs)] = [4] @x + [7] @xs + [0] 768.24/213.12 ? [1] @x + [3] @xs + [1] @l + [4] 768.24/213.12 = [::(::(@x, @l), attach(@xs, @ls))] 768.24/213.12 768.24/213.12 [#succ(#neg(#s(#0())))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#succ(#neg(#s(#s(@x))))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#neg(#s(@x))] 768.24/213.12 768.24/213.12 [#succ(#pos(#s(@x)))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(#s(#s(@x)))] 768.24/213.12 768.24/213.12 [#succ(#0())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(#s(#0()))] 768.24/213.12 768.24/213.12 [makeBase#1(nil())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [nil()] 768.24/213.12 768.24/213.12 [makeBase#1(::(@l, @m'))] = [0] 768.24/213.12 ? [2] @l + [0] 768.24/213.12 = [mkBase(@l)] 768.24/213.12 768.24/213.12 [matrixMult(@m1, @m2)] = [0] 768.24/213.12 ? [4] @m1 + [0] 768.24/213.12 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 768.24/213.12 768.24/213.12 [#abs(#neg(@x))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(@x)] 768.24/213.12 768.24/213.12 [#abs(#pos(@x))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(@x)] 768.24/213.12 768.24/213.12 [#abs(#0())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#abs(#s(@x))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(#s(@x))] 768.24/213.12 768.24/213.12 [lineMult(@l, @m2)] = [0] 768.24/213.12 ? [4] @l + [0] 768.24/213.12 = [lineMult#1(@m2, @l)] 768.24/213.12 768.24/213.12 [#pred(#neg(#s(@x)))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#neg(#s(#s(@x)))] 768.24/213.12 768.24/213.12 [#pred(#pos(#s(#0())))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#0()] 768.24/213.12 768.24/213.12 [#pred(#pos(#s(#s(@x))))] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#pos(#s(@x))] 768.24/213.12 768.24/213.12 [#pred(#0())] = [0] 768.24/213.12 >= [0] 768.24/213.12 = [#neg(#s(#0()))] 768.24/213.12 768.24/213.12 [matrixMultList^#(@acc, @mm)] = [4] @mm + [0] 768.24/213.12 >= [4] @mm + [0] 768.24/213.12 = [c_1(matrixMultList#1^#(@mm, @acc))] 768.24/213.12 768.24/213.12 [matrixMultList#1^#(::(@m, @ms), @acc)] = [4] @m + [4] @ms + [8] 768.24/213.12 > [4] @m + [4] @ms + [7] 768.24/213.12 = [c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.12 matrixMult^#(@acc, @m))] 768.24/213.12 768.24/213.12 [attach^#(@line, @m)] = [4] @line + [0] 768.24/213.12 >= [4] @line + [0] 768.24/213.12 = [c_3(attach#1^#(@line, @m))] 768.24/213.12 768.24/213.12 [attach#1^#(::(@x, @xs), @m)] = [4] @x + [4] @xs + [8] 768.24/213.12 > [4] @x + [4] @xs + [1] 768.24/213.12 = [c_4(attach#2^#(@m, @x, @xs))] 768.24/213.12 768.24/213.12 [matrixMult3^#(@m1, @m2, @m3)] = [7] @m2 + [7] @m1 + [7] @m3 + [7] 768.24/213.12 >= [4] @m2 + [4] @m3 + [7] 768.24/213.12 = [c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.12 matrixMult^#(@m1, @m2))] 768.24/213.12 768.24/213.12 [matrixMult^#(@m1, @m2)] = [4] @m2 + [0] 768.24/213.12 >= [4] @m2 + [0] 768.24/213.12 = [c_17(transAcc^#(@m2, makeBase(@m2)))] 768.24/213.12 768.24/213.12 [transpose'^#(@m)] = [7] @m + [7] 768.24/213.12 > [4] @m + [3] 768.24/213.12 = [c_18(transAcc^#(@m, makeBase(@m)))] 768.24/213.12 768.24/213.12 [transAcc^#(@m, @base)] = [4] @m + [0] 768.24/213.12 >= [4] @m + [0] 768.24/213.12 = [c_7(transAcc#1^#(@m, @base))] 768.24/213.12 768.24/213.12 [transAcc#1^#(::(@l, @m'), @base)] = [4] @l + [4] @m' + [8] 768.24/213.12 > [4] @l + [4] @m' + [7] 768.24/213.12 = [c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base))] 768.24/213.12 768.24/213.12 [attach#2^#(::(@l, @ls), @x, @xs)] = [4] @x + [4] @xs + [0] 768.24/213.12 >= [4] @xs + [0] 768.24/213.12 = [c_13(attach^#(@xs, @ls))] 768.24/213.12 768.24/213.12 768.24/213.12 We return to the main proof. Consider the set of all dependency 768.24/213.12 pairs 768.24/213.12 768.24/213.12 : 768.24/213.12 { 1: attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.12 , 2: attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.12 , 3: transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.12 , 4: transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.12 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.12 , 5: attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) 768.24/213.12 , 6: matrixMultList^#(@acc, @mm) -> 768.24/213.12 c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.12 , 7: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.12 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.12 matrixMult^#(@acc, @m)) 768.24/213.12 , 8: matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.12 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.12 matrixMult^#(@m1, @m2)) 768.24/213.12 , 9: matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.12 , 10: transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) } 768.24/213.12 768.24/213.12 Processor 'matrix interpretation of dimension 1' induces the 768.24/213.13 complexity certificate YES(?,O(n^1)) on application of dependency 768.24/213.13 pairs {2,4,7,10}. These cover all (indirect) predecessors of 768.24/213.13 dependency pairs {1,2,3,4,5,6,7,8,9,10}, their number of 768.24/213.13 application is equally bounded. The dependency pairs are shifted 768.24/213.13 into the weak component. 768.24/213.13 768.24/213.13 We are left with following problem, upon which TcT provides the 768.24/213.13 certificate YES(O(1),O(1)). 768.24/213.13 768.24/213.13 Weak DPs: 768.24/213.13 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.13 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.13 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.13 matrixMult^#(@acc, @m)) 768.24/213.13 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.13 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.13 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.13 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.13 matrixMult^#(@m1, @m2)) 768.24/213.13 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.13 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.24/213.13 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.13 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.13 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.13 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.13 Weak Trs: 768.24/213.13 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.13 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.13 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.13 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#0(), @y) -> @y 768.24/213.13 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.13 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.13 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.13 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.13 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.13 , +(@x, @y) -> #add(@x, @y) 768.24/213.13 , transAcc#1(nil(), @base) -> @base 768.24/213.13 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.13 attach(@l, transAcc(@m', @base)) 768.24/213.13 , *(@x, @y) -> #mult(@x, @y) 768.24/213.13 , mkBase#1(nil()) -> nil() 768.24/213.13 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.13 , attach#1(nil(), @m) -> nil() 768.24/213.13 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.13 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.13 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.13 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.13 , #natmult(#0(), @y) -> #0() 768.24/213.13 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.13 , mkBase(@m) -> mkBase#1(@m) 768.24/213.13 , makeBase(@m) -> makeBase#1(@m) 768.24/213.13 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.13 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.13 , lineMult#1(nil(), @l) -> nil() 768.24/213.13 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.13 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.13 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #0()) -> #0() 768.24/213.13 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #0()) -> #0() 768.24/213.13 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.13 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.13 , #mult(#0(), #0()) -> #0() 768.24/213.13 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.13 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.13 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.13 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.13 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.13 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.13 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.13 , makeBase#1(nil()) -> nil() 768.24/213.13 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.13 , matrixMult(@m1, @m2) -> 768.24/213.13 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.13 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.13 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.13 , #abs(#0()) -> #0() 768.24/213.13 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.13 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.13 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.13 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.13 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.13 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.13 Obligation: 768.24/213.13 innermost runtime complexity 768.24/213.13 Answer: 768.24/213.13 YES(O(1),O(1)) 768.24/213.13 768.24/213.13 The following weak DPs constitute a sub-graph of the DG that is 768.24/213.13 closed under successors. The DPs are removed. 768.24/213.13 768.24/213.13 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.13 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.13 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.13 matrixMult^#(@acc, @m)) 768.24/213.13 , attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.13 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.13 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.13 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.13 matrixMult^#(@m1, @m2)) 768.24/213.13 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.13 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.24/213.13 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.13 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.13 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.13 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.13 768.24/213.13 We are left with following problem, upon which TcT provides the 768.24/213.13 certificate YES(O(1),O(1)). 768.24/213.13 768.24/213.13 Weak Trs: 768.24/213.13 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.13 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.13 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.13 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#0(), @y) -> @y 768.24/213.13 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.13 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.13 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.13 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.13 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.13 , +(@x, @y) -> #add(@x, @y) 768.24/213.13 , transAcc#1(nil(), @base) -> @base 768.24/213.13 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.13 attach(@l, transAcc(@m', @base)) 768.24/213.13 , *(@x, @y) -> #mult(@x, @y) 768.24/213.13 , mkBase#1(nil()) -> nil() 768.24/213.13 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.13 , attach#1(nil(), @m) -> nil() 768.24/213.13 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.13 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.13 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.13 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.13 , #natmult(#0(), @y) -> #0() 768.24/213.13 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.13 , mkBase(@m) -> mkBase#1(@m) 768.24/213.13 , makeBase(@m) -> makeBase#1(@m) 768.24/213.13 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.13 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.13 , lineMult#1(nil(), @l) -> nil() 768.24/213.13 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.13 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.13 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #0()) -> #0() 768.24/213.13 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #0()) -> #0() 768.24/213.13 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.13 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.13 , #mult(#0(), #0()) -> #0() 768.24/213.13 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.13 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.13 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.13 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.13 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.13 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.13 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.13 , makeBase#1(nil()) -> nil() 768.24/213.13 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.13 , matrixMult(@m1, @m2) -> 768.24/213.13 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.13 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.13 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.13 , #abs(#0()) -> #0() 768.24/213.13 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.13 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.13 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.13 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.13 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.13 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.13 Obligation: 768.24/213.13 innermost runtime complexity 768.24/213.13 Answer: 768.24/213.13 YES(O(1),O(1)) 768.24/213.13 768.24/213.13 No rule is usable, rules are removed from the input problem. 768.24/213.13 768.24/213.13 We are left with following problem, upon which TcT provides the 768.24/213.13 certificate YES(O(1),O(1)). 768.24/213.13 768.24/213.13 Rules: Empty 768.24/213.13 Obligation: 768.24/213.13 innermost runtime complexity 768.24/213.13 Answer: 768.24/213.13 YES(O(1),O(1)) 768.24/213.13 768.24/213.13 Empty rules are trivially bounded 768.24/213.13 768.24/213.13 S) We are left with following problem, upon which TcT provides the 768.24/213.13 certificate YES(O(1),O(n^1)). 768.24/213.13 768.24/213.13 Strict DPs: 768.24/213.13 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.13 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.13 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.13 matrixMult^#(@acc, @m)) } 768.24/213.13 Weak DPs: 768.24/213.13 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.13 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.13 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.13 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.13 matrixMult^#(@m1, @m2)) 768.24/213.13 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.13 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.24/213.13 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.13 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.13 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.13 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.13 Weak Trs: 768.24/213.13 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.13 , split(@m) -> split#1(@m) 768.24/213.13 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.13 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.13 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#0(), @y) -> @y 768.24/213.13 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.13 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.13 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.13 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.13 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.13 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.13 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.13 , +(@x, @y) -> #add(@x, @y) 768.24/213.13 , transAcc#1(nil(), @base) -> @base 768.24/213.13 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.13 attach(@l, transAcc(@m', @base)) 768.24/213.13 , *(@x, @y) -> #mult(@x, @y) 768.24/213.13 , mkBase#1(nil()) -> nil() 768.24/213.13 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.13 , attach#1(nil(), @m) -> nil() 768.24/213.13 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.13 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.13 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.13 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.13 , #natmult(#0(), @y) -> #0() 768.24/213.13 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.13 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.13 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.13 , mkBase(@m) -> mkBase#1(@m) 768.24/213.13 , makeBase(@m) -> makeBase#1(@m) 768.24/213.13 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.13 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.13 , lineMult#1(nil(), @l) -> nil() 768.24/213.13 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.13 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.13 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #0()) -> #0() 768.24/213.13 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #0()) -> #0() 768.24/213.13 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.13 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.13 , #mult(#0(), #0()) -> #0() 768.24/213.13 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.13 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.13 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.13 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.13 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.13 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.13 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.13 , makeBase#1(nil()) -> nil() 768.24/213.13 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.13 , matrixMult(@m1, @m2) -> 768.24/213.13 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.13 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.13 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.13 , #abs(#0()) -> #0() 768.24/213.13 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.13 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.13 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.13 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.13 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.13 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.13 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.13 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.13 Obligation: 768.24/213.13 innermost runtime complexity 768.24/213.13 Answer: 768.24/213.13 YES(O(1),O(n^1)) 768.24/213.13 768.24/213.13 The following weak DPs constitute a sub-graph of the DG that is 768.24/213.13 closed under successors. The DPs are removed. 768.24/213.13 768.24/213.13 { attach^#(@line, @m) -> c_3(attach#1^#(@line, @m)) 768.24/213.13 , attach#1^#(::(@x, @xs), @m) -> c_4(attach#2^#(@m, @x, @xs)) 768.24/213.13 , matrixMult3^#(@m1, @m2, @m3) -> 768.24/213.13 c_16(matrixMult^#(matrixMult(@m1, @m2), @m3), 768.24/213.13 matrixMult^#(@m1, @m2)) 768.24/213.13 , matrixMult^#(@m1, @m2) -> c_17(transAcc^#(@m2, makeBase(@m2))) 768.24/213.13 , transpose'^#(@m) -> c_18(transAcc^#(@m, makeBase(@m))) 768.24/213.13 , transAcc^#(@m, @base) -> c_7(transAcc#1^#(@m, @base)) 768.24/213.13 , transAcc#1^#(::(@l, @m'), @base) -> 768.24/213.13 c_11(attach^#(@l, transAcc(@m', @base)), transAcc^#(@m', @base)) 768.24/213.13 , attach#2^#(::(@l, @ls), @x, @xs) -> c_13(attach^#(@xs, @ls)) } 768.24/213.13 768.24/213.13 We are left with following problem, upon which TcT provides the 768.24/213.13 certificate YES(O(1),O(n^1)). 768.24/213.13 768.24/213.13 Strict DPs: 768.24/213.13 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.13 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.13 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.13 matrixMult^#(@acc, @m)) } 768.24/213.13 Weak Trs: 768.24/213.13 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.13 , split(@m) -> split#1(@m) 768.24/213.13 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.13 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.13 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#0(), @y) -> @y 768.24/213.13 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.13 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.13 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.13 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.13 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.13 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.13 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.13 , +(@x, @y) -> #add(@x, @y) 768.24/213.13 , transAcc#1(nil(), @base) -> @base 768.24/213.13 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.13 attach(@l, transAcc(@m', @base)) 768.24/213.13 , *(@x, @y) -> #mult(@x, @y) 768.24/213.13 , mkBase#1(nil()) -> nil() 768.24/213.13 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.13 , attach#1(nil(), @m) -> nil() 768.24/213.13 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.13 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.13 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.13 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.13 , #natmult(#0(), @y) -> #0() 768.24/213.13 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.13 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.13 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.13 , mkBase(@m) -> mkBase#1(@m) 768.24/213.13 , makeBase(@m) -> makeBase#1(@m) 768.24/213.13 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.13 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.13 , lineMult#1(nil(), @l) -> nil() 768.24/213.13 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.13 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.13 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #0()) -> #0() 768.24/213.13 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #0()) -> #0() 768.24/213.13 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.13 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.13 , #mult(#0(), #0()) -> #0() 768.24/213.13 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.13 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.13 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.13 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.13 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.13 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.13 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.13 , makeBase#1(nil()) -> nil() 768.24/213.13 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.13 , matrixMult(@m1, @m2) -> 768.24/213.13 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.13 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.13 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.13 , #abs(#0()) -> #0() 768.24/213.13 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.13 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.13 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.13 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.13 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.13 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.13 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.13 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.13 Obligation: 768.24/213.13 innermost runtime complexity 768.24/213.13 Answer: 768.24/213.13 YES(O(1),O(n^1)) 768.24/213.13 768.24/213.13 Due to missing edges in the dependency-graph, the right-hand sides 768.24/213.13 of following rules could be simplified: 768.24/213.13 768.24/213.13 { matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.13 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms), 768.24/213.13 matrixMult^#(@acc, @m)) } 768.24/213.13 768.24/213.13 We are left with following problem, upon which TcT provides the 768.24/213.13 certificate YES(O(1),O(n^1)). 768.24/213.13 768.24/213.13 Strict DPs: 768.24/213.13 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.13 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.13 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 768.24/213.13 Weak Trs: 768.24/213.13 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.13 , split(@m) -> split#1(@m) 768.24/213.13 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.13 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.13 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#0(), @y) -> @y 768.24/213.13 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.13 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.13 , split#1(nil()) -> tuple#2(nil(), nil()) 768.24/213.13 , split#1(::(@l, @ls)) -> split#2(@l, @ls) 768.24/213.13 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.13 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.13 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.13 , +(@x, @y) -> #add(@x, @y) 768.24/213.13 , transAcc#1(nil(), @base) -> @base 768.24/213.13 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.13 attach(@l, transAcc(@m', @base)) 768.24/213.13 , *(@x, @y) -> #mult(@x, @y) 768.24/213.13 , mkBase#1(nil()) -> nil() 768.24/213.13 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.13 , attach#1(nil(), @m) -> nil() 768.24/213.13 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.13 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.13 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.13 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.13 , #natmult(#0(), @y) -> #0() 768.24/213.13 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.13 , split#2(nil(), @ls) -> tuple#2(nil(), nil()) 768.24/213.13 , split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) 768.24/213.13 , mkBase(@m) -> mkBase#1(@m) 768.24/213.13 , makeBase(@m) -> makeBase#1(@m) 768.24/213.13 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.13 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.13 , lineMult#1(nil(), @l) -> nil() 768.24/213.13 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.13 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.13 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #0()) -> #0() 768.24/213.13 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#pos(@x), #0()) -> #0() 768.24/213.13 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.13 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.13 , #mult(#0(), #0()) -> #0() 768.24/213.13 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.13 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.13 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.13 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.13 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.13 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.13 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.13 , makeBase#1(nil()) -> nil() 768.24/213.13 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.13 , matrixMult(@m1, @m2) -> 768.24/213.13 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.13 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.13 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.13 , #abs(#0()) -> #0() 768.24/213.13 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.13 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.13 , split#3(tuple#2(@ys, @m'), @x, @xs) -> 768.24/213.13 tuple#2(::(@x, @ys), ::(@xs, @m')) 768.24/213.13 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.13 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.13 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.13 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.13 Obligation: 768.24/213.13 innermost runtime complexity 768.24/213.13 Answer: 768.24/213.13 YES(O(1),O(n^1)) 768.24/213.13 768.24/213.13 We replace rewrite rules by usable rules: 768.24/213.13 768.24/213.13 Weak Usable Rules: 768.24/213.13 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.13 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.13 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.13 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.13 , #add(#0(), @y) -> @y 768.24/213.13 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.13 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.13 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.13 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.13 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.13 , +(@x, @y) -> #add(@x, @y) 768.24/213.13 , transAcc#1(nil(), @base) -> @base 768.24/213.13 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.13 attach(@l, transAcc(@m', @base)) 768.24/213.13 , *(@x, @y) -> #mult(@x, @y) 768.24/213.13 , mkBase#1(nil()) -> nil() 768.24/213.13 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.13 , attach#1(nil(), @m) -> nil() 768.24/213.13 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.13 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.13 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.13 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.13 , #natmult(#0(), @y) -> #0() 768.24/213.13 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.13 , mkBase(@m) -> mkBase#1(@m) 768.24/213.13 , makeBase(@m) -> makeBase#1(@m) 768.24/213.13 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.13 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.13 , lineMult#1(nil(), @l) -> nil() 768.24/213.13 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.13 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.13 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.13 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#neg(@x), #0()) -> #0() 768.24/213.14 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #0()) -> #0() 768.24/213.14 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.14 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.14 , #mult(#0(), #0()) -> #0() 768.24/213.14 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.14 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.14 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.14 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.14 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.14 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.14 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.14 , makeBase#1(nil()) -> nil() 768.24/213.14 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.14 , matrixMult(@m1, @m2) -> 768.24/213.14 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.14 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.14 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.14 , #abs(#0()) -> #0() 768.24/213.14 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.14 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.14 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.14 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.14 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.14 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.14 768.24/213.14 We are left with following problem, upon which TcT provides the 768.24/213.14 certificate YES(O(1),O(n^1)). 768.24/213.14 768.24/213.14 Strict DPs: 768.24/213.14 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.14 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.14 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 768.24/213.14 Weak Trs: 768.24/213.14 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.14 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.14 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.14 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.14 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.14 , #add(#0(), @y) -> @y 768.24/213.14 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.14 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.14 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.14 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.14 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.14 , +(@x, @y) -> #add(@x, @y) 768.24/213.14 , transAcc#1(nil(), @base) -> @base 768.24/213.14 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.14 attach(@l, transAcc(@m', @base)) 768.24/213.14 , *(@x, @y) -> #mult(@x, @y) 768.24/213.14 , mkBase#1(nil()) -> nil() 768.24/213.14 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.14 , attach#1(nil(), @m) -> nil() 768.24/213.14 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.14 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.14 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.14 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.14 , #natmult(#0(), @y) -> #0() 768.24/213.14 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.14 , mkBase(@m) -> mkBase#1(@m) 768.24/213.14 , makeBase(@m) -> makeBase#1(@m) 768.24/213.14 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.14 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.14 , lineMult#1(nil(), @l) -> nil() 768.24/213.14 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.14 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.14 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.14 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#neg(@x), #0()) -> #0() 768.24/213.14 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #0()) -> #0() 768.24/213.14 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.14 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.14 , #mult(#0(), #0()) -> #0() 768.24/213.14 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.14 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.14 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.14 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.14 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.14 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.14 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.14 , makeBase#1(nil()) -> nil() 768.24/213.14 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.14 , matrixMult(@m1, @m2) -> 768.24/213.14 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.14 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.14 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.14 , #abs(#0()) -> #0() 768.24/213.14 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.14 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.14 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.14 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.14 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.14 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.14 Obligation: 768.24/213.14 innermost runtime complexity 768.24/213.14 Answer: 768.24/213.14 YES(O(1),O(n^1)) 768.24/213.14 768.24/213.14 We use the processor 'matrix interpretation of dimension 1' to 768.24/213.14 orient following rules strictly. 768.24/213.14 768.24/213.14 DPs: 768.24/213.14 { 1: matrixMultList^#(@acc, @mm) -> 768.24/213.14 c_1(matrixMultList#1^#(@mm, @acc)) } 768.24/213.14 Trs: { mkBase(@m) -> mkBase#1(@m) } 768.24/213.14 768.24/213.14 Sub-proof: 768.24/213.14 ---------- 768.24/213.14 The following argument positions are usable: 768.24/213.14 Uargs(c_1) = {1}, Uargs(c_2) = {1} 768.24/213.14 768.24/213.14 TcT has computed the following constructor-based matrix 768.24/213.14 interpretation satisfying not(EDA). 768.24/213.14 768.24/213.14 [attach](x1, x2) = [3] x1 + [0] 768.24/213.14 768.24/213.14 [#add](x1, x2) = [0] 768.24/213.14 768.24/213.14 [mult#2](x1, x2, x3) = [4] x2 + [7] x3 + [0] 768.24/213.14 768.24/213.14 [nil] = [0] 768.24/213.14 768.24/213.14 [matrixMult'](x1, x2) = [4] x1 + [0] 768.24/213.14 768.24/213.14 [transAcc](x1, x2) = [0] 768.24/213.14 768.24/213.14 [mult](x1, x2) = [0] 768.24/213.14 768.24/213.14 [+](x1, x2) = [0] 768.24/213.14 768.24/213.14 [transAcc#1](x1, x2) = [4] x2 + [0] 768.24/213.14 768.24/213.14 [#neg](x1) = [0] 768.24/213.14 768.24/213.14 [*](x1, x2) = [0] 768.24/213.14 768.24/213.14 [mkBase#1](x1) = [0] 768.24/213.14 768.24/213.14 [attach#1](x1, x2) = [4] x2 + [0] 768.24/213.14 768.24/213.14 [matrixMult'#1](x1, x2) = [0] 768.24/213.14 768.24/213.14 [#natmult](x1, x2) = [0] 768.24/213.14 768.24/213.14 [#pos](x1) = [0] 768.24/213.14 768.24/213.14 [mkBase](x1) = [2] x1 + [4] 768.24/213.14 768.24/213.14 [makeBase](x1) = [0] 768.24/213.14 768.24/213.14 [mult#1](x1, x2) = [4] x2 + [0] 768.24/213.14 768.24/213.14 [::](x1, x2) = [1] x1 + [1] x2 + [4] 768.24/213.14 768.24/213.14 [lineMult#1](x1, x2) = [4] x2 + [0] 768.24/213.14 768.24/213.14 [#mult](x1, x2) = [0] 768.24/213.14 768.24/213.14 [attach#2](x1, x2, x3) = [4] x3 + [0] 768.24/213.14 768.24/213.14 [#succ](x1) = [0] 768.24/213.14 768.24/213.14 [#0] = [0] 768.24/213.14 768.24/213.14 [makeBase#1](x1) = [0] 768.24/213.14 768.24/213.14 [matrixMult](x1, x2) = [0] 768.24/213.14 768.24/213.14 [#abs](x1) = [0] 768.24/213.14 768.24/213.14 [lineMult](x1, x2) = [4] 768.24/213.14 768.24/213.14 [#pred](x1) = [0] 768.24/213.14 768.24/213.14 [#s](x1) = [0] 768.24/213.14 768.24/213.14 [matrixMultList^#](x1, x2) = [2] x2 + [4] 768.24/213.14 768.24/213.14 [matrixMultList#1^#](x1, x2) = [2] x1 + [0] 768.24/213.14 768.24/213.14 [c_1](x1) = [1] x1 + [1] 768.24/213.14 768.24/213.14 [c_2](x1) = [1] x1 + [4] 768.24/213.14 768.24/213.14 The order satisfies the following ordering constraints: 768.24/213.14 768.24/213.14 [attach(@line, @m)] = [3] @line + [0] 768.24/213.14 ? [4] @m + [0] 768.24/213.14 = [attach#1(@line, @m)] 768.24/213.14 768.24/213.14 [#add(#neg(#s(#0())), @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pred(@y)] 768.24/213.14 768.24/213.14 [#add(#neg(#s(#s(@x))), @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pred(#add(#pos(#s(@x)), @y))] 768.24/213.14 768.24/213.14 [#add(#pos(#s(#0())), @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#succ(@y)] 768.24/213.14 768.24/213.14 [#add(#pos(#s(#s(@x))), @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#succ(#add(#pos(#s(@x)), @y))] 768.24/213.14 768.24/213.14 [#add(#0(), @y)] = [0] 768.24/213.14 ? [1] @y + [0] 768.24/213.14 = [@y] 768.24/213.14 768.24/213.14 [mult#2(nil(), @x, @xs)] = [4] @x + [7] @xs + [0] 768.24/213.14 >= [0] 768.24/213.14 = [#abs(#0())] 768.24/213.14 768.24/213.14 [mult#2(::(@y, @ys), @x, @xs)] = [4] @x + [7] @xs + [0] 768.24/213.14 >= [0] 768.24/213.14 = [+(*(@x, @y), mult(@xs, @ys))] 768.24/213.14 768.24/213.14 [matrixMult'(@m1, @m2)] = [4] @m1 + [0] 768.24/213.14 >= [0] 768.24/213.14 = [matrixMult'#1(@m1, @m2)] 768.24/213.14 768.24/213.14 [transAcc(@m, @base)] = [0] 768.24/213.14 ? [4] @base + [0] 768.24/213.14 = [transAcc#1(@m, @base)] 768.24/213.14 768.24/213.14 [mult(@l1, @l2)] = [0] 768.24/213.14 ? [4] @l2 + [0] 768.24/213.14 = [mult#1(@l1, @l2)] 768.24/213.14 768.24/213.14 [+(@x, @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#add(@x, @y)] 768.24/213.14 768.24/213.14 [transAcc#1(nil(), @base)] = [4] @base + [0] 768.24/213.14 >= [1] @base + [0] 768.24/213.14 = [@base] 768.24/213.14 768.24/213.14 [transAcc#1(::(@l, @m'), @base)] = [4] @base + [0] 768.24/213.14 ? [3] @l + [0] 768.24/213.14 = [attach(@l, transAcc(@m', @base))] 768.24/213.14 768.24/213.14 [*(@x, @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#mult(@x, @y)] 768.24/213.14 768.24/213.14 [mkBase#1(nil())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [nil()] 768.24/213.14 768.24/213.14 [mkBase#1(::(@l, @m'))] = [0] 768.24/213.14 ? [2] @m' + [8] 768.24/213.14 = [::(nil(), mkBase(@m'))] 768.24/213.14 768.24/213.14 [attach#1(nil(), @m)] = [4] @m + [0] 768.24/213.14 >= [0] 768.24/213.14 = [nil()] 768.24/213.14 768.24/213.14 [attach#1(::(@x, @xs), @m)] = [4] @m + [0] 768.24/213.14 ? [4] @xs + [0] 768.24/213.14 = [attach#2(@m, @x, @xs)] 768.24/213.14 768.24/213.14 [matrixMult'#1(nil(), @m2)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [nil()] 768.24/213.14 768.24/213.14 [matrixMult'#1(::(@l, @ls), @m2)] = [0] 768.24/213.14 ? [4] @ls + [8] 768.24/213.14 = [::(lineMult(@l, @m2), matrixMult'(@ls, @m2))] 768.24/213.14 768.24/213.14 [#natmult(#0(), @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#natmult(#s(@x), @y)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#add(#pos(@y), #natmult(@x, @y))] 768.24/213.14 768.24/213.14 [mkBase(@m)] = [2] @m + [4] 768.24/213.14 > [0] 768.24/213.14 = [mkBase#1(@m)] 768.24/213.14 768.24/213.14 [makeBase(@m)] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [makeBase#1(@m)] 768.24/213.14 768.24/213.14 [mult#1(nil(), @l2)] = [4] @l2 + [0] 768.24/213.14 >= [0] 768.24/213.14 = [#abs(#0())] 768.24/213.14 768.24/213.14 [mult#1(::(@x, @xs), @l2)] = [4] @l2 + [0] 768.24/213.14 ? [4] @x + [7] @xs + [0] 768.24/213.14 = [mult#2(@l2, @x, @xs)] 768.24/213.14 768.24/213.14 [lineMult#1(nil(), @l)] = [4] @l + [0] 768.24/213.14 >= [0] 768.24/213.14 = [nil()] 768.24/213.14 768.24/213.14 [lineMult#1(::(@x, @xs), @l)] = [4] @l + [0] 768.24/213.14 ? [8] 768.24/213.14 = [::(mult(@l, @x), lineMult(@l, @xs))] 768.24/213.14 768.24/213.14 [#mult(#neg(@x), #neg(@y))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(#natmult(@x, @y))] 768.24/213.14 768.24/213.14 [#mult(#neg(@x), #pos(@y))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#neg(#natmult(@x, @y))] 768.24/213.14 768.24/213.14 [#mult(#neg(@x), #0())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#mult(#pos(@x), #neg(@y))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#neg(#natmult(@x, @y))] 768.24/213.14 768.24/213.14 [#mult(#pos(@x), #pos(@y))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(#natmult(@x, @y))] 768.24/213.14 768.24/213.14 [#mult(#pos(@x), #0())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#mult(#0(), #neg(@y))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#mult(#0(), #pos(@y))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#mult(#0(), #0())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [attach#2(nil(), @x, @xs)] = [4] @xs + [0] 768.24/213.14 >= [0] 768.24/213.14 = [nil()] 768.24/213.14 768.24/213.14 [attach#2(::(@l, @ls), @x, @xs)] = [4] @xs + [0] 768.24/213.14 ? [1] @x + [3] @xs + [1] @l + [8] 768.24/213.14 = [::(::(@x, @l), attach(@xs, @ls))] 768.24/213.14 768.24/213.14 [#succ(#neg(#s(#0())))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#succ(#neg(#s(#s(@x))))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#neg(#s(@x))] 768.24/213.14 768.24/213.14 [#succ(#pos(#s(@x)))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(#s(#s(@x)))] 768.24/213.14 768.24/213.14 [#succ(#0())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(#s(#0()))] 768.24/213.14 768.24/213.14 [makeBase#1(nil())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [nil()] 768.24/213.14 768.24/213.14 [makeBase#1(::(@l, @m'))] = [0] 768.24/213.14 ? [2] @l + [4] 768.24/213.14 = [mkBase(@l)] 768.24/213.14 768.24/213.14 [matrixMult(@m1, @m2)] = [0] 768.24/213.14 ? [4] @m1 + [0] 768.24/213.14 = [matrixMult'(@m1, transAcc(@m2, makeBase(@m2)))] 768.24/213.14 768.24/213.14 [#abs(#neg(@x))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(@x)] 768.24/213.14 768.24/213.14 [#abs(#pos(@x))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(@x)] 768.24/213.14 768.24/213.14 [#abs(#0())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#abs(#s(@x))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(#s(@x))] 768.24/213.14 768.24/213.14 [lineMult(@l, @m2)] = [4] 768.24/213.14 ? [4] @l + [0] 768.24/213.14 = [lineMult#1(@m2, @l)] 768.24/213.14 768.24/213.14 [#pred(#neg(#s(@x)))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#neg(#s(#s(@x)))] 768.24/213.14 768.24/213.14 [#pred(#pos(#s(#0())))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#0()] 768.24/213.14 768.24/213.14 [#pred(#pos(#s(#s(@x))))] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#pos(#s(@x))] 768.24/213.14 768.24/213.14 [#pred(#0())] = [0] 768.24/213.14 >= [0] 768.24/213.14 = [#neg(#s(#0()))] 768.24/213.14 768.24/213.14 [matrixMultList^#(@acc, @mm)] = [2] @mm + [4] 768.24/213.14 > [2] @mm + [1] 768.24/213.14 = [c_1(matrixMultList#1^#(@mm, @acc))] 768.24/213.14 768.24/213.14 [matrixMultList#1^#(::(@m, @ms), @acc)] = [2] @m + [2] @ms + [8] 768.24/213.14 >= [2] @ms + [8] 768.24/213.14 = [c_2(matrixMultList^#(matrixMult(@acc, @m), @ms))] 768.24/213.14 768.24/213.14 768.24/213.14 We return to the main proof. Consider the set of all dependency 768.24/213.14 pairs 768.24/213.14 768.24/213.14 : 768.24/213.14 { 1: matrixMultList^#(@acc, @mm) -> 768.24/213.14 c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.14 , 2: matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.14 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 768.24/213.14 768.24/213.14 Processor 'matrix interpretation of dimension 1' induces the 768.24/213.14 complexity certificate YES(?,O(n^1)) on application of dependency 768.24/213.14 pairs {1}. These cover all (indirect) predecessors of dependency 768.24/213.14 pairs {1,2}, their number of application is equally bounded. The 768.24/213.14 dependency pairs are shifted into the weak component. 768.24/213.14 768.24/213.14 We are left with following problem, upon which TcT provides the 768.24/213.14 certificate YES(O(1),O(1)). 768.24/213.14 768.24/213.14 Weak DPs: 768.24/213.14 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.14 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.14 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 768.24/213.14 Weak Trs: 768.24/213.14 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.14 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.14 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.14 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.14 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.14 , #add(#0(), @y) -> @y 768.24/213.14 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.14 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.14 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.14 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.14 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.14 , +(@x, @y) -> #add(@x, @y) 768.24/213.14 , transAcc#1(nil(), @base) -> @base 768.24/213.14 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.14 attach(@l, transAcc(@m', @base)) 768.24/213.14 , *(@x, @y) -> #mult(@x, @y) 768.24/213.14 , mkBase#1(nil()) -> nil() 768.24/213.14 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.14 , attach#1(nil(), @m) -> nil() 768.24/213.14 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.14 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.14 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.14 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.14 , #natmult(#0(), @y) -> #0() 768.24/213.14 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.14 , mkBase(@m) -> mkBase#1(@m) 768.24/213.14 , makeBase(@m) -> makeBase#1(@m) 768.24/213.14 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.14 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.14 , lineMult#1(nil(), @l) -> nil() 768.24/213.14 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.14 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.14 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.14 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#neg(@x), #0()) -> #0() 768.24/213.14 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #0()) -> #0() 768.24/213.14 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.14 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.14 , #mult(#0(), #0()) -> #0() 768.24/213.14 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.14 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.14 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.14 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.14 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.14 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.14 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.14 , makeBase#1(nil()) -> nil() 768.24/213.14 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.14 , matrixMult(@m1, @m2) -> 768.24/213.14 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.14 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.14 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.14 , #abs(#0()) -> #0() 768.24/213.14 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.14 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.14 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.14 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.14 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.14 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.14 Obligation: 768.24/213.14 innermost runtime complexity 768.24/213.14 Answer: 768.24/213.14 YES(O(1),O(1)) 768.24/213.14 768.24/213.14 The following weak DPs constitute a sub-graph of the DG that is 768.24/213.14 closed under successors. The DPs are removed. 768.24/213.14 768.24/213.14 { matrixMultList^#(@acc, @mm) -> c_1(matrixMultList#1^#(@mm, @acc)) 768.24/213.14 , matrixMultList#1^#(::(@m, @ms), @acc) -> 768.24/213.14 c_2(matrixMultList^#(matrixMult(@acc, @m), @ms)) } 768.24/213.14 768.24/213.14 We are left with following problem, upon which TcT provides the 768.24/213.14 certificate YES(O(1),O(1)). 768.24/213.14 768.24/213.14 Weak Trs: 768.24/213.14 { attach(@line, @m) -> attach#1(@line, @m) 768.24/213.14 , #add(#neg(#s(#0())), @y) -> #pred(@y) 768.24/213.14 , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 768.24/213.14 , #add(#pos(#s(#0())), @y) -> #succ(@y) 768.24/213.14 , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 768.24/213.14 , #add(#0(), @y) -> @y 768.24/213.14 , mult#2(nil(), @x, @xs) -> #abs(#0()) 768.24/213.14 , mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) 768.24/213.14 , matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) 768.24/213.14 , transAcc(@m, @base) -> transAcc#1(@m, @base) 768.24/213.14 , mult(@l1, @l2) -> mult#1(@l1, @l2) 768.24/213.14 , +(@x, @y) -> #add(@x, @y) 768.24/213.14 , transAcc#1(nil(), @base) -> @base 768.24/213.14 , transAcc#1(::(@l, @m'), @base) -> 768.24/213.14 attach(@l, transAcc(@m', @base)) 768.24/213.14 , *(@x, @y) -> #mult(@x, @y) 768.24/213.14 , mkBase#1(nil()) -> nil() 768.24/213.14 , mkBase#1(::(@l, @m')) -> ::(nil(), mkBase(@m')) 768.24/213.14 , attach#1(nil(), @m) -> nil() 768.24/213.14 , attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) 768.24/213.14 , matrixMult'#1(nil(), @m2) -> nil() 768.24/213.14 , matrixMult'#1(::(@l, @ls), @m2) -> 768.24/213.14 ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) 768.24/213.14 , #natmult(#0(), @y) -> #0() 768.24/213.14 , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 768.24/213.14 , mkBase(@m) -> mkBase#1(@m) 768.24/213.14 , makeBase(@m) -> makeBase#1(@m) 768.24/213.14 , mult#1(nil(), @l2) -> #abs(#0()) 768.24/213.14 , mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) 768.24/213.14 , lineMult#1(nil(), @l) -> nil() 768.24/213.14 , lineMult#1(::(@x, @xs), @l) -> 768.24/213.14 ::(mult(@l, @x), lineMult(@l, @xs)) 768.24/213.14 , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.14 , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#neg(@x), #0()) -> #0() 768.24/213.14 , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 768.24/213.14 , #mult(#pos(@x), #0()) -> #0() 768.24/213.14 , #mult(#0(), #neg(@y)) -> #0() 768.24/213.14 , #mult(#0(), #pos(@y)) -> #0() 768.24/213.14 , #mult(#0(), #0()) -> #0() 768.24/213.14 , attach#2(nil(), @x, @xs) -> nil() 768.24/213.14 , attach#2(::(@l, @ls), @x, @xs) -> 768.24/213.14 ::(::(@x, @l), attach(@xs, @ls)) 768.24/213.14 , #succ(#neg(#s(#0()))) -> #0() 768.24/213.14 , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 768.24/213.14 , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 768.24/213.14 , #succ(#0()) -> #pos(#s(#0())) 768.24/213.14 , makeBase#1(nil()) -> nil() 768.24/213.14 , makeBase#1(::(@l, @m')) -> mkBase(@l) 768.24/213.14 , matrixMult(@m1, @m2) -> 768.24/213.14 matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) 768.24/213.14 , #abs(#neg(@x)) -> #pos(@x) 768.24/213.14 , #abs(#pos(@x)) -> #pos(@x) 768.24/213.14 , #abs(#0()) -> #0() 768.24/213.14 , #abs(#s(@x)) -> #pos(#s(@x)) 768.24/213.14 , lineMult(@l, @m2) -> lineMult#1(@m2, @l) 768.24/213.14 , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 768.24/213.14 , #pred(#pos(#s(#0()))) -> #0() 768.24/213.14 , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 768.24/213.14 , #pred(#0()) -> #neg(#s(#0())) } 768.24/213.14 Obligation: 768.24/213.14 innermost runtime complexity 768.24/213.14 Answer: 768.24/213.14 YES(O(1),O(1)) 768.24/213.14 768.24/213.14 No rule is usable, rules are removed from the input problem. 768.24/213.14 768.24/213.14 We are left with following problem, upon which TcT provides the 768.24/213.14 certificate YES(O(1),O(1)). 768.24/213.14 768.24/213.14 Rules: Empty 768.24/213.14 Obligation: 768.24/213.14 innermost runtime complexity 768.24/213.14 Answer: 768.24/213.14 YES(O(1),O(1)) 768.24/213.14 768.24/213.14 Empty rules are trivially bounded 768.24/213.14 768.24/213.14 768.24/213.14 768.24/213.14 768.24/213.14 768.24/213.14 Hurray, we answered YES(O(1),O(n^3)) 768.24/213.14 EOF