WORST_CASE(?,O(n^3)) * Step 1: Sum. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict TRS: *'(z0,z1) -> c24(#MULT(z0,z1)) +'(z0,z1) -> c25(#ADD(z0,z1)) APPENDREVERSE(z0,z1) -> c26(APPENDREVERSE#1(z0,z1)) APPENDREVERSE#1(::(z0,z1),z2) -> c27(APPENDREVERSE(z1,::(z0,z2))) APPENDREVERSE#1(nil(),z0) -> c28() BFTMULT(z0,z1) -> c29(BFTMULT'(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'(z0,z1) -> c30(BFTMULT'#1(bftMult'#2(z0),z1),BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0,z1),z2) -> c31(BFTMULT'#3(z0,z2,z1)) BFTMULT'#2(tuple#2(z0,z1)) -> c32(DEQUEUE(z0,z1)) BFTMULT'#3(::(z0,z1),z2,z3) -> c33(BFTMULT'#4(z0,z2,z3)) BFTMULT'#3(nil(),z0,z1) -> c34() BFTMULT'#4(leaf(),z0,z1) -> c35(BFTMULT'(z1,z0)) BFTMULT'#4(node(z0,z1,z2),z3,z4) -> c36(BFTMULT'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) ,ENQUEUE(z2,enqueue(z1,z4)) ,ENQUEUE(z1,z4)) BFTMULT'#5(z0,z1,z2) -> c37(BFTMULT'(z0,matrixMult(z1,z2)),MATRIXMULT(z1,z2)) COMPUTELINE(z0,z1,z2) -> c38(COMPUTELINE#1(z0,z2,z1)) COMPUTELINE#1(::(z0,z1),z2,z3) -> c39(COMPUTELINE#2(z3,z2,z0,z1)) COMPUTELINE#1(nil(),z0,z1) -> c40() COMPUTELINE#2(::(z0,z1),z2,z3,z4) -> c41(COMPUTELINE(z4,z1,lineMult(z3,z0,z2)),LINEMULT(z3,z0,z2)) COMPUTELINE#2(nil(),z0,z1,z2) -> c42() DEQUEUE(z0,z1) -> c43(DEQUEUE#1(z0,z1)) DEQUEUE#1(::(z0,z1),z2) -> c44() DEQUEUE#1(nil(),z0) -> c45(DEQUEUE#2(reverse(z0)),REVERSE(z0)) DEQUEUE#2(::(z0,z1)) -> c46() DEQUEUE#2(nil()) -> c47() ENQUEUE(z0,z1) -> c48(ENQUEUE#1(z1,z0)) ENQUEUE#1(tuple#2(z0,z1),z2) -> c49() LINEMULT(z0,z1,z2) -> c50(LINEMULT#1(z1,z2,z0)) LINEMULT#1(::(z0,z1),z2,z3) -> c51(LINEMULT#2(z2,z3,z0,z1)) LINEMULT#1(nil(),z0,z1) -> c52() LINEMULT#2(::(z0,z1),z2,z3,z4) -> c53(+'(*(z3,z2),z0),*'(z3,z2)) LINEMULT#2(::(z0,z1),z2,z3,z4) -> c54(LINEMULT(z2,z4,z1)) LINEMULT#2(nil(),z0,z1,z2) -> c55(*'(z1,z0)) LINEMULT#2(nil(),z0,z1,z2) -> c56(LINEMULT(z0,z2,nil())) MATRIXMULT(z0,z1) -> c57(MATRIXMULT#1(z0,z1)) MATRIXMULT#1(::(z0,z1),z2) -> c58(COMPUTELINE(z0,z2,nil())) MATRIXMULT#1(::(z0,z1),z2) -> c59(MATRIXMULT(z1,z2)) MATRIXMULT#1(nil(),z0) -> c60() REVERSE(z0) -> c61(APPENDREVERSE(z0,nil())) - Weak TRS: #ADD(#0(),z0) -> c() #ADD(#neg(#s(#0())),z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))),z1) -> c2(#PRED(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #ADD(#pos(#s(#0())),z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))),z1) -> c4(#SUCC(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #MULT(#0(),#0()) -> c5() #MULT(#0(),#neg(z0)) -> c6() #MULT(#0(),#pos(z0)) -> c7() #MULT(#neg(z0),#0()) -> c8() #MULT(#neg(z0),#neg(z1)) -> c9(#NATMULT(z0,z1)) #MULT(#neg(z0),#pos(z1)) -> c10(#NATMULT(z0,z1)) #MULT(#pos(z0),#0()) -> c11() #MULT(#pos(z0),#neg(z1)) -> c12(#NATMULT(z0,z1)) #MULT(#pos(z0),#pos(z1)) -> c13(#NATMULT(z0,z1)) #NATMULT(#0(),z0) -> c14() #NATMULT(#s(z0),z1) -> c15(#ADD(#pos(z1),#natmult(z0,z1)),#NATMULT(z0,z1)) #PRED(#0()) -> c16() #PRED(#neg(#s(z0))) -> c17() #PRED(#pos(#s(#0()))) -> c18() #PRED(#pos(#s(#s(z0)))) -> c19() #SUCC(#0()) -> c20() #SUCC(#neg(#s(#0()))) -> c21() #SUCC(#neg(#s(#s(z0)))) -> c22() #SUCC(#pos(#s(z0))) -> c23() #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult(z0,z1) -> bftMult'(tuple#2(::(z0,nil()),nil()),z1) bftMult'(z0,z1) -> bftMult'#1(bftMult'#2(z0),z1) bftMult'#1(tuple#2(z0,z1),z2) -> bftMult'#3(z0,z2,z1) bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) bftMult'#3(::(z0,z1),z2,z3) -> bftMult'#4(z0,z2,z3) bftMult'#3(nil(),z0,z1) -> z0 bftMult'#4(leaf(),z0,z1) -> bftMult'(z1,z0) bftMult'#4(node(z0,z1,z2),z3,z4) -> bftMult'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) bftMult'#5(z0,z1,z2) -> bftMult'(z0,matrixMult(z1,z2)) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2 ,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1 ,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0 ,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1 ,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3,tuple#2/2} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD,#MULT,#NATMULT,#PRED,#SUCC,#add,#mult,#natmult,#pred ,#succ,*,*',+,+',APPENDREVERSE,APPENDREVERSE#1,BFTMULT,BFTMULT',BFTMULT'#1,BFTMULT'#2,BFTMULT'#3,BFTMULT'#4 ,BFTMULT'#5,COMPUTELINE,COMPUTELINE#1,COMPUTELINE#2,DEQUEUE,DEQUEUE#1,DEQUEUE#2,ENQUEUE,ENQUEUE#1,LINEMULT ,LINEMULT#1,LINEMULT#2,MATRIXMULT,MATRIXMULT#1,REVERSE,appendreverse,appendreverse#1,bftMult,bftMult' ,bftMult'#1,bftMult'#2,bftMult'#3,bftMult'#4,bftMult'#5,computeLine,computeLine#1,computeLine#2,dequeue ,dequeue#1,dequeue#2,enqueue,enqueue#1,lineMult,lineMult#1,lineMult#2,matrixMult,matrixMult#1 ,reverse} and constructors {#0,#neg,#pos,#s,::,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22 ,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47 ,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: Sum {left = someStrategy, right = someStrategy} + Details: () * Step 2: DependencyPairs. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict TRS: *'(z0,z1) -> c24(#MULT(z0,z1)) +'(z0,z1) -> c25(#ADD(z0,z1)) APPENDREVERSE(z0,z1) -> c26(APPENDREVERSE#1(z0,z1)) APPENDREVERSE#1(::(z0,z1),z2) -> c27(APPENDREVERSE(z1,::(z0,z2))) APPENDREVERSE#1(nil(),z0) -> c28() BFTMULT(z0,z1) -> c29(BFTMULT'(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'(z0,z1) -> c30(BFTMULT'#1(bftMult'#2(z0),z1),BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0,z1),z2) -> c31(BFTMULT'#3(z0,z2,z1)) BFTMULT'#2(tuple#2(z0,z1)) -> c32(DEQUEUE(z0,z1)) BFTMULT'#3(::(z0,z1),z2,z3) -> c33(BFTMULT'#4(z0,z2,z3)) BFTMULT'#3(nil(),z0,z1) -> c34() BFTMULT'#4(leaf(),z0,z1) -> c35(BFTMULT'(z1,z0)) BFTMULT'#4(node(z0,z1,z2),z3,z4) -> c36(BFTMULT'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) ,ENQUEUE(z2,enqueue(z1,z4)) ,ENQUEUE(z1,z4)) BFTMULT'#5(z0,z1,z2) -> c37(BFTMULT'(z0,matrixMult(z1,z2)),MATRIXMULT(z1,z2)) COMPUTELINE(z0,z1,z2) -> c38(COMPUTELINE#1(z0,z2,z1)) COMPUTELINE#1(::(z0,z1),z2,z3) -> c39(COMPUTELINE#2(z3,z2,z0,z1)) COMPUTELINE#1(nil(),z0,z1) -> c40() COMPUTELINE#2(::(z0,z1),z2,z3,z4) -> c41(COMPUTELINE(z4,z1,lineMult(z3,z0,z2)),LINEMULT(z3,z0,z2)) COMPUTELINE#2(nil(),z0,z1,z2) -> c42() DEQUEUE(z0,z1) -> c43(DEQUEUE#1(z0,z1)) DEQUEUE#1(::(z0,z1),z2) -> c44() DEQUEUE#1(nil(),z0) -> c45(DEQUEUE#2(reverse(z0)),REVERSE(z0)) DEQUEUE#2(::(z0,z1)) -> c46() DEQUEUE#2(nil()) -> c47() ENQUEUE(z0,z1) -> c48(ENQUEUE#1(z1,z0)) ENQUEUE#1(tuple#2(z0,z1),z2) -> c49() LINEMULT(z0,z1,z2) -> c50(LINEMULT#1(z1,z2,z0)) LINEMULT#1(::(z0,z1),z2,z3) -> c51(LINEMULT#2(z2,z3,z0,z1)) LINEMULT#1(nil(),z0,z1) -> c52() LINEMULT#2(::(z0,z1),z2,z3,z4) -> c53(+'(*(z3,z2),z0),*'(z3,z2)) LINEMULT#2(::(z0,z1),z2,z3,z4) -> c54(LINEMULT(z2,z4,z1)) LINEMULT#2(nil(),z0,z1,z2) -> c55(*'(z1,z0)) LINEMULT#2(nil(),z0,z1,z2) -> c56(LINEMULT(z0,z2,nil())) MATRIXMULT(z0,z1) -> c57(MATRIXMULT#1(z0,z1)) MATRIXMULT#1(::(z0,z1),z2) -> c58(COMPUTELINE(z0,z2,nil())) MATRIXMULT#1(::(z0,z1),z2) -> c59(MATRIXMULT(z1,z2)) MATRIXMULT#1(nil(),z0) -> c60() REVERSE(z0) -> c61(APPENDREVERSE(z0,nil())) - Weak TRS: #ADD(#0(),z0) -> c() #ADD(#neg(#s(#0())),z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))),z1) -> c2(#PRED(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #ADD(#pos(#s(#0())),z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))),z1) -> c4(#SUCC(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #MULT(#0(),#0()) -> c5() #MULT(#0(),#neg(z0)) -> c6() #MULT(#0(),#pos(z0)) -> c7() #MULT(#neg(z0),#0()) -> c8() #MULT(#neg(z0),#neg(z1)) -> c9(#NATMULT(z0,z1)) #MULT(#neg(z0),#pos(z1)) -> c10(#NATMULT(z0,z1)) #MULT(#pos(z0),#0()) -> c11() #MULT(#pos(z0),#neg(z1)) -> c12(#NATMULT(z0,z1)) #MULT(#pos(z0),#pos(z1)) -> c13(#NATMULT(z0,z1)) #NATMULT(#0(),z0) -> c14() #NATMULT(#s(z0),z1) -> c15(#ADD(#pos(z1),#natmult(z0,z1)),#NATMULT(z0,z1)) #PRED(#0()) -> c16() #PRED(#neg(#s(z0))) -> c17() #PRED(#pos(#s(#0()))) -> c18() #PRED(#pos(#s(#s(z0)))) -> c19() #SUCC(#0()) -> c20() #SUCC(#neg(#s(#0()))) -> c21() #SUCC(#neg(#s(#s(z0)))) -> c22() #SUCC(#pos(#s(z0))) -> c23() #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult(z0,z1) -> bftMult'(tuple#2(::(z0,nil()),nil()),z1) bftMult'(z0,z1) -> bftMult'#1(bftMult'#2(z0),z1) bftMult'#1(tuple#2(z0,z1),z2) -> bftMult'#3(z0,z2,z1) bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) bftMult'#3(::(z0,z1),z2,z3) -> bftMult'#4(z0,z2,z3) bftMult'#3(nil(),z0,z1) -> z0 bftMult'#4(leaf(),z0,z1) -> bftMult'(z1,z0) bftMult'#4(node(z0,z1,z2),z3,z4) -> bftMult'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) bftMult'#5(z0,z1,z2) -> bftMult'(z0,matrixMult(z1,z2)) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2 ,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1 ,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0 ,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1 ,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3,tuple#2/2} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD,#MULT,#NATMULT,#PRED,#SUCC,#add,#mult,#natmult,#pred ,#succ,*,*',+,+',APPENDREVERSE,APPENDREVERSE#1,BFTMULT,BFTMULT',BFTMULT'#1,BFTMULT'#2,BFTMULT'#3,BFTMULT'#4 ,BFTMULT'#5,COMPUTELINE,COMPUTELINE#1,COMPUTELINE#2,DEQUEUE,DEQUEUE#1,DEQUEUE#2,ENQUEUE,ENQUEUE#1,LINEMULT ,LINEMULT#1,LINEMULT#2,MATRIXMULT,MATRIXMULT#1,REVERSE,appendreverse,appendreverse#1,bftMult,bftMult' ,bftMult'#1,bftMult'#2,bftMult'#3,bftMult'#4,bftMult'#5,computeLine,computeLine#1,computeLine#2,dequeue ,dequeue#1,dequeue#2,enqueue,enqueue#1,lineMult,lineMult#1,lineMult#2,matrixMult,matrixMult#1 ,reverse} and constructors {#0,#neg,#pos,#s,::,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22 ,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47 ,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs *'#(z0,z1) -> c_1(#MULT#(z0,z1)) +'#(z0,z1) -> c_2(#ADD#(z0,z1)) APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) APPENDREVERSE#1#(nil(),z0) -> c_5() BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#3#(nil(),z0,z1) -> c_11() BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#1#(nil(),z0,z1) -> c_17() COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(::(z0,z1),z2) -> c_21() DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) DEQUEUE#2#(::(z0,z1)) -> c_23() DEQUEUE#2#(nil()) -> c_24() ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#1#(nil(),z0,z1) -> c_29() LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) MATRIXMULT#1#(nil(),z0) -> c_37() REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) Weak DPs #ADD#(#0(),z0) -> c_39() #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #MULT#(#0(),#0()) -> c_44() #MULT#(#0(),#neg(z0)) -> c_45() #MULT#(#0(),#pos(z0)) -> c_46() #MULT#(#neg(z0),#0()) -> c_47() #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#0()) -> c_50() #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) #NATMULT#(#0(),z0) -> c_53() #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) #PRED#(#0()) -> c_55() #PRED#(#neg(#s(z0))) -> c_56() #PRED#(#pos(#s(#0()))) -> c_57() #PRED#(#pos(#s(#s(z0)))) -> c_58() #SUCC#(#0()) -> c_59() #SUCC#(#neg(#s(#0()))) -> c_60() #SUCC#(#neg(#s(#s(z0)))) -> c_61() #SUCC#(#pos(#s(z0))) -> c_62() #add#(#0(),z0) -> c_63() #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #mult#(#0(),#0()) -> c_68() #mult#(#0(),#neg(z0)) -> c_69() #mult#(#0(),#pos(z0)) -> c_70() #mult#(#neg(z0),#0()) -> c_71() #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) #mult#(#pos(z0),#0()) -> c_74() #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) #natmult#(#0(),z0) -> c_77() #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) #pred#(#0()) -> c_79() #pred#(#neg(#s(z0))) -> c_80() #pred#(#pos(#s(#0()))) -> c_81() #pred#(#pos(#s(#s(z0)))) -> c_82() #succ#(#0()) -> c_83() #succ#(#neg(#s(#0()))) -> c_84() #succ#(#neg(#s(#s(z0)))) -> c_85() #succ#(#pos(#s(z0))) -> c_86() *#(z0,z1) -> c_87(#mult#(z0,z1)) +#(z0,z1) -> c_88(#add#(z0,z1)) appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) appendreverse#1#(nil(),z0) -> c_91() bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) bftMult'#3#(nil(),z0,z1) -> c_97() bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) computeLine#1#(nil(),z0,z1) -> c_103() computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)),lineMult#(z3,z0,z2)) computeLine#2#(nil(),z0,z1,z2) -> c_105() dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) dequeue#1#(::(z0,z1),z2) -> c_107() dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) dequeue#2#(::(z0,z1)) -> c_109() dequeue#2#(nil()) -> c_110() enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) enqueue#1#(tuple#2(z0,z1),z2) -> c_112() lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) lineMult#1#(nil(),z0,z1) -> c_115() lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) matrixMult#1#(nil(),z0) -> c_120() reverse#(z0) -> c_121(appendreverse#(z0,nil())) and mark the set of starting terms. * Step 3: PredecessorEstimation. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: *'#(z0,z1) -> c_1(#MULT#(z0,z1)) +'#(z0,z1) -> c_2(#ADD#(z0,z1)) APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) APPENDREVERSE#1#(nil(),z0) -> c_5() BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#3#(nil(),z0,z1) -> c_11() BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#1#(nil(),z0,z1) -> c_17() COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(::(z0,z1),z2) -> c_21() DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) DEQUEUE#2#(::(z0,z1)) -> c_23() DEQUEUE#2#(nil()) -> c_24() ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#1#(nil(),z0,z1) -> c_29() LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) MATRIXMULT#1#(nil(),z0) -> c_37() REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: #ADD#(#0(),z0) -> c_39() #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #MULT#(#0(),#0()) -> c_44() #MULT#(#0(),#neg(z0)) -> c_45() #MULT#(#0(),#pos(z0)) -> c_46() #MULT#(#neg(z0),#0()) -> c_47() #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#0()) -> c_50() #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) #NATMULT#(#0(),z0) -> c_53() #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) #PRED#(#0()) -> c_55() #PRED#(#neg(#s(z0))) -> c_56() #PRED#(#pos(#s(#0()))) -> c_57() #PRED#(#pos(#s(#s(z0)))) -> c_58() #SUCC#(#0()) -> c_59() #SUCC#(#neg(#s(#0()))) -> c_60() #SUCC#(#neg(#s(#s(z0)))) -> c_61() #SUCC#(#pos(#s(z0))) -> c_62() #add#(#0(),z0) -> c_63() #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #mult#(#0(),#0()) -> c_68() #mult#(#0(),#neg(z0)) -> c_69() #mult#(#0(),#pos(z0)) -> c_70() #mult#(#neg(z0),#0()) -> c_71() #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) #mult#(#pos(z0),#0()) -> c_74() #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) #natmult#(#0(),z0) -> c_77() #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) #pred#(#0()) -> c_79() #pred#(#neg(#s(z0))) -> c_80() #pred#(#pos(#s(#0()))) -> c_81() #pred#(#pos(#s(#s(z0)))) -> c_82() #succ#(#0()) -> c_83() #succ#(#neg(#s(#0()))) -> c_84() #succ#(#neg(#s(#s(z0)))) -> c_85() #succ#(#pos(#s(z0))) -> c_86() *#(z0,z1) -> c_87(#mult#(z0,z1)) +#(z0,z1) -> c_88(#add#(z0,z1)) appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) appendreverse#1#(nil(),z0) -> c_91() bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) bftMult'#3#(nil(),z0,z1) -> c_97() bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) computeLine#1#(nil(),z0,z1) -> c_103() computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)),lineMult#(z3,z0,z2)) computeLine#2#(nil(),z0,z1,z2) -> c_105() dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) dequeue#1#(::(z0,z1),z2) -> c_107() dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) dequeue#2#(::(z0,z1)) -> c_109() dequeue#2#(nil()) -> c_110() enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) enqueue#1#(tuple#2(z0,z1),z2) -> c_112() lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) lineMult#1#(nil(),z0,z1) -> c_115() lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) matrixMult#1#(nil(),z0) -> c_120() reverse#(z0) -> c_121(appendreverse#(z0,nil())) - Weak TRS: #ADD(#0(),z0) -> c() #ADD(#neg(#s(#0())),z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))),z1) -> c2(#PRED(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #ADD(#pos(#s(#0())),z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))),z1) -> c4(#SUCC(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #MULT(#0(),#0()) -> c5() #MULT(#0(),#neg(z0)) -> c6() #MULT(#0(),#pos(z0)) -> c7() #MULT(#neg(z0),#0()) -> c8() #MULT(#neg(z0),#neg(z1)) -> c9(#NATMULT(z0,z1)) #MULT(#neg(z0),#pos(z1)) -> c10(#NATMULT(z0,z1)) #MULT(#pos(z0),#0()) -> c11() #MULT(#pos(z0),#neg(z1)) -> c12(#NATMULT(z0,z1)) #MULT(#pos(z0),#pos(z1)) -> c13(#NATMULT(z0,z1)) #NATMULT(#0(),z0) -> c14() #NATMULT(#s(z0),z1) -> c15(#ADD(#pos(z1),#natmult(z0,z1)),#NATMULT(z0,z1)) #PRED(#0()) -> c16() #PRED(#neg(#s(z0))) -> c17() #PRED(#pos(#s(#0()))) -> c18() #PRED(#pos(#s(#s(z0)))) -> c19() #SUCC(#0()) -> c20() #SUCC(#neg(#s(#0()))) -> c21() #SUCC(#neg(#s(#s(z0)))) -> c22() #SUCC(#pos(#s(z0))) -> c23() #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) *'(z0,z1) -> c24(#MULT(z0,z1)) +(z0,z1) -> #add(z0,z1) +'(z0,z1) -> c25(#ADD(z0,z1)) APPENDREVERSE(z0,z1) -> c26(APPENDREVERSE#1(z0,z1)) APPENDREVERSE#1(::(z0,z1),z2) -> c27(APPENDREVERSE(z1,::(z0,z2))) APPENDREVERSE#1(nil(),z0) -> c28() BFTMULT(z0,z1) -> c29(BFTMULT'(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'(z0,z1) -> c30(BFTMULT'#1(bftMult'#2(z0),z1),BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0,z1),z2) -> c31(BFTMULT'#3(z0,z2,z1)) BFTMULT'#2(tuple#2(z0,z1)) -> c32(DEQUEUE(z0,z1)) BFTMULT'#3(::(z0,z1),z2,z3) -> c33(BFTMULT'#4(z0,z2,z3)) BFTMULT'#3(nil(),z0,z1) -> c34() BFTMULT'#4(leaf(),z0,z1) -> c35(BFTMULT'(z1,z0)) BFTMULT'#4(node(z0,z1,z2),z3,z4) -> c36(BFTMULT'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) ,ENQUEUE(z2,enqueue(z1,z4)) ,ENQUEUE(z1,z4)) BFTMULT'#5(z0,z1,z2) -> c37(BFTMULT'(z0,matrixMult(z1,z2)),MATRIXMULT(z1,z2)) COMPUTELINE(z0,z1,z2) -> c38(COMPUTELINE#1(z0,z2,z1)) COMPUTELINE#1(::(z0,z1),z2,z3) -> c39(COMPUTELINE#2(z3,z2,z0,z1)) COMPUTELINE#1(nil(),z0,z1) -> c40() COMPUTELINE#2(::(z0,z1),z2,z3,z4) -> c41(COMPUTELINE(z4,z1,lineMult(z3,z0,z2)),LINEMULT(z3,z0,z2)) COMPUTELINE#2(nil(),z0,z1,z2) -> c42() DEQUEUE(z0,z1) -> c43(DEQUEUE#1(z0,z1)) DEQUEUE#1(::(z0,z1),z2) -> c44() DEQUEUE#1(nil(),z0) -> c45(DEQUEUE#2(reverse(z0)),REVERSE(z0)) DEQUEUE#2(::(z0,z1)) -> c46() DEQUEUE#2(nil()) -> c47() ENQUEUE(z0,z1) -> c48(ENQUEUE#1(z1,z0)) ENQUEUE#1(tuple#2(z0,z1),z2) -> c49() LINEMULT(z0,z1,z2) -> c50(LINEMULT#1(z1,z2,z0)) LINEMULT#1(::(z0,z1),z2,z3) -> c51(LINEMULT#2(z2,z3,z0,z1)) LINEMULT#1(nil(),z0,z1) -> c52() LINEMULT#2(::(z0,z1),z2,z3,z4) -> c53(+'(*(z3,z2),z0),*'(z3,z2)) LINEMULT#2(::(z0,z1),z2,z3,z4) -> c54(LINEMULT(z2,z4,z1)) LINEMULT#2(nil(),z0,z1,z2) -> c55(*'(z1,z0)) LINEMULT#2(nil(),z0,z1,z2) -> c56(LINEMULT(z0,z2,nil())) MATRIXMULT(z0,z1) -> c57(MATRIXMULT#1(z0,z1)) MATRIXMULT#1(::(z0,z1),z2) -> c58(COMPUTELINE(z0,z2,nil())) MATRIXMULT#1(::(z0,z1),z2) -> c59(MATRIXMULT(z1,z2)) MATRIXMULT#1(nil(),z0) -> c60() REVERSE(z0) -> c61(APPENDREVERSE(z0,nil())) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult(z0,z1) -> bftMult'(tuple#2(::(z0,nil()),nil()),z1) bftMult'(z0,z1) -> bftMult'#1(bftMult'#2(z0),z1) bftMult'#1(tuple#2(z0,z1),z2) -> bftMult'#3(z0,z2,z1) bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) bftMult'#3(::(z0,z1),z2,z3) -> bftMult'#4(z0,z2,z3) bftMult'#3(nil(),z0,z1) -> z0 bftMult'#4(leaf(),z0,z1) -> bftMult'(z1,z0) bftMult'#4(node(z0,z1,z2),z3,z4) -> bftMult'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) bftMult'#5(z0,z1,z2) -> bftMult'(z0,matrixMult(z1,z2)) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/3,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/6,c_14/3,c_15/1 ,c_16/1,c_17/0,c_18/3,c_19/0,c_20/1,c_21/0,c_22/3,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,2,5,11,17,19,21,23,24,26,29,37} by application of Pre({1,2,5,11,17,19,21,23,24,26,29,37}) = {3,8,15,16,20,22,25,27,30,32,34}. Here rules are labelled as follows: 1: *'#(z0,z1) -> c_1(#MULT#(z0,z1)) 2: +'#(z0,z1) -> c_2(#ADD#(z0,z1)) 3: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) 4: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) 5: APPENDREVERSE#1#(nil(),z0) -> c_5() 6: BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) 7: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) 8: BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) 9: BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) 10: BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) 11: BFTMULT'#3#(nil(),z0,z1) -> c_11() 12: BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) 13: BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) 14: BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) 15: COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) 16: COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) 17: COMPUTELINE#1#(nil(),z0,z1) -> c_17() 18: COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) 19: COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() 20: DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) 21: DEQUEUE#1#(::(z0,z1),z2) -> c_21() 22: DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) 23: DEQUEUE#2#(::(z0,z1)) -> c_23() 24: DEQUEUE#2#(nil()) -> c_24() 25: ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) 26: ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() 27: LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) 28: LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) 29: LINEMULT#1#(nil(),z0,z1) -> c_29() 30: LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) 31: LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) 32: LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) 33: LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) 34: MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) 35: MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) 36: MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) 37: MATRIXMULT#1#(nil(),z0) -> c_37() 38: REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) 39: #ADD#(#0(),z0) -> c_39() 40: #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) 41: #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) 42: #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) 43: #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) 44: #MULT#(#0(),#0()) -> c_44() 45: #MULT#(#0(),#neg(z0)) -> c_45() 46: #MULT#(#0(),#pos(z0)) -> c_46() 47: #MULT#(#neg(z0),#0()) -> c_47() 48: #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) 49: #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) 50: #MULT#(#pos(z0),#0()) -> c_50() 51: #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) 52: #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) 53: #NATMULT#(#0(),z0) -> c_53() 54: #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) 55: #PRED#(#0()) -> c_55() 56: #PRED#(#neg(#s(z0))) -> c_56() 57: #PRED#(#pos(#s(#0()))) -> c_57() 58: #PRED#(#pos(#s(#s(z0)))) -> c_58() 59: #SUCC#(#0()) -> c_59() 60: #SUCC#(#neg(#s(#0()))) -> c_60() 61: #SUCC#(#neg(#s(#s(z0)))) -> c_61() 62: #SUCC#(#pos(#s(z0))) -> c_62() 63: #add#(#0(),z0) -> c_63() 64: #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) 65: #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) 66: #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) 67: #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) 68: #mult#(#0(),#0()) -> c_68() 69: #mult#(#0(),#neg(z0)) -> c_69() 70: #mult#(#0(),#pos(z0)) -> c_70() 71: #mult#(#neg(z0),#0()) -> c_71() 72: #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) 73: #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) 74: #mult#(#pos(z0),#0()) -> c_74() 75: #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) 76: #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) 77: #natmult#(#0(),z0) -> c_77() 78: #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) 79: #pred#(#0()) -> c_79() 80: #pred#(#neg(#s(z0))) -> c_80() 81: #pred#(#pos(#s(#0()))) -> c_81() 82: #pred#(#pos(#s(#s(z0)))) -> c_82() 83: #succ#(#0()) -> c_83() 84: #succ#(#neg(#s(#0()))) -> c_84() 85: #succ#(#neg(#s(#s(z0)))) -> c_85() 86: #succ#(#pos(#s(z0))) -> c_86() 87: *#(z0,z1) -> c_87(#mult#(z0,z1)) 88: +#(z0,z1) -> c_88(#add#(z0,z1)) 89: appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) 90: appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) 91: appendreverse#1#(nil(),z0) -> c_91() 92: bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) 93: bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) 94: bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) 95: bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) 96: bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) 97: bftMult'#3#(nil(),z0,z1) -> c_97() 98: bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) 99: bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) 100: bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) 101: computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) 102: computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) 103: computeLine#1#(nil(),z0,z1) -> c_103() 104: computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)),lineMult#(z3,z0,z2)) 105: computeLine#2#(nil(),z0,z1,z2) -> c_105() 106: dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) 107: dequeue#1#(::(z0,z1),z2) -> c_107() 108: dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) 109: dequeue#2#(::(z0,z1)) -> c_109() 110: dequeue#2#(nil()) -> c_110() 111: enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) 112: enqueue#1#(tuple#2(z0,z1),z2) -> c_112() 113: lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) 114: lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) 115: lineMult#1#(nil(),z0,z1) -> c_115() 116: lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) 117: lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) 118: matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) 119: matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) 120: matrixMult#1#(nil(),z0) -> c_120() 121: reverse#(z0) -> c_121(appendreverse#(z0,nil())) * Step 4: PredecessorEstimation. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: #ADD#(#0(),z0) -> c_39() #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #MULT#(#0(),#0()) -> c_44() #MULT#(#0(),#neg(z0)) -> c_45() #MULT#(#0(),#pos(z0)) -> c_46() #MULT#(#neg(z0),#0()) -> c_47() #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#0()) -> c_50() #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) #NATMULT#(#0(),z0) -> c_53() #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) #PRED#(#0()) -> c_55() #PRED#(#neg(#s(z0))) -> c_56() #PRED#(#pos(#s(#0()))) -> c_57() #PRED#(#pos(#s(#s(z0)))) -> c_58() #SUCC#(#0()) -> c_59() #SUCC#(#neg(#s(#0()))) -> c_60() #SUCC#(#neg(#s(#s(z0)))) -> c_61() #SUCC#(#pos(#s(z0))) -> c_62() #add#(#0(),z0) -> c_63() #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #mult#(#0(),#0()) -> c_68() #mult#(#0(),#neg(z0)) -> c_69() #mult#(#0(),#pos(z0)) -> c_70() #mult#(#neg(z0),#0()) -> c_71() #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) #mult#(#pos(z0),#0()) -> c_74() #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) #natmult#(#0(),z0) -> c_77() #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) #pred#(#0()) -> c_79() #pred#(#neg(#s(z0))) -> c_80() #pred#(#pos(#s(#0()))) -> c_81() #pred#(#pos(#s(#s(z0)))) -> c_82() #succ#(#0()) -> c_83() #succ#(#neg(#s(#0()))) -> c_84() #succ#(#neg(#s(#s(z0)))) -> c_85() #succ#(#pos(#s(z0))) -> c_86() *#(z0,z1) -> c_87(#mult#(z0,z1)) *'#(z0,z1) -> c_1(#MULT#(z0,z1)) +#(z0,z1) -> c_88(#add#(z0,z1)) +'#(z0,z1) -> c_2(#ADD#(z0,z1)) APPENDREVERSE#1#(nil(),z0) -> c_5() BFTMULT'#3#(nil(),z0,z1) -> c_11() COMPUTELINE#1#(nil(),z0,z1) -> c_17() COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() DEQUEUE#1#(::(z0,z1),z2) -> c_21() DEQUEUE#2#(::(z0,z1)) -> c_23() DEQUEUE#2#(nil()) -> c_24() ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() LINEMULT#1#(nil(),z0,z1) -> c_29() MATRIXMULT#1#(nil(),z0) -> c_37() appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) appendreverse#1#(nil(),z0) -> c_91() bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) bftMult'#3#(nil(),z0,z1) -> c_97() bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) computeLine#1#(nil(),z0,z1) -> c_103() computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)),lineMult#(z3,z0,z2)) computeLine#2#(nil(),z0,z1,z2) -> c_105() dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) dequeue#1#(::(z0,z1),z2) -> c_107() dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) dequeue#2#(::(z0,z1)) -> c_109() dequeue#2#(nil()) -> c_110() enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) enqueue#1#(tuple#2(z0,z1),z2) -> c_112() lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) lineMult#1#(nil(),z0,z1) -> c_115() lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) matrixMult#1#(nil(),z0) -> c_120() reverse#(z0) -> c_121(appendreverse#(z0,nil())) - Weak TRS: #ADD(#0(),z0) -> c() #ADD(#neg(#s(#0())),z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))),z1) -> c2(#PRED(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #ADD(#pos(#s(#0())),z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))),z1) -> c4(#SUCC(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #MULT(#0(),#0()) -> c5() #MULT(#0(),#neg(z0)) -> c6() #MULT(#0(),#pos(z0)) -> c7() #MULT(#neg(z0),#0()) -> c8() #MULT(#neg(z0),#neg(z1)) -> c9(#NATMULT(z0,z1)) #MULT(#neg(z0),#pos(z1)) -> c10(#NATMULT(z0,z1)) #MULT(#pos(z0),#0()) -> c11() #MULT(#pos(z0),#neg(z1)) -> c12(#NATMULT(z0,z1)) #MULT(#pos(z0),#pos(z1)) -> c13(#NATMULT(z0,z1)) #NATMULT(#0(),z0) -> c14() #NATMULT(#s(z0),z1) -> c15(#ADD(#pos(z1),#natmult(z0,z1)),#NATMULT(z0,z1)) #PRED(#0()) -> c16() #PRED(#neg(#s(z0))) -> c17() #PRED(#pos(#s(#0()))) -> c18() #PRED(#pos(#s(#s(z0)))) -> c19() #SUCC(#0()) -> c20() #SUCC(#neg(#s(#0()))) -> c21() #SUCC(#neg(#s(#s(z0)))) -> c22() #SUCC(#pos(#s(z0))) -> c23() #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) *'(z0,z1) -> c24(#MULT(z0,z1)) +(z0,z1) -> #add(z0,z1) +'(z0,z1) -> c25(#ADD(z0,z1)) APPENDREVERSE(z0,z1) -> c26(APPENDREVERSE#1(z0,z1)) APPENDREVERSE#1(::(z0,z1),z2) -> c27(APPENDREVERSE(z1,::(z0,z2))) APPENDREVERSE#1(nil(),z0) -> c28() BFTMULT(z0,z1) -> c29(BFTMULT'(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'(z0,z1) -> c30(BFTMULT'#1(bftMult'#2(z0),z1),BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0,z1),z2) -> c31(BFTMULT'#3(z0,z2,z1)) BFTMULT'#2(tuple#2(z0,z1)) -> c32(DEQUEUE(z0,z1)) BFTMULT'#3(::(z0,z1),z2,z3) -> c33(BFTMULT'#4(z0,z2,z3)) BFTMULT'#3(nil(),z0,z1) -> c34() BFTMULT'#4(leaf(),z0,z1) -> c35(BFTMULT'(z1,z0)) BFTMULT'#4(node(z0,z1,z2),z3,z4) -> c36(BFTMULT'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) ,ENQUEUE(z2,enqueue(z1,z4)) ,ENQUEUE(z1,z4)) BFTMULT'#5(z0,z1,z2) -> c37(BFTMULT'(z0,matrixMult(z1,z2)),MATRIXMULT(z1,z2)) COMPUTELINE(z0,z1,z2) -> c38(COMPUTELINE#1(z0,z2,z1)) COMPUTELINE#1(::(z0,z1),z2,z3) -> c39(COMPUTELINE#2(z3,z2,z0,z1)) COMPUTELINE#1(nil(),z0,z1) -> c40() COMPUTELINE#2(::(z0,z1),z2,z3,z4) -> c41(COMPUTELINE(z4,z1,lineMult(z3,z0,z2)),LINEMULT(z3,z0,z2)) COMPUTELINE#2(nil(),z0,z1,z2) -> c42() DEQUEUE(z0,z1) -> c43(DEQUEUE#1(z0,z1)) DEQUEUE#1(::(z0,z1),z2) -> c44() DEQUEUE#1(nil(),z0) -> c45(DEQUEUE#2(reverse(z0)),REVERSE(z0)) DEQUEUE#2(::(z0,z1)) -> c46() DEQUEUE#2(nil()) -> c47() ENQUEUE(z0,z1) -> c48(ENQUEUE#1(z1,z0)) ENQUEUE#1(tuple#2(z0,z1),z2) -> c49() LINEMULT(z0,z1,z2) -> c50(LINEMULT#1(z1,z2,z0)) LINEMULT#1(::(z0,z1),z2,z3) -> c51(LINEMULT#2(z2,z3,z0,z1)) LINEMULT#1(nil(),z0,z1) -> c52() LINEMULT#2(::(z0,z1),z2,z3,z4) -> c53(+'(*(z3,z2),z0),*'(z3,z2)) LINEMULT#2(::(z0,z1),z2,z3,z4) -> c54(LINEMULT(z2,z4,z1)) LINEMULT#2(nil(),z0,z1,z2) -> c55(*'(z1,z0)) LINEMULT#2(nil(),z0,z1,z2) -> c56(LINEMULT(z0,z2,nil())) MATRIXMULT(z0,z1) -> c57(MATRIXMULT#1(z0,z1)) MATRIXMULT#1(::(z0,z1),z2) -> c58(COMPUTELINE(z0,z2,nil())) MATRIXMULT#1(::(z0,z1),z2) -> c59(MATRIXMULT(z1,z2)) MATRIXMULT#1(nil(),z0) -> c60() REVERSE(z0) -> c61(APPENDREVERSE(z0,nil())) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult(z0,z1) -> bftMult'(tuple#2(::(z0,nil()),nil()),z1) bftMult'(z0,z1) -> bftMult'#1(bftMult'#2(z0),z1) bftMult'#1(tuple#2(z0,z1),z2) -> bftMult'#3(z0,z2,z1) bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) bftMult'#3(::(z0,z1),z2,z3) -> bftMult'#4(z0,z2,z3) bftMult'#3(nil(),z0,z1) -> z0 bftMult'#4(leaf(),z0,z1) -> bftMult'(z1,z0) bftMult'#4(node(z0,z1,z2),z3,z4) -> bftMult'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) bftMult'#5(z0,z1,z2) -> bftMult'(z0,matrixMult(z1,z2)) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/3,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/6,c_14/3,c_15/1 ,c_16/1,c_17/0,c_18/3,c_19/0,c_20/1,c_21/0,c_22/3,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {16,19,21} by application of Pre({16,19,21}) = {9,18}. Here rules are labelled as follows: 1: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) 2: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) 3: BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) 4: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) 5: BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) 6: BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) 7: BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) 8: BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) 9: BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) 10: BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) 11: COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) 12: COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) 13: COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) 14: DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) 15: DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) 16: ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) 17: LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) 18: LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) 19: LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) 20: LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) 21: LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) 22: LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) 23: MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) 24: MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) 25: MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) 26: REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) 27: #ADD#(#0(),z0) -> c_39() 28: #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) 29: #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) 30: #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) 31: #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) 32: #MULT#(#0(),#0()) -> c_44() 33: #MULT#(#0(),#neg(z0)) -> c_45() 34: #MULT#(#0(),#pos(z0)) -> c_46() 35: #MULT#(#neg(z0),#0()) -> c_47() 36: #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) 37: #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) 38: #MULT#(#pos(z0),#0()) -> c_50() 39: #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) 40: #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) 41: #NATMULT#(#0(),z0) -> c_53() 42: #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) 43: #PRED#(#0()) -> c_55() 44: #PRED#(#neg(#s(z0))) -> c_56() 45: #PRED#(#pos(#s(#0()))) -> c_57() 46: #PRED#(#pos(#s(#s(z0)))) -> c_58() 47: #SUCC#(#0()) -> c_59() 48: #SUCC#(#neg(#s(#0()))) -> c_60() 49: #SUCC#(#neg(#s(#s(z0)))) -> c_61() 50: #SUCC#(#pos(#s(z0))) -> c_62() 51: #add#(#0(),z0) -> c_63() 52: #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) 53: #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) 54: #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) 55: #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) 56: #mult#(#0(),#0()) -> c_68() 57: #mult#(#0(),#neg(z0)) -> c_69() 58: #mult#(#0(),#pos(z0)) -> c_70() 59: #mult#(#neg(z0),#0()) -> c_71() 60: #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) 61: #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) 62: #mult#(#pos(z0),#0()) -> c_74() 63: #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) 64: #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) 65: #natmult#(#0(),z0) -> c_77() 66: #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) 67: #pred#(#0()) -> c_79() 68: #pred#(#neg(#s(z0))) -> c_80() 69: #pred#(#pos(#s(#0()))) -> c_81() 70: #pred#(#pos(#s(#s(z0)))) -> c_82() 71: #succ#(#0()) -> c_83() 72: #succ#(#neg(#s(#0()))) -> c_84() 73: #succ#(#neg(#s(#s(z0)))) -> c_85() 74: #succ#(#pos(#s(z0))) -> c_86() 75: *#(z0,z1) -> c_87(#mult#(z0,z1)) 76: *'#(z0,z1) -> c_1(#MULT#(z0,z1)) 77: +#(z0,z1) -> c_88(#add#(z0,z1)) 78: +'#(z0,z1) -> c_2(#ADD#(z0,z1)) 79: APPENDREVERSE#1#(nil(),z0) -> c_5() 80: BFTMULT'#3#(nil(),z0,z1) -> c_11() 81: COMPUTELINE#1#(nil(),z0,z1) -> c_17() 82: COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() 83: DEQUEUE#1#(::(z0,z1),z2) -> c_21() 84: DEQUEUE#2#(::(z0,z1)) -> c_23() 85: DEQUEUE#2#(nil()) -> c_24() 86: ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() 87: LINEMULT#1#(nil(),z0,z1) -> c_29() 88: MATRIXMULT#1#(nil(),z0) -> c_37() 89: appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) 90: appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) 91: appendreverse#1#(nil(),z0) -> c_91() 92: bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) 93: bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) 94: bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) 95: bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) 96: bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) 97: bftMult'#3#(nil(),z0,z1) -> c_97() 98: bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) 99: bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) 100: bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) 101: computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) 102: computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) 103: computeLine#1#(nil(),z0,z1) -> c_103() 104: computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)),lineMult#(z3,z0,z2)) 105: computeLine#2#(nil(),z0,z1,z2) -> c_105() 106: dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) 107: dequeue#1#(::(z0,z1),z2) -> c_107() 108: dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) 109: dequeue#2#(::(z0,z1)) -> c_109() 110: dequeue#2#(nil()) -> c_110() 111: enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) 112: enqueue#1#(tuple#2(z0,z1),z2) -> c_112() 113: lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) 114: lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) 115: lineMult#1#(nil(),z0,z1) -> c_115() 116: lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) 117: lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) 118: matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) 119: matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) 120: matrixMult#1#(nil(),z0) -> c_120() 121: reverse#(z0) -> c_121(appendreverse#(z0,nil())) * Step 5: RemoveWeakSuffixes. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: #ADD#(#0(),z0) -> c_39() #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) #MULT#(#0(),#0()) -> c_44() #MULT#(#0(),#neg(z0)) -> c_45() #MULT#(#0(),#pos(z0)) -> c_46() #MULT#(#neg(z0),#0()) -> c_47() #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#0()) -> c_50() #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) #NATMULT#(#0(),z0) -> c_53() #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) #PRED#(#0()) -> c_55() #PRED#(#neg(#s(z0))) -> c_56() #PRED#(#pos(#s(#0()))) -> c_57() #PRED#(#pos(#s(#s(z0)))) -> c_58() #SUCC#(#0()) -> c_59() #SUCC#(#neg(#s(#0()))) -> c_60() #SUCC#(#neg(#s(#s(z0)))) -> c_61() #SUCC#(#pos(#s(z0))) -> c_62() #add#(#0(),z0) -> c_63() #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) #mult#(#0(),#0()) -> c_68() #mult#(#0(),#neg(z0)) -> c_69() #mult#(#0(),#pos(z0)) -> c_70() #mult#(#neg(z0),#0()) -> c_71() #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) #mult#(#pos(z0),#0()) -> c_74() #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) #natmult#(#0(),z0) -> c_77() #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) #pred#(#0()) -> c_79() #pred#(#neg(#s(z0))) -> c_80() #pred#(#pos(#s(#0()))) -> c_81() #pred#(#pos(#s(#s(z0)))) -> c_82() #succ#(#0()) -> c_83() #succ#(#neg(#s(#0()))) -> c_84() #succ#(#neg(#s(#s(z0)))) -> c_85() #succ#(#pos(#s(z0))) -> c_86() *#(z0,z1) -> c_87(#mult#(z0,z1)) *'#(z0,z1) -> c_1(#MULT#(z0,z1)) +#(z0,z1) -> c_88(#add#(z0,z1)) +'#(z0,z1) -> c_2(#ADD#(z0,z1)) APPENDREVERSE#1#(nil(),z0) -> c_5() BFTMULT'#3#(nil(),z0,z1) -> c_11() COMPUTELINE#1#(nil(),z0,z1) -> c_17() COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() DEQUEUE#1#(::(z0,z1),z2) -> c_21() DEQUEUE#2#(::(z0,z1)) -> c_23() DEQUEUE#2#(nil()) -> c_24() ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() LINEMULT#1#(nil(),z0,z1) -> c_29() LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) MATRIXMULT#1#(nil(),z0) -> c_37() appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) appendreverse#1#(nil(),z0) -> c_91() bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) bftMult'#3#(nil(),z0,z1) -> c_97() bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) computeLine#1#(nil(),z0,z1) -> c_103() computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)),lineMult#(z3,z0,z2)) computeLine#2#(nil(),z0,z1,z2) -> c_105() dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) dequeue#1#(::(z0,z1),z2) -> c_107() dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) dequeue#2#(::(z0,z1)) -> c_109() dequeue#2#(nil()) -> c_110() enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) enqueue#1#(tuple#2(z0,z1),z2) -> c_112() lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) lineMult#1#(nil(),z0,z1) -> c_115() lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) matrixMult#1#(nil(),z0) -> c_120() reverse#(z0) -> c_121(appendreverse#(z0,nil())) - Weak TRS: #ADD(#0(),z0) -> c() #ADD(#neg(#s(#0())),z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))),z1) -> c2(#PRED(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #ADD(#pos(#s(#0())),z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))),z1) -> c4(#SUCC(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #MULT(#0(),#0()) -> c5() #MULT(#0(),#neg(z0)) -> c6() #MULT(#0(),#pos(z0)) -> c7() #MULT(#neg(z0),#0()) -> c8() #MULT(#neg(z0),#neg(z1)) -> c9(#NATMULT(z0,z1)) #MULT(#neg(z0),#pos(z1)) -> c10(#NATMULT(z0,z1)) #MULT(#pos(z0),#0()) -> c11() #MULT(#pos(z0),#neg(z1)) -> c12(#NATMULT(z0,z1)) #MULT(#pos(z0),#pos(z1)) -> c13(#NATMULT(z0,z1)) #NATMULT(#0(),z0) -> c14() #NATMULT(#s(z0),z1) -> c15(#ADD(#pos(z1),#natmult(z0,z1)),#NATMULT(z0,z1)) #PRED(#0()) -> c16() #PRED(#neg(#s(z0))) -> c17() #PRED(#pos(#s(#0()))) -> c18() #PRED(#pos(#s(#s(z0)))) -> c19() #SUCC(#0()) -> c20() #SUCC(#neg(#s(#0()))) -> c21() #SUCC(#neg(#s(#s(z0)))) -> c22() #SUCC(#pos(#s(z0))) -> c23() #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) *'(z0,z1) -> c24(#MULT(z0,z1)) +(z0,z1) -> #add(z0,z1) +'(z0,z1) -> c25(#ADD(z0,z1)) APPENDREVERSE(z0,z1) -> c26(APPENDREVERSE#1(z0,z1)) APPENDREVERSE#1(::(z0,z1),z2) -> c27(APPENDREVERSE(z1,::(z0,z2))) APPENDREVERSE#1(nil(),z0) -> c28() BFTMULT(z0,z1) -> c29(BFTMULT'(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'(z0,z1) -> c30(BFTMULT'#1(bftMult'#2(z0),z1),BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0,z1),z2) -> c31(BFTMULT'#3(z0,z2,z1)) BFTMULT'#2(tuple#2(z0,z1)) -> c32(DEQUEUE(z0,z1)) BFTMULT'#3(::(z0,z1),z2,z3) -> c33(BFTMULT'#4(z0,z2,z3)) BFTMULT'#3(nil(),z0,z1) -> c34() BFTMULT'#4(leaf(),z0,z1) -> c35(BFTMULT'(z1,z0)) BFTMULT'#4(node(z0,z1,z2),z3,z4) -> c36(BFTMULT'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) ,ENQUEUE(z2,enqueue(z1,z4)) ,ENQUEUE(z1,z4)) BFTMULT'#5(z0,z1,z2) -> c37(BFTMULT'(z0,matrixMult(z1,z2)),MATRIXMULT(z1,z2)) COMPUTELINE(z0,z1,z2) -> c38(COMPUTELINE#1(z0,z2,z1)) COMPUTELINE#1(::(z0,z1),z2,z3) -> c39(COMPUTELINE#2(z3,z2,z0,z1)) COMPUTELINE#1(nil(),z0,z1) -> c40() COMPUTELINE#2(::(z0,z1),z2,z3,z4) -> c41(COMPUTELINE(z4,z1,lineMult(z3,z0,z2)),LINEMULT(z3,z0,z2)) COMPUTELINE#2(nil(),z0,z1,z2) -> c42() DEQUEUE(z0,z1) -> c43(DEQUEUE#1(z0,z1)) DEQUEUE#1(::(z0,z1),z2) -> c44() DEQUEUE#1(nil(),z0) -> c45(DEQUEUE#2(reverse(z0)),REVERSE(z0)) DEQUEUE#2(::(z0,z1)) -> c46() DEQUEUE#2(nil()) -> c47() ENQUEUE(z0,z1) -> c48(ENQUEUE#1(z1,z0)) ENQUEUE#1(tuple#2(z0,z1),z2) -> c49() LINEMULT(z0,z1,z2) -> c50(LINEMULT#1(z1,z2,z0)) LINEMULT#1(::(z0,z1),z2,z3) -> c51(LINEMULT#2(z2,z3,z0,z1)) LINEMULT#1(nil(),z0,z1) -> c52() LINEMULT#2(::(z0,z1),z2,z3,z4) -> c53(+'(*(z3,z2),z0),*'(z3,z2)) LINEMULT#2(::(z0,z1),z2,z3,z4) -> c54(LINEMULT(z2,z4,z1)) LINEMULT#2(nil(),z0,z1,z2) -> c55(*'(z1,z0)) LINEMULT#2(nil(),z0,z1,z2) -> c56(LINEMULT(z0,z2,nil())) MATRIXMULT(z0,z1) -> c57(MATRIXMULT#1(z0,z1)) MATRIXMULT#1(::(z0,z1),z2) -> c58(COMPUTELINE(z0,z2,nil())) MATRIXMULT#1(::(z0,z1),z2) -> c59(MATRIXMULT(z1,z2)) MATRIXMULT#1(nil(),z0) -> c60() REVERSE(z0) -> c61(APPENDREVERSE(z0,nil())) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult(z0,z1) -> bftMult'(tuple#2(::(z0,nil()),nil()),z1) bftMult'(z0,z1) -> bftMult'#1(bftMult'#2(z0),z1) bftMult'#1(tuple#2(z0,z1),z2) -> bftMult'#3(z0,z2,z1) bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) bftMult'#3(::(z0,z1),z2,z3) -> bftMult'#4(z0,z2,z3) bftMult'#3(nil(),z0,z1) -> z0 bftMult'#4(leaf(),z0,z1) -> bftMult'(z1,z0) bftMult'#4(node(z0,z1,z2),z3,z4) -> bftMult'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) bftMult'#5(z0,z1,z2) -> bftMult'(z0,matrixMult(z1,z2)) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/3,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/6,c_14/3,c_15/1 ,c_16/1,c_17/0,c_18/3,c_19/0,c_20/1,c_21/0,c_22/3,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) -->_1 APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))):2 -->_1 APPENDREVERSE#1#(nil(),z0) -> c_5():76 2:S:APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 3:S:BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)):4 4:S:BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) -->_2 bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)):95 -->_3 BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)):6 -->_1 BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)):5 5:S:BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) -->_1 BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)):7 -->_1 BFTMULT'#3#(nil(),z0,z1) -> c_11():77 6:S:BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) -->_1 DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)):14 7:S:BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) -->_1 BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)):9 -->_1 BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)):8 8:S:BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)):4 9:S:BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) -->_5 enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)):111 -->_3 enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)):111 -->_2 enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)):111 -->_6 ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)):83 -->_4 ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)):83 -->_1 BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)) ,matrixMult#(z1,z2) ,MATRIXMULT#(z1,z2)):10 10:S:BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) -->_2 matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)):118 -->_3 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):20 -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)):4 11:S:COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) -->_1 COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)):12 -->_1 COMPUTELINE#1#(nil(),z0,z1) -> c_17():78 12:S:COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) -->_1 COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)):13 -->_1 COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19():79 13:S:COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) -->_2 lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)):113 -->_3 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):11 14:S:DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) -->_1 DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)):15 -->_1 DEQUEUE#1#(::(z0,z1),z2) -> c_21():80 15:S:DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) -->_2 reverse#(z0) -> c_121(appendreverse#(z0,nil())):121 -->_3 REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())):23 -->_1 DEQUEUE#2#(nil()) -> c_24():82 -->_1 DEQUEUE#2#(::(z0,z1)) -> c_23():81 16:S:LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) -->_1 LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)):17 -->_1 LINEMULT#1#(nil(),z0,z1) -> c_29():85 17:S:LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) -->_1 LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)):87 -->_1 LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)):86 -->_1 LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())):19 -->_1 LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)):18 18:S:LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 19:S:LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 20:S:MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)):22 -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())):21 -->_1 MATRIXMULT#1#(nil(),z0) -> c_37():88 21:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):11 22:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) -->_1 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):20 23:S:REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 24:W:#ADD#(#0(),z0) -> c_39() 25:W:#ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) -->_1 #PRED#(#pos(#s(#s(z0)))) -> c_58():43 -->_1 #PRED#(#pos(#s(#0()))) -> c_57():42 -->_1 #PRED#(#neg(#s(z0))) -> c_56():41 -->_1 #PRED#(#0()) -> c_55():40 26:W:#ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) -->_2 #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)):52 -->_2 #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)):51 -->_3 #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)):28 -->_3 #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)):27 -->_1 #PRED#(#pos(#s(#s(z0)))) -> c_58():43 -->_1 #PRED#(#pos(#s(#0()))) -> c_57():42 -->_1 #PRED#(#neg(#s(z0))) -> c_56():41 -->_1 #PRED#(#0()) -> c_55():40 27:W:#ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) -->_1 #SUCC#(#pos(#s(z0))) -> c_62():47 -->_1 #SUCC#(#neg(#s(#s(z0)))) -> c_61():46 -->_1 #SUCC#(#neg(#s(#0()))) -> c_60():45 -->_1 #SUCC#(#0()) -> c_59():44 28:W:#ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) -->_2 #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)):52 -->_2 #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)):51 -->_1 #SUCC#(#pos(#s(z0))) -> c_62():47 -->_1 #SUCC#(#neg(#s(#s(z0)))) -> c_61():46 -->_1 #SUCC#(#neg(#s(#0()))) -> c_60():45 -->_1 #SUCC#(#0()) -> c_59():44 -->_3 #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)):28 -->_3 #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)):27 29:W:#MULT#(#0(),#0()) -> c_44() 30:W:#MULT#(#0(),#neg(z0)) -> c_45() 31:W:#MULT#(#0(),#pos(z0)) -> c_46() 32:W:#MULT#(#neg(z0),#0()) -> c_47() 33:W:#MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) -->_1 #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)):39 -->_1 #NATMULT#(#0(),z0) -> c_53():38 34:W:#MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) -->_1 #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)):39 -->_1 #NATMULT#(#0(),z0) -> c_53():38 35:W:#MULT#(#pos(z0),#0()) -> c_50() 36:W:#MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) -->_1 #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)):39 -->_1 #NATMULT#(#0(),z0) -> c_53():38 37:W:#MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) -->_1 #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)):39 -->_1 #NATMULT#(#0(),z0) -> c_53():38 38:W:#NATMULT#(#0(),z0) -> c_53() 39:W:#NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) -->_2 #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)):63 -->_2 #natmult#(#0(),z0) -> c_77():62 -->_3 #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)):39 -->_3 #NATMULT#(#0(),z0) -> c_53():38 -->_1 #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)):28 -->_1 #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)):27 40:W:#PRED#(#0()) -> c_55() 41:W:#PRED#(#neg(#s(z0))) -> c_56() 42:W:#PRED#(#pos(#s(#0()))) -> c_57() 43:W:#PRED#(#pos(#s(#s(z0)))) -> c_58() 44:W:#SUCC#(#0()) -> c_59() 45:W:#SUCC#(#neg(#s(#0()))) -> c_60() 46:W:#SUCC#(#neg(#s(#s(z0)))) -> c_61() 47:W:#SUCC#(#pos(#s(z0))) -> c_62() 48:W:#add#(#0(),z0) -> c_63() 49:W:#add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) -->_1 #pred#(#pos(#s(#s(z0)))) -> c_82():67 -->_1 #pred#(#pos(#s(#0()))) -> c_81():66 -->_1 #pred#(#neg(#s(z0))) -> c_80():65 -->_1 #pred#(#0()) -> c_79():64 50:W:#add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) -->_2 #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)):52 -->_2 #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)):51 -->_1 #pred#(#pos(#s(#s(z0)))) -> c_82():67 -->_1 #pred#(#pos(#s(#0()))) -> c_81():66 -->_1 #pred#(#neg(#s(z0))) -> c_80():65 -->_1 #pred#(#0()) -> c_79():64 51:W:#add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) -->_1 #succ#(#pos(#s(z0))) -> c_86():71 -->_1 #succ#(#neg(#s(#s(z0)))) -> c_85():70 -->_1 #succ#(#neg(#s(#0()))) -> c_84():69 -->_1 #succ#(#0()) -> c_83():68 52:W:#add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) -->_1 #succ#(#pos(#s(z0))) -> c_86():71 -->_1 #succ#(#neg(#s(#s(z0)))) -> c_85():70 -->_1 #succ#(#neg(#s(#0()))) -> c_84():69 -->_1 #succ#(#0()) -> c_83():68 -->_2 #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)):52 -->_2 #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)):51 53:W:#mult#(#0(),#0()) -> c_68() 54:W:#mult#(#0(),#neg(z0)) -> c_69() 55:W:#mult#(#0(),#pos(z0)) -> c_70() 56:W:#mult#(#neg(z0),#0()) -> c_71() 57:W:#mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) -->_1 #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)):63 -->_1 #natmult#(#0(),z0) -> c_77():62 58:W:#mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) -->_1 #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)):63 -->_1 #natmult#(#0(),z0) -> c_77():62 59:W:#mult#(#pos(z0),#0()) -> c_74() 60:W:#mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) -->_1 #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)):63 -->_1 #natmult#(#0(),z0) -> c_77():62 61:W:#mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) -->_1 #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)):63 -->_1 #natmult#(#0(),z0) -> c_77():62 62:W:#natmult#(#0(),z0) -> c_77() 63:W:#natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) -->_2 #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)):63 -->_2 #natmult#(#0(),z0) -> c_77():62 -->_1 #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)):52 -->_1 #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)):51 64:W:#pred#(#0()) -> c_79() 65:W:#pred#(#neg(#s(z0))) -> c_80() 66:W:#pred#(#pos(#s(#0()))) -> c_81() 67:W:#pred#(#pos(#s(#s(z0)))) -> c_82() 68:W:#succ#(#0()) -> c_83() 69:W:#succ#(#neg(#s(#0()))) -> c_84() 70:W:#succ#(#neg(#s(#s(z0)))) -> c_85() 71:W:#succ#(#pos(#s(z0))) -> c_86() 72:W:*#(z0,z1) -> c_87(#mult#(z0,z1)) -->_1 #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)):61 -->_1 #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)):60 -->_1 #mult#(#pos(z0),#0()) -> c_74():59 -->_1 #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)):58 -->_1 #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)):57 -->_1 #mult#(#neg(z0),#0()) -> c_71():56 -->_1 #mult#(#0(),#pos(z0)) -> c_70():55 -->_1 #mult#(#0(),#neg(z0)) -> c_69():54 -->_1 #mult#(#0(),#0()) -> c_68():53 73:W:*'#(z0,z1) -> c_1(#MULT#(z0,z1)) -->_1 #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)):37 -->_1 #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)):36 -->_1 #MULT#(#pos(z0),#0()) -> c_50():35 -->_1 #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)):34 -->_1 #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)):33 -->_1 #MULT#(#neg(z0),#0()) -> c_47():32 -->_1 #MULT#(#0(),#pos(z0)) -> c_46():31 -->_1 #MULT#(#0(),#neg(z0)) -> c_45():30 -->_1 #MULT#(#0(),#0()) -> c_44():29 74:W:+#(z0,z1) -> c_88(#add#(z0,z1)) -->_1 #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)):52 -->_1 #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)):51 -->_1 #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)):50 -->_1 #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)):49 -->_1 #add#(#0(),z0) -> c_63():48 75:W:+'#(z0,z1) -> c_2(#ADD#(z0,z1)) -->_1 #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)):28 -->_1 #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)):27 -->_1 #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)):26 -->_1 #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)):25 -->_1 #ADD#(#0(),z0) -> c_39():24 76:W:APPENDREVERSE#1#(nil(),z0) -> c_5() 77:W:BFTMULT'#3#(nil(),z0,z1) -> c_11() 78:W:COMPUTELINE#1#(nil(),z0,z1) -> c_17() 79:W:COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() 80:W:DEQUEUE#1#(::(z0,z1),z2) -> c_21() 81:W:DEQUEUE#2#(::(z0,z1)) -> c_23() 82:W:DEQUEUE#2#(nil()) -> c_24() 83:W:ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) -->_1 ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26():84 84:W:ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() 85:W:LINEMULT#1#(nil(),z0,z1) -> c_29() 86:W:LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) -->_1 +'#(z0,z1) -> c_2(#ADD#(z0,z1)):75 -->_3 *'#(z0,z1) -> c_1(#MULT#(z0,z1)):73 -->_2 *#(z0,z1) -> c_87(#mult#(z0,z1)):72 87:W:LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) -->_1 *'#(z0,z1) -> c_1(#MULT#(z0,z1)):73 88:W:MATRIXMULT#1#(nil(),z0) -> c_37() 89:W:appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) -->_1 appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))):90 -->_1 appendreverse#1#(nil(),z0) -> c_91():91 90:W:appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) -->_1 appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)):89 91:W:appendreverse#1#(nil(),z0) -> c_91() 92:W:bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) -->_1 bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)):93 93:W:bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) -->_2 bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)):95 -->_1 bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)):94 94:W:bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) -->_1 bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)):96 -->_1 bftMult'#3#(nil(),z0,z1) -> c_97():97 95:W:bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) -->_1 dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)):106 96:W:bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) -->_1 bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)):99 -->_1 bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)):98 97:W:bftMult'#3#(nil(),z0,z1) -> c_97() 98:W:bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) -->_1 bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)):93 99:W:bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) -->_3 enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)):111 -->_2 enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)):111 -->_1 bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)):100 100:W:bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) -->_2 matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)):118 -->_1 bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)):93 101:W:computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) -->_1 computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)):102 -->_1 computeLine#1#(nil(),z0,z1) -> c_103():103 102:W:computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) -->_1 computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2)):104 -->_1 computeLine#2#(nil(),z0,z1,z2) -> c_105():105 103:W:computeLine#1#(nil(),z0,z1) -> c_103() 104:W:computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2)) -->_2 lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)):113 -->_1 computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)):101 105:W:computeLine#2#(nil(),z0,z1,z2) -> c_105() 106:W:dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) -->_1 dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)):108 -->_1 dequeue#1#(::(z0,z1),z2) -> c_107():107 107:W:dequeue#1#(::(z0,z1),z2) -> c_107() 108:W:dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) -->_2 reverse#(z0) -> c_121(appendreverse#(z0,nil())):121 -->_1 dequeue#2#(nil()) -> c_110():110 -->_1 dequeue#2#(::(z0,z1)) -> c_109():109 109:W:dequeue#2#(::(z0,z1)) -> c_109() 110:W:dequeue#2#(nil()) -> c_110() 111:W:enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) -->_1 enqueue#1#(tuple#2(z0,z1),z2) -> c_112():112 112:W:enqueue#1#(tuple#2(z0,z1),z2) -> c_112() 113:W:lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) -->_1 lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)):114 -->_1 lineMult#1#(nil(),z0,z1) -> c_115():115 114:W:lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) -->_1 lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())):117 -->_1 lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)):116 115:W:lineMult#1#(nil(),z0,z1) -> c_115() 116:W:lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) -->_3 lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)):113 -->_1 +#(z0,z1) -> c_88(#add#(z0,z1)):74 -->_2 *#(z0,z1) -> c_87(#mult#(z0,z1)):72 117:W:lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) -->_2 lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)):113 -->_1 *#(z0,z1) -> c_87(#mult#(z0,z1)):72 118:W:matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) -->_1 matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)):119 -->_1 matrixMult#1#(nil(),z0) -> c_120():120 119:W:matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) -->_2 matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)):118 -->_1 computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)):101 120:W:matrixMult#1#(nil(),z0) -> c_120() 121:W:reverse#(z0) -> c_121(appendreverse#(z0,nil())) -->_1 appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)):89 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 92: bftMult#(z0,z1) -> c_92(bftMult'#(tuple#2(::(z0,nil()),nil()),z1)) 93: bftMult'#(z0,z1) -> c_93(bftMult'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0)) 100: bftMult'#5#(z0,z1,z2) -> c_100(bftMult'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2)) 99: bftMult'#4#(node(z0,z1,z2),z3,z4) -> c_99(bftMult'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4)) 96: bftMult'#3#(::(z0,z1),z2,z3) -> c_96(bftMult'#4#(z0,z2,z3)) 94: bftMult'#1#(tuple#2(z0,z1),z2) -> c_94(bftMult'#3#(z0,z2,z1)) 98: bftMult'#4#(leaf(),z0,z1) -> c_98(bftMult'#(z1,z0)) 97: bftMult'#3#(nil(),z0,z1) -> c_97() 77: BFTMULT'#3#(nil(),z0,z1) -> c_11() 88: MATRIXMULT#1#(nil(),z0) -> c_37() 78: COMPUTELINE#1#(nil(),z0,z1) -> c_17() 79: COMPUTELINE#2#(nil(),z0,z1,z2) -> c_19() 85: LINEMULT#1#(nil(),z0,z1) -> c_29() 86: LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_30(+'#(*(z3,z2),z0),*#(z3,z2),*'#(z3,z2)) 75: +'#(z0,z1) -> c_2(#ADD#(z0,z1)) 24: #ADD#(#0(),z0) -> c_39() 25: #ADD#(#neg(#s(#0())),z0) -> c_40(#PRED#(z0)) 26: #ADD#(#neg(#s(#s(z0))),z1) -> c_41(#PRED#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) 40: #PRED#(#0()) -> c_55() 41: #PRED#(#neg(#s(z0))) -> c_56() 42: #PRED#(#pos(#s(#0()))) -> c_57() 43: #PRED#(#pos(#s(#s(z0)))) -> c_58() 87: LINEMULT#2#(nil(),z0,z1,z2) -> c_32(*'#(z1,z0)) 73: *'#(z0,z1) -> c_1(#MULT#(z0,z1)) 29: #MULT#(#0(),#0()) -> c_44() 30: #MULT#(#0(),#neg(z0)) -> c_45() 31: #MULT#(#0(),#pos(z0)) -> c_46() 32: #MULT#(#neg(z0),#0()) -> c_47() 33: #MULT#(#neg(z0),#neg(z1)) -> c_48(#NATMULT#(z0,z1)) 34: #MULT#(#neg(z0),#pos(z1)) -> c_49(#NATMULT#(z0,z1)) 35: #MULT#(#pos(z0),#0()) -> c_50() 36: #MULT#(#pos(z0),#neg(z1)) -> c_51(#NATMULT#(z0,z1)) 37: #MULT#(#pos(z0),#pos(z1)) -> c_52(#NATMULT#(z0,z1)) 39: #NATMULT#(#s(z0),z1) -> c_54(#ADD#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1),#NATMULT#(z0,z1)) 28: #ADD#(#pos(#s(#s(z0))),z1) -> c_43(#SUCC#(#add(#pos(#s(z0)),z1)) ,#add#(#pos(#s(z0)),z1) ,#ADD#(#pos(#s(z0)),z1)) 27: #ADD#(#pos(#s(#0())),z0) -> c_42(#SUCC#(z0)) 44: #SUCC#(#0()) -> c_59() 45: #SUCC#(#neg(#s(#0()))) -> c_60() 46: #SUCC#(#neg(#s(#s(z0)))) -> c_61() 47: #SUCC#(#pos(#s(z0))) -> c_62() 38: #NATMULT#(#0(),z0) -> c_53() 118: matrixMult#(z0,z1) -> c_118(matrixMult#1#(z0,z1)) 119: matrixMult#1#(::(z0,z1),z2) -> c_119(computeLine#(z0,z2,nil()),matrixMult#(z1,z2)) 120: matrixMult#1#(nil(),z0) -> c_120() 101: computeLine#(z0,z1,z2) -> c_101(computeLine#1#(z0,z2,z1)) 104: computeLine#2#(::(z0,z1),z2,z3,z4) -> c_104(computeLine#(z4,z1,lineMult(z3,z0,z2)),lineMult#(z3,z0,z2)) 102: computeLine#1#(::(z0,z1),z2,z3) -> c_102(computeLine#2#(z3,z2,z0,z1)) 103: computeLine#1#(nil(),z0,z1) -> c_103() 105: computeLine#2#(nil(),z0,z1,z2) -> c_105() 113: lineMult#(z0,z1,z2) -> c_113(lineMult#1#(z1,z2,z0)) 117: lineMult#2#(nil(),z0,z1,z2) -> c_117(*#(z1,z0),lineMult#(z0,z2,nil())) 114: lineMult#1#(::(z0,z1),z2,z3) -> c_114(lineMult#2#(z2,z3,z0,z1)) 116: lineMult#2#(::(z0,z1),z2,z3,z4) -> c_116(+#(*(z3,z2),z0),*#(z3,z2),lineMult#(z2,z4,z1)) 115: lineMult#1#(nil(),z0,z1) -> c_115() 74: +#(z0,z1) -> c_88(#add#(z0,z1)) 48: #add#(#0(),z0) -> c_63() 49: #add#(#neg(#s(#0())),z0) -> c_64(#pred#(z0)) 50: #add#(#neg(#s(#s(z0))),z1) -> c_65(#pred#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) 64: #pred#(#0()) -> c_79() 65: #pred#(#neg(#s(z0))) -> c_80() 66: #pred#(#pos(#s(#0()))) -> c_81() 67: #pred#(#pos(#s(#s(z0)))) -> c_82() 72: *#(z0,z1) -> c_87(#mult#(z0,z1)) 53: #mult#(#0(),#0()) -> c_68() 54: #mult#(#0(),#neg(z0)) -> c_69() 55: #mult#(#0(),#pos(z0)) -> c_70() 56: #mult#(#neg(z0),#0()) -> c_71() 57: #mult#(#neg(z0),#neg(z1)) -> c_72(#natmult#(z0,z1)) 58: #mult#(#neg(z0),#pos(z1)) -> c_73(#natmult#(z0,z1)) 59: #mult#(#pos(z0),#0()) -> c_74() 60: #mult#(#pos(z0),#neg(z1)) -> c_75(#natmult#(z0,z1)) 61: #mult#(#pos(z0),#pos(z1)) -> c_76(#natmult#(z0,z1)) 63: #natmult#(#s(z0),z1) -> c_78(#add#(#pos(z1),#natmult(z0,z1)),#natmult#(z0,z1)) 52: #add#(#pos(#s(#s(z0))),z1) -> c_67(#succ#(#add(#pos(#s(z0)),z1)),#add#(#pos(#s(z0)),z1)) 51: #add#(#pos(#s(#0())),z0) -> c_66(#succ#(z0)) 68: #succ#(#0()) -> c_83() 69: #succ#(#neg(#s(#0()))) -> c_84() 70: #succ#(#neg(#s(#s(z0)))) -> c_85() 71: #succ#(#pos(#s(z0))) -> c_86() 62: #natmult#(#0(),z0) -> c_77() 83: ENQUEUE#(z0,z1) -> c_25(ENQUEUE#1#(z1,z0)) 84: ENQUEUE#1#(tuple#2(z0,z1),z2) -> c_26() 111: enqueue#(z0,z1) -> c_111(enqueue#1#(z1,z0)) 112: enqueue#1#(tuple#2(z0,z1),z2) -> c_112() 80: DEQUEUE#1#(::(z0,z1),z2) -> c_21() 81: DEQUEUE#2#(::(z0,z1)) -> c_23() 82: DEQUEUE#2#(nil()) -> c_24() 95: bftMult'#2#(tuple#2(z0,z1)) -> c_95(dequeue#(z0,z1)) 106: dequeue#(z0,z1) -> c_106(dequeue#1#(z0,z1)) 107: dequeue#1#(::(z0,z1),z2) -> c_107() 108: dequeue#1#(nil(),z0) -> c_108(dequeue#2#(reverse(z0)),reverse#(z0)) 109: dequeue#2#(::(z0,z1)) -> c_109() 110: dequeue#2#(nil()) -> c_110() 121: reverse#(z0) -> c_121(appendreverse#(z0,nil())) 89: appendreverse#(z0,z1) -> c_89(appendreverse#1#(z0,z1)) 90: appendreverse#1#(::(z0,z1),z2) -> c_90(appendreverse#(z1,::(z0,z2))) 91: appendreverse#1#(nil(),z0) -> c_91() 76: APPENDREVERSE#1#(nil(),z0) -> c_5() * Step 6: SimplifyRHS. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #ADD(#0(),z0) -> c() #ADD(#neg(#s(#0())),z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))),z1) -> c2(#PRED(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #ADD(#pos(#s(#0())),z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))),z1) -> c4(#SUCC(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #MULT(#0(),#0()) -> c5() #MULT(#0(),#neg(z0)) -> c6() #MULT(#0(),#pos(z0)) -> c7() #MULT(#neg(z0),#0()) -> c8() #MULT(#neg(z0),#neg(z1)) -> c9(#NATMULT(z0,z1)) #MULT(#neg(z0),#pos(z1)) -> c10(#NATMULT(z0,z1)) #MULT(#pos(z0),#0()) -> c11() #MULT(#pos(z0),#neg(z1)) -> c12(#NATMULT(z0,z1)) #MULT(#pos(z0),#pos(z1)) -> c13(#NATMULT(z0,z1)) #NATMULT(#0(),z0) -> c14() #NATMULT(#s(z0),z1) -> c15(#ADD(#pos(z1),#natmult(z0,z1)),#NATMULT(z0,z1)) #PRED(#0()) -> c16() #PRED(#neg(#s(z0))) -> c17() #PRED(#pos(#s(#0()))) -> c18() #PRED(#pos(#s(#s(z0)))) -> c19() #SUCC(#0()) -> c20() #SUCC(#neg(#s(#0()))) -> c21() #SUCC(#neg(#s(#s(z0)))) -> c22() #SUCC(#pos(#s(z0))) -> c23() #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) *'(z0,z1) -> c24(#MULT(z0,z1)) +(z0,z1) -> #add(z0,z1) +'(z0,z1) -> c25(#ADD(z0,z1)) APPENDREVERSE(z0,z1) -> c26(APPENDREVERSE#1(z0,z1)) APPENDREVERSE#1(::(z0,z1),z2) -> c27(APPENDREVERSE(z1,::(z0,z2))) APPENDREVERSE#1(nil(),z0) -> c28() BFTMULT(z0,z1) -> c29(BFTMULT'(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'(z0,z1) -> c30(BFTMULT'#1(bftMult'#2(z0),z1),BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0,z1),z2) -> c31(BFTMULT'#3(z0,z2,z1)) BFTMULT'#2(tuple#2(z0,z1)) -> c32(DEQUEUE(z0,z1)) BFTMULT'#3(::(z0,z1),z2,z3) -> c33(BFTMULT'#4(z0,z2,z3)) BFTMULT'#3(nil(),z0,z1) -> c34() BFTMULT'#4(leaf(),z0,z1) -> c35(BFTMULT'(z1,z0)) BFTMULT'#4(node(z0,z1,z2),z3,z4) -> c36(BFTMULT'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) ,ENQUEUE(z2,enqueue(z1,z4)) ,ENQUEUE(z1,z4)) BFTMULT'#5(z0,z1,z2) -> c37(BFTMULT'(z0,matrixMult(z1,z2)),MATRIXMULT(z1,z2)) COMPUTELINE(z0,z1,z2) -> c38(COMPUTELINE#1(z0,z2,z1)) COMPUTELINE#1(::(z0,z1),z2,z3) -> c39(COMPUTELINE#2(z3,z2,z0,z1)) COMPUTELINE#1(nil(),z0,z1) -> c40() COMPUTELINE#2(::(z0,z1),z2,z3,z4) -> c41(COMPUTELINE(z4,z1,lineMult(z3,z0,z2)),LINEMULT(z3,z0,z2)) COMPUTELINE#2(nil(),z0,z1,z2) -> c42() DEQUEUE(z0,z1) -> c43(DEQUEUE#1(z0,z1)) DEQUEUE#1(::(z0,z1),z2) -> c44() DEQUEUE#1(nil(),z0) -> c45(DEQUEUE#2(reverse(z0)),REVERSE(z0)) DEQUEUE#2(::(z0,z1)) -> c46() DEQUEUE#2(nil()) -> c47() ENQUEUE(z0,z1) -> c48(ENQUEUE#1(z1,z0)) ENQUEUE#1(tuple#2(z0,z1),z2) -> c49() LINEMULT(z0,z1,z2) -> c50(LINEMULT#1(z1,z2,z0)) LINEMULT#1(::(z0,z1),z2,z3) -> c51(LINEMULT#2(z2,z3,z0,z1)) LINEMULT#1(nil(),z0,z1) -> c52() LINEMULT#2(::(z0,z1),z2,z3,z4) -> c53(+'(*(z3,z2),z0),*'(z3,z2)) LINEMULT#2(::(z0,z1),z2,z3,z4) -> c54(LINEMULT(z2,z4,z1)) LINEMULT#2(nil(),z0,z1,z2) -> c55(*'(z1,z0)) LINEMULT#2(nil(),z0,z1,z2) -> c56(LINEMULT(z0,z2,nil())) MATRIXMULT(z0,z1) -> c57(MATRIXMULT#1(z0,z1)) MATRIXMULT#1(::(z0,z1),z2) -> c58(COMPUTELINE(z0,z2,nil())) MATRIXMULT#1(::(z0,z1),z2) -> c59(MATRIXMULT(z1,z2)) MATRIXMULT#1(nil(),z0) -> c60() REVERSE(z0) -> c61(APPENDREVERSE(z0,nil())) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult(z0,z1) -> bftMult'(tuple#2(::(z0,nil()),nil()),z1) bftMult'(z0,z1) -> bftMult'#1(bftMult'#2(z0),z1) bftMult'#1(tuple#2(z0,z1),z2) -> bftMult'#3(z0,z2,z1) bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) bftMult'#3(::(z0,z1),z2,z3) -> bftMult'#4(z0,z2,z3) bftMult'#3(nil(),z0,z1) -> z0 bftMult'#4(leaf(),z0,z1) -> bftMult'(z1,z0) bftMult'#4(node(z0,z1,z2),z3,z4) -> bftMult'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) bftMult'#5(z0,z1,z2) -> bftMult'(z0,matrixMult(z1,z2)) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/3,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/6,c_14/3,c_15/1 ,c_16/1,c_17/0,c_18/3,c_19/0,c_20/1,c_21/0,c_22/3,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) -->_1 APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))):2 2:S:APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 3:S:BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)):4 4:S:BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)) -->_3 BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)):6 -->_1 BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)):5 5:S:BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) -->_1 BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)):7 6:S:BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) -->_1 DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)):14 7:S:BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) -->_1 BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)):9 -->_1 BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)):8 8:S:BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)):4 9:S:BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) ,enqueue#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z2,enqueue(z1,z4)) ,enqueue#(z1,z4) ,ENQUEUE#(z1,z4)) -->_1 BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)) ,matrixMult#(z1,z2) ,MATRIXMULT#(z1,z2)):10 10:S:BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),matrixMult#(z1,z2),MATRIXMULT#(z1,z2)) -->_3 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):20 -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),bftMult'#2#(z0),BFTMULT'#2#(z0)):4 11:S:COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) -->_1 COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)):12 12:S:COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) -->_1 COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)):13 13:S:COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,lineMult#(z3,z0,z2) ,LINEMULT#(z3,z0,z2)) -->_3 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):11 14:S:DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) -->_1 DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)):15 15:S:DEQUEUE#1#(nil(),z0) -> c_22(DEQUEUE#2#(reverse(z0)),reverse#(z0),REVERSE#(z0)) -->_3 REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())):23 16:S:LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) -->_1 LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)):17 17:S:LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) -->_1 LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())):19 -->_1 LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)):18 18:S:LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 19:S:LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 20:S:MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)):22 -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())):21 21:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):11 22:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) -->_1 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):20 23:S:REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) * Step 7: UsableRules. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #ADD(#0(),z0) -> c() #ADD(#neg(#s(#0())),z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))),z1) -> c2(#PRED(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #ADD(#pos(#s(#0())),z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))),z1) -> c4(#SUCC(#add(#pos(#s(z0)),z1)),#ADD(#pos(#s(z0)),z1)) #MULT(#0(),#0()) -> c5() #MULT(#0(),#neg(z0)) -> c6() #MULT(#0(),#pos(z0)) -> c7() #MULT(#neg(z0),#0()) -> c8() #MULT(#neg(z0),#neg(z1)) -> c9(#NATMULT(z0,z1)) #MULT(#neg(z0),#pos(z1)) -> c10(#NATMULT(z0,z1)) #MULT(#pos(z0),#0()) -> c11() #MULT(#pos(z0),#neg(z1)) -> c12(#NATMULT(z0,z1)) #MULT(#pos(z0),#pos(z1)) -> c13(#NATMULT(z0,z1)) #NATMULT(#0(),z0) -> c14() #NATMULT(#s(z0),z1) -> c15(#ADD(#pos(z1),#natmult(z0,z1)),#NATMULT(z0,z1)) #PRED(#0()) -> c16() #PRED(#neg(#s(z0))) -> c17() #PRED(#pos(#s(#0()))) -> c18() #PRED(#pos(#s(#s(z0)))) -> c19() #SUCC(#0()) -> c20() #SUCC(#neg(#s(#0()))) -> c21() #SUCC(#neg(#s(#s(z0)))) -> c22() #SUCC(#pos(#s(z0))) -> c23() #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) *'(z0,z1) -> c24(#MULT(z0,z1)) +(z0,z1) -> #add(z0,z1) +'(z0,z1) -> c25(#ADD(z0,z1)) APPENDREVERSE(z0,z1) -> c26(APPENDREVERSE#1(z0,z1)) APPENDREVERSE#1(::(z0,z1),z2) -> c27(APPENDREVERSE(z1,::(z0,z2))) APPENDREVERSE#1(nil(),z0) -> c28() BFTMULT(z0,z1) -> c29(BFTMULT'(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'(z0,z1) -> c30(BFTMULT'#1(bftMult'#2(z0),z1),BFTMULT'#2(z0)) BFTMULT'#1(tuple#2(z0,z1),z2) -> c31(BFTMULT'#3(z0,z2,z1)) BFTMULT'#2(tuple#2(z0,z1)) -> c32(DEQUEUE(z0,z1)) BFTMULT'#3(::(z0,z1),z2,z3) -> c33(BFTMULT'#4(z0,z2,z3)) BFTMULT'#3(nil(),z0,z1) -> c34() BFTMULT'#4(leaf(),z0,z1) -> c35(BFTMULT'(z1,z0)) BFTMULT'#4(node(z0,z1,z2),z3,z4) -> c36(BFTMULT'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) ,ENQUEUE(z2,enqueue(z1,z4)) ,ENQUEUE(z1,z4)) BFTMULT'#5(z0,z1,z2) -> c37(BFTMULT'(z0,matrixMult(z1,z2)),MATRIXMULT(z1,z2)) COMPUTELINE(z0,z1,z2) -> c38(COMPUTELINE#1(z0,z2,z1)) COMPUTELINE#1(::(z0,z1),z2,z3) -> c39(COMPUTELINE#2(z3,z2,z0,z1)) COMPUTELINE#1(nil(),z0,z1) -> c40() COMPUTELINE#2(::(z0,z1),z2,z3,z4) -> c41(COMPUTELINE(z4,z1,lineMult(z3,z0,z2)),LINEMULT(z3,z0,z2)) COMPUTELINE#2(nil(),z0,z1,z2) -> c42() DEQUEUE(z0,z1) -> c43(DEQUEUE#1(z0,z1)) DEQUEUE#1(::(z0,z1),z2) -> c44() DEQUEUE#1(nil(),z0) -> c45(DEQUEUE#2(reverse(z0)),REVERSE(z0)) DEQUEUE#2(::(z0,z1)) -> c46() DEQUEUE#2(nil()) -> c47() ENQUEUE(z0,z1) -> c48(ENQUEUE#1(z1,z0)) ENQUEUE#1(tuple#2(z0,z1),z2) -> c49() LINEMULT(z0,z1,z2) -> c50(LINEMULT#1(z1,z2,z0)) LINEMULT#1(::(z0,z1),z2,z3) -> c51(LINEMULT#2(z2,z3,z0,z1)) LINEMULT#1(nil(),z0,z1) -> c52() LINEMULT#2(::(z0,z1),z2,z3,z4) -> c53(+'(*(z3,z2),z0),*'(z3,z2)) LINEMULT#2(::(z0,z1),z2,z3,z4) -> c54(LINEMULT(z2,z4,z1)) LINEMULT#2(nil(),z0,z1,z2) -> c55(*'(z1,z0)) LINEMULT#2(nil(),z0,z1,z2) -> c56(LINEMULT(z0,z2,nil())) MATRIXMULT(z0,z1) -> c57(MATRIXMULT#1(z0,z1)) MATRIXMULT#1(::(z0,z1),z2) -> c58(COMPUTELINE(z0,z2,nil())) MATRIXMULT#1(::(z0,z1),z2) -> c59(MATRIXMULT(z1,z2)) MATRIXMULT#1(nil(),z0) -> c60() REVERSE(z0) -> c61(APPENDREVERSE(z0,nil())) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult(z0,z1) -> bftMult'(tuple#2(::(z0,nil()),nil()),z1) bftMult'(z0,z1) -> bftMult'#1(bftMult'#2(z0),z1) bftMult'#1(tuple#2(z0,z1),z2) -> bftMult'#3(z0,z2,z1) bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) bftMult'#3(::(z0,z1),z2,z3) -> bftMult'#4(z0,z2,z3) bftMult'#3(nil(),z0,z1) -> z0 bftMult'#4(leaf(),z0,z1) -> bftMult'(z1,z0) bftMult'#4(node(z0,z1,z2),z3,z4) -> bftMult'#5(enqueue(z2,enqueue(z1,z4)),z3,z0) bftMult'#5(z0,z1,z2) -> bftMult'(z0,matrixMult(z1,z2)) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) * Step 8: RemoveHeads. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) -->_1 APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))):2 2:S:APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 3:S:BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)):4 4:S:BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) -->_2 BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)):6 -->_1 BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)):5 5:S:BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) -->_1 BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)):7 6:S:BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) -->_1 DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)):14 7:S:BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) -->_1 BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)):9 -->_1 BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)):8 8:S:BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)):4 9:S:BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) -->_1 BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)):10 10:S:BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) -->_2 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):20 -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)):4 11:S:COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) -->_1 COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)):12 12:S:COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) -->_1 COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,LINEMULT#(z3,z0,z2)):13 13:S:COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) -->_2 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):11 14:S:DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) -->_1 DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)):15 15:S:DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) -->_1 REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())):23 16:S:LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) -->_1 LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)):17 17:S:LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) -->_1 LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())):19 -->_1 LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)):18 18:S:LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 19:S:LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):16 20:S:MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)):22 -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())):21 21:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):11 22:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) -->_1 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):20 23:S:REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(3,BFTMULT#(z0,z1) -> c_6(BFTMULT'#(tuple#2(::(z0,nil()),nil()),z1)))] * Step 9: DecomposeDG. WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) and a lower component APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) Further, following extension rules are added to the lower component. BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) ** Step 9.a:1: SimplifyRHS. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)) -->_1 BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)):2 2:S:BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) -->_1 BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)):3 3:S:BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) -->_1 BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)):5 -->_1 BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)):4 4:S:BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)):1 5:S:BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) -->_1 BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)):6 6:S:BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2)),MATRIXMULT#(z1,z2)) -->_1 BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1),BFTMULT'#2#(z0)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2))) ** Step 9.a:2: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2))) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [2] x1 + [1] x2 + [1] p(#MULT) = [2] p(#NATMULT) = [1] x1 + [1] x2 + [0] p(#PRED) = [1] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [0] p(+) = [1] x1 + [1] x2 + [0] p(+') = [0] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [2] p(appendreverse#1) = [1] x1 + [1] x2 + [2] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [7] p(bftMult'#3) = [0] p(bftMult'#4) = [2] x1 + [2] x2 + [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [2] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [7] p(dequeue#1) = [1] x1 + [1] x2 + [7] p(dequeue#2) = [1] x1 + [2] p(enqueue) = [1] x1 + [1] x2 + [7] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [0] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [7] p(reverse) = [1] x1 + [4] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [2] x1 + [0] p(*'#) = [0] p(+#) = [0] p(+'#) = [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [4] x2 + [0] p(BFTMULT'#) = [1] x1 + [1] x2 + [1] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [3] p(BFTMULT'#2#) = [1] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [3] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [2] p(BFTMULT'#5#) = [1] x1 + [1] x2 + [0] p(COMPUTELINE#) = [0] p(COMPUTELINE#1#) = [0] p(COMPUTELINE#2#) = [0] p(DEQUEUE#) = [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [0] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [0] p(appendreverse#) = [2] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(lineMult#2#) = [0] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [1] x1 + [1] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [1] p(c_30) = [2] x1 + [1] x2 + [2] x3 + [2] p(c_31) = [2] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [2] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [0] p(c_78) = [0] p(c_79) = [0] p(c_80) = [0] p(c_81) = [0] p(c_82) = [0] p(c_83) = [0] p(c_84) = [0] p(c_85) = [0] p(c_86) = [0] p(c_87) = [0] p(c_88) = [0] p(c_89) = [0] p(c_90) = [0] p(c_91) = [0] p(c_92) = [0] p(c_93) = [0] p(c_94) = [0] p(c_95) = [0] p(c_96) = [0] p(c_97) = [0] p(c_98) = [0] p(c_99) = [0] p(c_100) = [0] p(c_101) = [0] p(c_102) = [0] p(c_103) = [0] p(c_104) = [0] p(c_105) = [0] p(c_106) = [0] p(c_107) = [0] p(c_108) = [0] p(c_109) = [0] p(c_110) = [0] p(c_111) = [2] x1 + [2] p(c_112) = [0] p(c_113) = [2] p(c_114) = [2] x1 + [1] p(c_115) = [0] p(c_116) = [2] p(c_117) = [1] x1 + [2] x2 + [0] p(c_118) = [1] p(c_119) = [4] x1 + [2] x2 + [1] p(c_120) = [0] p(c_121) = [0] Following rules are strictly oriented: BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [3] > [1] z0 + [1] z2 + [1] z3 + [2] = c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [2] > [1] z0 + [1] z1 + [1] = c_12(BFTMULT'#(z1,z0)) Following rules are (at-least) weakly oriented: BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [11] = c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [3] >= [1] z0 + [1] z1 + [1] z2 + [3] = c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z1 + [1] z2 + [1] z3 + [1] z4 + [9] >= [1] z1 + [1] z2 + [1] z3 + [1] z4 + [14] = c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] = c_14(BFTMULT'#(z0,matrixMult(z1,z2))) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [2] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [2] >= [1] z0 + [1] z1 + [1] z2 + [2] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [2] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [7] >= [1] z0 + [1] z1 + [7] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [7] >= [1] z0 + [1] z1 + [7] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [7] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [7] >= [1] z0 + [6] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [2] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [7] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [0] >= [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [0] >= [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [4] >= [1] z0 + [2] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 9.a:3: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2))) - Weak DPs: BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [1] x1 + [1] p(#MULT) = [1] x1 + [2] p(#NATMULT) = [1] x1 + [1] p(#PRED) = [0] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [0] p(+) = [1] x1 + [1] x2 + [0] p(+') = [0] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [7] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [7] p(dequeue#1) = [1] x1 + [1] x2 + [7] p(dequeue#2) = [1] x1 + [1] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [7] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [4] p(reverse) = [1] x1 + [6] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [0] p(+#) = [0] p(+'#) = [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [2] x1 + [0] p(BFTMULT#) = [0] p(BFTMULT'#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#2#) = [0] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#5#) = [1] x1 + [0] p(COMPUTELINE#) = [0] p(COMPUTELINE#1#) = [0] p(COMPUTELINE#2#) = [2] x2 + [0] p(DEQUEUE#) = [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [0] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(lineMult#2#) = [0] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [0] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [1] x3 + [0] p(c_42) = [1] x1 + [1] p(c_43) = [4] x1 + [4] x3 + [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [1] p(c_47) = [0] p(c_48) = [2] x1 + [1] p(c_49) = [1] x1 + [1] p(c_50) = [4] p(c_51) = [1] x1 + [4] p(c_52) = [0] p(c_53) = [1] p(c_54) = [1] p(c_55) = [0] p(c_56) = [0] p(c_57) = [1] p(c_58) = [4] p(c_59) = [4] p(c_60) = [2] p(c_61) = [0] p(c_62) = [0] p(c_63) = [4] p(c_64) = [1] x1 + [1] p(c_65) = [1] x1 + [1] p(c_66) = [0] p(c_67) = [4] p(c_68) = [1] p(c_69) = [0] p(c_70) = [4] p(c_71) = [2] p(c_72) = [1] x1 + [1] p(c_73) = [2] x1 + [1] p(c_74) = [0] p(c_75) = [1] x1 + [0] p(c_76) = [1] x1 + [2] p(c_77) = [1] p(c_78) = [4] p(c_79) = [1] p(c_80) = [0] p(c_81) = [2] p(c_82) = [2] p(c_83) = [2] p(c_84) = [4] p(c_85) = [0] p(c_86) = [0] p(c_87) = [4] p(c_88) = [2] x1 + [0] p(c_89) = [4] p(c_90) = [1] p(c_91) = [0] p(c_92) = [0] p(c_93) = [1] x1 + [4] p(c_94) = [2] x1 + [0] p(c_95) = [1] p(c_96) = [1] x1 + [1] p(c_97) = [1] p(c_98) = [2] x1 + [4] p(c_99) = [4] x1 + [1] x3 + [4] p(c_100) = [1] x1 + [1] p(c_101) = [0] p(c_102) = [1] x1 + [1] p(c_103) = [4] p(c_104) = [1] x2 + [1] p(c_105) = [4] p(c_106) = [2] p(c_107) = [1] p(c_108) = [4] x1 + [0] p(c_109) = [1] p(c_110) = [0] p(c_111) = [1] p(c_112) = [4] p(c_113) = [1] x1 + [4] p(c_114) = [1] x1 + [2] p(c_115) = [0] p(c_116) = [4] x2 + [2] x3 + [2] p(c_117) = [0] p(c_118) = [1] p(c_119) = [1] x1 + [1] p(c_120) = [1] p(c_121) = [4] x1 + [0] Following rules are strictly oriented: BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [1] z4 + [4] > [1] z1 + [1] z2 + [1] z4 + [0] = c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) Following rules are (at-least) weakly oriented: BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [7] = c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [0] >= [1] z0 + [1] z2 + [1] z3 + [0] = c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [7] >= [1] z0 + [1] z1 + [0] = c_12(BFTMULT'#(z1,z0)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [0] >= [1] z0 + [0] = c_14(BFTMULT'#(z0,matrixMult(z1,z2))) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [7] >= [1] z0 + [1] z1 + [7] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [7] >= [1] z0 + [1] z1 + [7] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [7] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [7] >= [1] z0 + [7] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [1] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [0] >= [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [0] >= [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [6] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 9.a:4: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2))) - Weak DPs: BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [4] x1 + [2] x2 + [0] p(#MULT) = [4] x2 + [1] p(#NATMULT) = [2] x2 + [0] p(#PRED) = [1] x1 + [1] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [2] x1 + [1] p(+) = [1] x1 + [1] x2 + [0] p(+') = [4] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [1] x1 + [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [3] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [2] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [7] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [1] p(matrixMult#1) = [1] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [4] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [0] p(+#) = [0] p(+'#) = [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [0] p(BFTMULT'#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [1] p(BFTMULT'#2#) = [0] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#5#) = [1] x1 + [1] x2 + [3] p(COMPUTELINE#) = [0] p(COMPUTELINE#1#) = [0] p(COMPUTELINE#2#) = [0] p(DEQUEUE#) = [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [0] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(lineMult#2#) = [1] x1 + [2] x2 + [1] x3 + [1] x4 + [2] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [2] x1 + [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [0] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [0] p(c_13) = [1] x1 + [1] p(c_14) = [1] x1 + [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [0] p(c_78) = [0] p(c_79) = [0] p(c_80) = [0] p(c_81) = [0] p(c_82) = [0] p(c_83) = [0] p(c_84) = [0] p(c_85) = [0] p(c_86) = [0] p(c_87) = [0] p(c_88) = [0] p(c_89) = [0] p(c_90) = [0] p(c_91) = [0] p(c_92) = [0] p(c_93) = [0] p(c_94) = [0] p(c_95) = [0] p(c_96) = [0] p(c_97) = [0] p(c_98) = [0] p(c_99) = [0] p(c_100) = [2] x2 + [2] p(c_101) = [4] x1 + [1] p(c_102) = [2] p(c_103) = [1] p(c_104) = [1] x1 + [4] x2 + [0] p(c_105) = [0] p(c_106) = [4] p(c_107) = [1] p(c_108) = [2] x1 + [1] x2 + [2] p(c_109) = [1] p(c_110) = [0] p(c_111) = [0] p(c_112) = [1] p(c_113) = [2] x1 + [0] p(c_114) = [2] x1 + [0] p(c_115) = [4] p(c_116) = [4] x1 + [1] p(c_117) = [2] x2 + [0] p(c_118) = [1] x1 + [1] p(c_119) = [2] x1 + [1] p(c_120) = [0] p(c_121) = [1] x1 + [0] Following rules are strictly oriented: BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] > [1] z0 + [1] z1 + [1] z2 + [0] = c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z1 + [3] > [1] z0 + [1] = c_14(BFTMULT'#(z0,matrixMult(z1,z2))) Following rules are (at-least) weakly oriented: BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [4] = c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [0] >= [1] z0 + [1] z2 + [1] z3 + [0] = c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [7] >= [1] z0 + [1] z1 + [0] = c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [1] z4 + [4] >= [1] z1 + [1] z2 + [1] z3 + [1] z4 + [4] = c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [3] >= [1] z0 + [1] z1 + [2] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [1] >= [1] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [1] >= [1] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [1] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 9.a:5: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) - Weak DPs: BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2))) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(c_7) = {1}, uargs(c_8) = {1}, uargs(c_10) = {1}, uargs(c_12) = {1}, uargs(c_13) = {1}, uargs(c_14) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [4] p(#MULT) = [0] p(#NATMULT) = [2] p(#PRED) = [4] x1 + [1] p(#SUCC) = [1] x1 + [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [1] x1 + [0] p(+) = [1] x1 + [1] x2 + [0] p(+') = [1] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [2] x1 + [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [2] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [2] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [7] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [7] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [1] x1 + [0] p(#natmult#) = [0] p(#pred#) = [1] x1 + [0] p(#succ#) = [0] p(*#) = [2] p(*'#) = [0] p(+#) = [0] p(+'#) = [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [0] p(BFTMULT'#) = [1] x1 + [1] x2 + [7] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [4] p(BFTMULT'#2#) = [0] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [4] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [2] p(BFTMULT'#5#) = [1] x1 + [7] p(COMPUTELINE#) = [0] p(COMPUTELINE#1#) = [0] p(COMPUTELINE#2#) = [0] p(DEQUEUE#) = [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [0] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [2] x1 + [1] p(appendreverse#) = [0] p(appendreverse#1#) = [1] x1 + [1] x2 + [0] p(bftMult#) = [1] x1 + [4] x2 + [0] p(bftMult'#) = [1] x1 + [1] x2 + [0] p(bftMult'#1#) = [4] x2 + [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [4] x1 + [2] x3 + [0] p(bftMult'#5#) = [1] x2 + [1] x3 + [4] p(computeLine#) = [2] x2 + [1] p(computeLine#1#) = [4] x1 + [4] x2 + [1] x3 + [4] p(computeLine#2#) = [1] x1 + [2] x2 + [1] x3 + [0] p(dequeue#) = [1] x2 + [0] p(dequeue#1#) = [2] x2 + [0] p(dequeue#2#) = [0] p(enqueue#) = [2] x2 + [0] p(enqueue#1#) = [2] x1 + [4] x2 + [2] p(lineMult#) = [2] x1 + [0] p(lineMult#1#) = [2] x1 + [1] x3 + [0] p(lineMult#2#) = [2] x2 + [1] x3 + [1] x4 + [1] p(matrixMult#) = [1] x1 + [1] p(matrixMult#1#) = [1] x2 + [0] p(reverse#) = [1] p(c_1) = [1] x1 + [0] p(c_2) = [2] x1 + [1] p(c_3) = [1] x1 + [1] p(c_4) = [1] x1 + [1] p(c_5) = [0] p(c_6) = [1] x1 + [0] p(c_7) = [1] x1 + [0] p(c_8) = [1] x1 + [0] p(c_9) = [1] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [1] x1 + [2] p(c_13) = [1] x1 + [2] p(c_14) = [1] x1 + [0] p(c_15) = [1] p(c_16) = [0] p(c_17) = [0] p(c_18) = [1] x1 + [1] x2 + [1] p(c_19) = [1] p(c_20) = [2] x1 + [0] p(c_21) = [2] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [4] p(c_26) = [0] p(c_27) = [1] p(c_28) = [2] x1 + [0] p(c_29) = [1] p(c_30) = [2] x1 + [1] x2 + [1] p(c_31) = [1] x1 + [0] p(c_32) = [1] x1 + [0] p(c_33) = [1] x1 + [2] p(c_34) = [1] x1 + [4] p(c_35) = [4] x1 + [0] p(c_36) = [1] p(c_37) = [0] p(c_38) = [1] p(c_39) = [2] p(c_40) = [0] p(c_41) = [2] x3 + [0] p(c_42) = [1] x1 + [4] p(c_43) = [1] x1 + [1] x2 + [1] x3 + [2] p(c_44) = [1] p(c_45) = [0] p(c_46) = [1] p(c_47) = [1] p(c_48) = [1] x1 + [0] p(c_49) = [2] x1 + [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [2] p(c_54) = [2] x1 + [1] x2 + [4] p(c_55) = [4] p(c_56) = [4] p(c_57) = [0] p(c_58) = [1] p(c_59) = [1] p(c_60) = [1] p(c_61) = [1] p(c_62) = [4] p(c_63) = [0] p(c_64) = [1] x1 + [0] p(c_65) = [4] x1 + [1] x2 + [0] p(c_66) = [1] x1 + [4] p(c_67) = [4] x2 + [0] p(c_68) = [1] p(c_69) = [1] p(c_70) = [4] p(c_71) = [0] p(c_72) = [2] x1 + [0] p(c_73) = [1] p(c_74) = [1] p(c_75) = [0] p(c_76) = [1] x1 + [0] p(c_77) = [1] p(c_78) = [1] x1 + [1] x2 + [1] p(c_79) = [1] p(c_80) = [0] p(c_81) = [0] p(c_82) = [1] p(c_83) = [4] p(c_84) = [0] p(c_85) = [0] p(c_86) = [0] p(c_87) = [0] p(c_88) = [2] x1 + [1] p(c_89) = [1] x1 + [0] p(c_90) = [0] p(c_91) = [1] p(c_92) = [4] x1 + [1] p(c_93) = [1] x1 + [1] p(c_94) = [1] x1 + [1] p(c_95) = [1] x1 + [1] p(c_96) = [1] x1 + [0] p(c_97) = [2] p(c_98) = [4] x1 + [2] p(c_99) = [2] x2 + [1] p(c_100) = [1] x1 + [4] p(c_101) = [0] p(c_102) = [1] p(c_103) = [1] p(c_104) = [1] x1 + [1] x2 + [1] p(c_105) = [0] p(c_106) = [1] x1 + [2] p(c_107) = [0] p(c_108) = [1] x2 + [0] p(c_109) = [4] p(c_110) = [1] p(c_111) = [1] p(c_112) = [1] p(c_113) = [2] x1 + [0] p(c_114) = [1] x1 + [1] p(c_115) = [1] p(c_116) = [1] x1 + [1] x2 + [1] x3 + [0] p(c_117) = [1] p(c_118) = [4] p(c_119) = [1] x1 + [0] p(c_120) = [4] p(c_121) = [1] x1 + [0] Following rules are strictly oriented: BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [7] > [1] z0 + [1] z1 + [6] = c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) Following rules are (at-least) weakly oriented: BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [4] >= [1] z0 + [1] z1 + [1] z2 + [4] = c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [4] >= [1] z0 + [1] z2 + [1] z3 + [2] = c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [9] >= [1] z0 + [1] z1 + [9] = c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [1] z4 + [9] >= [1] z1 + [1] z2 + [1] z4 + [9] = c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [7] >= [1] z0 + [7] = c_14(BFTMULT'#(z0,matrixMult(z1,z2))) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [2] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [0] >= [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [0] >= [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. ** Step 9.a:6: EmptyProcessor. WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: BFTMULT'#(z0,z1) -> c_7(BFTMULT'#1#(bftMult'#2(z0),z1)) BFTMULT'#1#(tuple#2(z0,z1),z2) -> c_8(BFTMULT'#3#(z0,z2,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> c_10(BFTMULT'#4#(z0,z2,z3)) BFTMULT'#4#(leaf(),z0,z1) -> c_12(BFTMULT'#(z1,z0)) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> c_13(BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0)) BFTMULT'#5#(z0,z1,z2) -> c_14(BFTMULT'#(z0,matrixMult(z1,z2))) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). ** Step 9.b:1: DecomposeDG. WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) and a lower component LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) Further, following extension rules are added to the lower component. APPENDREVERSE#(z0,z1) -> APPENDREVERSE#1#(z0,z1) APPENDREVERSE#1#(::(z0,z1),z2) -> APPENDREVERSE#(z1,::(z0,z2)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> DEQUEUE#(z0,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2) DEQUEUE#(z0,z1) -> DEQUEUE#1#(z0,z1) DEQUEUE#1#(nil(),z0) -> REVERSE#(z0) MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2) REVERSE#(z0) -> APPENDREVERSE#(z0,nil()) *** Step 9.b:1.a:1: SimplifyRHS. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) -->_1 APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))):2 2:S:APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 3:S:BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) -->_1 DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)):7 4:S:COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) -->_1 COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)):5 5:S:COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) -->_1 COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) ,LINEMULT#(z3,z0,z2)):6 6:S:COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)),LINEMULT#(z3,z0,z2)) -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):4 7:S:DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) -->_1 DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)):8 8:S:DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) -->_1 REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())):12 9:S:MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)):11 -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())):10 10:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) -->_1 COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)):4 11:S:MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) -->_1 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):9 12:S:REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) -->_1 APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)):1 13:W:BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) -->_1 BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1):15 14:W:BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) -->_1 BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)):3 15:W:BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) -->_1 BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3):16 16:W:BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) -->_1 BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0):18 -->_1 BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0):17 17:W:BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0):14 -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1):13 18:W:BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) -->_1 BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2):20 -->_1 BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)):19 19:W:BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0):14 -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1):13 20:W:BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) -->_1 MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)):9 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) *** Step 9.b:1.a:2: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(COMPUTELINE#) = {3}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [1] x1 + [1] x2 + [0] p(#MULT) = [1] x1 + [1] x2 + [0] p(#NATMULT) = [1] x1 + [1] x2 + [1] p(#PRED) = [1] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [1] x2 + [2] p(+) = [1] x1 + [1] x2 + [0] p(+') = [2] x1 + [1] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [1] x1 + [1] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [1] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [6] p(matrixMult#1) = [6] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [7] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [2] x1 + [0] p(+#) = [1] x2 + [0] p(+'#) = [1] x1 + [2] x2 + [1] p(APPENDREVERSE#) = [1] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [1] x1 + [2] p(BFTMULT'#) = [1] x1 + [1] x2 + [1] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#2#) = [1] x1 + [0] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#5#) = [1] x1 + [7] p(COMPUTELINE#) = [1] x3 + [4] p(COMPUTELINE#1#) = [1] x2 + [1] p(COMPUTELINE#2#) = [1] x2 + [3] p(DEQUEUE#) = [5] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [4] x1 + [2] p(ENQUEUE#) = [1] p(ENQUEUE#1#) = [1] x1 + [0] p(LINEMULT#) = [1] x2 + [1] x3 + [4] p(LINEMULT#1#) = [2] x3 + [1] p(LINEMULT#2#) = [1] x1 + [4] x4 + [0] p(MATRIXMULT#) = [2] p(MATRIXMULT#1#) = [4] p(REVERSE#) = [0] p(appendreverse#) = [4] x2 + [4] p(appendreverse#1#) = [2] p(bftMult#) = [1] x1 + [0] p(bftMult'#) = [2] x1 + [1] x2 + [0] p(bftMult'#1#) = [2] x2 + [1] p(bftMult'#2#) = [1] x1 + [0] p(bftMult'#3#) = [4] x1 + [4] x2 + [2] p(bftMult'#4#) = [2] p(bftMult'#5#) = [1] p(computeLine#) = [2] x2 + [1] x3 + [1] p(computeLine#1#) = [1] x2 + [1] p(computeLine#2#) = [1] x1 + [1] x4 + [0] p(dequeue#) = [1] x1 + [1] x2 + [0] p(dequeue#1#) = [2] x2 + [1] p(dequeue#2#) = [1] x1 + [0] p(enqueue#) = [1] x1 + [1] x2 + [4] p(enqueue#1#) = [2] x1 + [2] p(lineMult#) = [1] x1 + [1] x3 + [0] p(lineMult#1#) = [1] x1 + [2] x2 + [0] p(lineMult#2#) = [4] x1 + [1] x3 + [1] p(matrixMult#) = [1] x2 + [4] p(matrixMult#1#) = [2] x1 + [1] x2 + [0] p(reverse#) = [2] p(c_1) = [0] p(c_2) = [1] x1 + [0] p(c_3) = [1] x1 + [0] p(c_4) = [1] x1 + [4] p(c_5) = [0] p(c_6) = [0] p(c_7) = [2] x1 + [0] p(c_8) = [0] p(c_9) = [1] x1 + [1] p(c_10) = [1] p(c_11) = [4] p(c_12) = [0] p(c_13) = [1] x1 + [0] p(c_14) = [4] x1 + [1] x2 + [1] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [3] p(c_17) = [0] p(c_18) = [1] x1 + [7] p(c_19) = [1] p(c_20) = [1] x1 + [0] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [4] p(c_25) = [1] p(c_26) = [1] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [2] p(c_29) = [1] p(c_30) = [1] x1 + [1] x3 + [0] p(c_31) = [0] p(c_32) = [1] x1 + [4] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [7] p(c_35) = [1] x1 + [0] p(c_36) = [1] x1 + [4] p(c_37) = [0] p(c_38) = [1] x1 + [1] p(c_39) = [0] p(c_40) = [1] x1 + [1] p(c_41) = [4] x1 + [4] x2 + [4] x3 + [1] p(c_42) = [1] x1 + [0] p(c_43) = [1] x2 + [2] x3 + [1] p(c_44) = [2] p(c_45) = [0] p(c_46) = [4] p(c_47) = [1] p(c_48) = [1] x1 + [0] p(c_49) = [1] x1 + [0] p(c_50) = [1] p(c_51) = [1] p(c_52) = [1] p(c_53) = [0] p(c_54) = [1] x1 + [2] x2 + [1] x3 + [0] p(c_55) = [2] p(c_56) = [0] p(c_57) = [0] p(c_58) = [2] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [1] x1 + [4] p(c_65) = [4] x1 + [0] p(c_66) = [2] x1 + [2] p(c_67) = [1] x1 + [1] x2 + [1] p(c_68) = [2] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [2] x1 + [1] p(c_73) = [4] p(c_74) = [1] p(c_75) = [0] p(c_76) = [4] x1 + [0] p(c_77) = [1] p(c_78) = [1] x2 + [1] p(c_79) = [0] p(c_80) = [4] p(c_81) = [1] p(c_82) = [0] p(c_83) = [0] p(c_84) = [0] p(c_85) = [1] p(c_86) = [4] p(c_87) = [1] x1 + [1] p(c_88) = [0] p(c_89) = [1] x1 + [0] p(c_90) = [1] x1 + [0] p(c_91) = [0] p(c_92) = [2] x1 + [0] p(c_93) = [0] p(c_94) = [1] x1 + [1] p(c_95) = [4] p(c_96) = [0] p(c_97) = [2] p(c_98) = [1] x1 + [0] p(c_99) = [0] p(c_100) = [2] x1 + [0] p(c_101) = [1] p(c_102) = [4] p(c_103) = [0] p(c_104) = [1] x2 + [1] p(c_105) = [1] p(c_106) = [2] x1 + [1] p(c_107) = [0] p(c_108) = [2] x2 + [0] p(c_109) = [1] p(c_110) = [1] p(c_111) = [0] p(c_112) = [1] p(c_113) = [0] p(c_114) = [0] p(c_115) = [2] p(c_116) = [2] x3 + [0] p(c_117) = [0] p(c_118) = [4] p(c_119) = [1] x1 + [1] p(c_120) = [0] p(c_121) = [4] x1 + [4] Following rules are strictly oriented: APPENDREVERSE#(z0,z1) = [1] > [0] = c_3(APPENDREVERSE#1#(z0,z1)) COMPUTELINE#(z0,z1,z2) = [1] z2 + [4] > [1] z2 + [2] = c_15(COMPUTELINE#1#(z0,z2,z1)) DEQUEUE#(z0,z1) = [5] > [0] = c_20(DEQUEUE#1#(z0,z1)) Following rules are (at-least) weakly oriented: APPENDREVERSE#1#(::(z0,z1),z2) = [0] >= [5] = c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [0] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [0] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [6] = c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [0] >= [1] z0 + [1] z2 + [1] z3 + [0] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [1] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [1] z4 + [7] >= [1] z1 + [1] z2 + [1] z4 + [7] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [7] >= [1] z0 + [7] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [7] >= [2] = MATRIXMULT#(z1,z2) COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z2 + [1] >= [1] z2 + [6] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [3] >= [1] z2 + [11] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#1#(nil(),z0) = [0] >= [0] = c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) = [2] >= [11] = c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) = [4] >= [4] = c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) = [4] >= [6] = c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) = [0] >= [2] = c_38(APPENDREVERSE#(z0,nil())) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [6] >= [6] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [6] >= [6] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [6] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 9.b:1.a:3: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(COMPUTELINE#) = {3}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [0] p(#MULT) = [1] x2 + [2] p(#NATMULT) = [2] x1 + [0] p(#PRED) = [4] x1 + [4] p(#SUCC) = [1] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [1] x1 + [4] x2 + [1] p(+) = [1] x1 + [1] x2 + [0] p(+') = [0] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [4] x1 + [2] p(APPENDREVERSE#1) = [1] x1 + [4] x2 + [1] p(BFTMULT) = [2] x1 + [1] p(BFTMULT') = [4] x1 + [2] x2 + [2] p(BFTMULT'#1) = [1] x2 + [0] p(BFTMULT'#2) = [1] x1 + [1] p(BFTMULT'#3) = [4] x2 + [2] x3 + [0] p(BFTMULT'#4) = [1] x2 + [1] p(BFTMULT'#5) = [4] x3 + [1] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [2] x1 + [4] p(COMPUTELINE#2) = [2] x3 + [1] x4 + [1] p(DEQUEUE) = [4] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [2] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [2] x2 + [0] p(+#) = [1] x1 + [1] x2 + [0] p(+'#) = [4] x2 + [2] p(APPENDREVERSE#) = [2] p(APPENDREVERSE#1#) = [1] p(BFTMULT#) = [1] x1 + [1] x2 + [2] p(BFTMULT'#) = [1] x1 + [1] x2 + [2] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#2#) = [1] x1 + [2] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#5#) = [1] x1 + [1] x2 + [2] p(COMPUTELINE#) = [1] x3 + [1] p(COMPUTELINE#1#) = [1] x2 + [0] p(COMPUTELINE#2#) = [1] x2 + [2] p(DEQUEUE#) = [1] x2 + [1] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [1] x2 + [0] p(LINEMULT#) = [2] x1 + [1] x2 + [1] x3 + [2] p(LINEMULT#1#) = [1] x2 + [1] x3 + [4] p(LINEMULT#2#) = [1] x1 + [2] x2 + [1] x4 + [1] p(MATRIXMULT#) = [1] x1 + [0] p(MATRIXMULT#1#) = [1] x1 + [4] p(REVERSE#) = [1] p(appendreverse#) = [0] p(appendreverse#1#) = [2] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [2] x1 + [0] p(computeLine#1#) = [4] x2 + [2] p(computeLine#2#) = [2] x1 + [2] x4 + [0] p(dequeue#) = [1] p(dequeue#1#) = [1] x1 + [0] p(dequeue#2#) = [1] x1 + [2] p(enqueue#) = [2] p(enqueue#1#) = [4] x1 + [0] p(lineMult#) = [2] x1 + [2] x3 + [0] p(lineMult#1#) = [1] x1 + [1] x3 + [1] p(lineMult#2#) = [1] x1 + [4] x2 + [2] x3 + [1] x4 + [0] p(matrixMult#) = [1] x1 + [2] x2 + [2] p(matrixMult#1#) = [1] x1 + [1] x2 + [1] p(reverse#) = [1] x1 + [2] p(c_1) = [1] p(c_2) = [1] x1 + [1] p(c_3) = [1] x1 + [0] p(c_4) = [1] x1 + [5] p(c_5) = [1] p(c_6) = [1] p(c_7) = [4] p(c_8) = [1] p(c_9) = [1] x1 + [0] p(c_10) = [2] x1 + [1] p(c_11) = [1] p(c_12) = [1] x1 + [2] p(c_13) = [1] p(c_14) = [1] x1 + [1] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [3] p(c_17) = [0] p(c_18) = [1] x1 + [0] p(c_19) = [1] p(c_20) = [1] x1 + [1] p(c_21) = [4] p(c_22) = [1] x1 + [1] p(c_23) = [2] p(c_24) = [1] p(c_25) = [0] p(c_26) = [1] p(c_27) = [2] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [4] p(c_30) = [1] p(c_31) = [1] x1 + [1] p(c_32) = [1] x1 + [1] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [5] p(c_36) = [1] x1 + [0] p(c_37) = [4] p(c_38) = [1] x1 + [4] p(c_39) = [0] p(c_40) = [1] x1 + [0] p(c_41) = [1] x2 + [1] x3 + [1] p(c_42) = [2] x1 + [0] p(c_43) = [0] p(c_44) = [2] p(c_45) = [4] p(c_46) = [0] p(c_47) = [4] p(c_48) = [1] p(c_49) = [1] x1 + [4] p(c_50) = [1] p(c_51) = [1] p(c_52) = [4] p(c_53) = [0] p(c_54) = [1] x3 + [1] p(c_55) = [4] p(c_56) = [2] p(c_57) = [2] p(c_58) = [0] p(c_59) = [0] p(c_60) = [1] p(c_61) = [0] p(c_62) = [4] p(c_63) = [2] p(c_64) = [1] x1 + [0] p(c_65) = [1] x2 + [0] p(c_66) = [2] x1 + [1] p(c_67) = [1] x2 + [1] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [4] p(c_72) = [1] x1 + [2] p(c_73) = [2] p(c_74) = [1] p(c_75) = [2] x1 + [1] p(c_76) = [0] p(c_77) = [0] p(c_78) = [1] x2 + [1] p(c_79) = [1] p(c_80) = [0] p(c_81) = [1] p(c_82) = [1] p(c_83) = [1] p(c_84) = [0] p(c_85) = [1] p(c_86) = [0] p(c_87) = [4] x1 + [1] p(c_88) = [2] x1 + [1] p(c_89) = [0] p(c_90) = [2] p(c_91) = [1] p(c_92) = [1] x1 + [0] p(c_93) = [0] p(c_94) = [1] p(c_95) = [0] p(c_96) = [0] p(c_97) = [1] p(c_98) = [4] x1 + [0] p(c_99) = [1] x1 + [1] x2 + [2] x3 + [2] p(c_100) = [4] x2 + [1] p(c_101) = [4] x1 + [1] p(c_102) = [1] x1 + [2] p(c_103) = [0] p(c_104) = [1] x1 + [1] x2 + [1] p(c_105) = [1] p(c_106) = [1] x1 + [0] p(c_107) = [1] p(c_108) = [1] p(c_109) = [0] p(c_110) = [2] p(c_111) = [0] p(c_112) = [1] p(c_113) = [1] x1 + [1] p(c_114) = [1] p(c_115) = [0] p(c_116) = [1] x1 + [1] x2 + [1] p(c_117) = [2] x1 + [4] p(c_118) = [2] p(c_119) = [0] p(c_120) = [1] p(c_121) = [1] Following rules are strictly oriented: BFTMULT'#2#(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [2] > [1] z1 + [1] = c_9(DEQUEUE#(z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [2] > [1] z2 + [1] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) MATRIXMULT#1#(::(z0,z1),z2) = [1] z0 + [1] z1 + [4] > [1] z1 + [0] = c_36(MATRIXMULT#(z1,z2)) Following rules are (at-least) weakly oriented: APPENDREVERSE#(z0,z1) = [2] >= [1] = c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) = [1] >= [7] = c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [0] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [2] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [0] >= [1] z0 + [1] z2 + [1] z3 + [0] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [2] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z1 + [1] z2 + [1] z3 + [1] z4 + [2] >= [1] z1 + [1] z2 + [1] z3 + [1] z4 + [2] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z1 + [2] >= [1] z0 + [2] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z1 + [2] >= [1] z1 + [0] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [1] z2 + [1] >= [1] z2 + [0] = c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [5] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) DEQUEUE#(z0,z1) = [1] z1 + [1] >= [1] = c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) = [0] >= [2] = c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) = [1] z0 + [0] >= [1] z0 + [4] = c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) = [1] z0 + [1] z1 + [4] >= [6] = c_35(COMPUTELINE#(z0,z2,nil())) REVERSE#(z0) = [1] >= [6] = c_38(APPENDREVERSE#(z0,nil())) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [0] >= [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [0] >= [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 9.b:1.a:4: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(COMPUTELINE#) = {3}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [2] x1 + [0] p(#MULT) = [2] x1 + [2] x2 + [0] p(#NATMULT) = [2] x2 + [0] p(#PRED) = [1] x1 + [2] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [2] p(+) = [1] x1 + [1] x2 + [0] p(+') = [2] x2 + [0] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [1] x1 + [0] p(BFTMULT) = [2] x1 + [0] p(BFTMULT') = [2] p(BFTMULT'#1) = [1] x2 + [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [2] x2 + [2] x3 + [0] p(BFTMULT'#4) = [1] x2 + [2] x3 + [1] p(BFTMULT'#5) = [1] x2 + [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [1] x1 + [1] x2 + [0] p(DEQUEUE) = [2] x2 + [0] p(DEQUEUE#1) = [1] x1 + [0] p(DEQUEUE#2) = [2] p(ENQUEUE) = [2] x1 + [0] p(ENQUEUE#1) = [1] x1 + [1] x2 + [1] p(LINEMULT) = [2] p(LINEMULT#1) = [1] x1 + [1] x2 + [2] x3 + [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [1] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [0] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [2] x2 + [0] p(#MULT#) = [0] p(#NATMULT#) = [2] x2 + [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [0] p(+#) = [0] p(+'#) = [0] p(APPENDREVERSE#) = [2] p(APPENDREVERSE#1#) = [2] p(BFTMULT#) = [0] p(BFTMULT'#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#2#) = [1] x1 + [0] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#5#) = [1] x1 + [1] p(COMPUTELINE#) = [1] x3 + [0] p(COMPUTELINE#1#) = [1] x2 + [0] p(COMPUTELINE#2#) = [1] x2 + [1] p(DEQUEUE#) = [1] x1 + [0] p(DEQUEUE#1#) = [1] x1 + [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [2] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [1] p(MATRIXMULT#1#) = [1] p(REVERSE#) = [2] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [2] x2 + [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(lineMult#2#) = [0] p(matrixMult#) = [1] x1 + [1] x2 + [0] p(matrixMult#1#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [1] x1 + [0] p(c_4) = [1] x1 + [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [1] x1 + [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [2] p(c_13) = [1] p(c_14) = [2] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [0] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [2] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [0] p(c_36) = [1] x1 + [0] p(c_37) = [0] p(c_38) = [1] x1 + [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [1] x1 + [0] p(c_53) = [1] p(c_54) = [1] x1 + [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [0] p(c_78) = [0] p(c_79) = [0] p(c_80) = [0] p(c_81) = [0] p(c_82) = [0] p(c_83) = [0] p(c_84) = [0] p(c_85) = [0] p(c_86) = [0] p(c_87) = [0] p(c_88) = [0] p(c_89) = [2] x1 + [0] p(c_90) = [0] p(c_91) = [0] p(c_92) = [0] p(c_93) = [0] p(c_94) = [0] p(c_95) = [0] p(c_96) = [0] p(c_97) = [0] p(c_98) = [0] p(c_99) = [0] p(c_100) = [0] p(c_101) = [0] p(c_102) = [0] p(c_103) = [2] p(c_104) = [1] x1 + [2] x2 + [0] p(c_105) = [1] p(c_106) = [2] p(c_107) = [0] p(c_108) = [2] x1 + [1] x2 + [0] p(c_109) = [0] p(c_110) = [0] p(c_111) = [2] p(c_112) = [0] p(c_113) = [2] x1 + [0] p(c_114) = [1] p(c_115) = [2] p(c_116) = [1] x1 + [0] p(c_117) = [2] x1 + [0] p(c_118) = [2] x1 + [2] p(c_119) = [1] x1 + [0] p(c_120) = [1] p(c_121) = [1] x1 + [1] Following rules are strictly oriented: MATRIXMULT#1#(::(z0,z1),z2) = [1] > [0] = c_35(COMPUTELINE#(z0,z2,nil())) Following rules are (at-least) weakly oriented: APPENDREVERSE#(z0,z1) = [2] >= [2] = c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) = [2] >= [2] = c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [0] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [0] = c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [0] >= [1] z0 + [1] z2 + [1] z3 + [0] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z1 + [1] z2 + [1] z3 + [1] z4 + [2] >= [1] z1 + [1] z2 + [1] z4 + [1] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] >= [1] z0 + [0] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] >= [1] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [1] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [1] >= [1] z2 + [0] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) = [0] >= [2] = c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) = [1] >= [1] = c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) = [1] >= [1] = c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) = [2] >= [2] = c_38(APPENDREVERSE#(z0,nil())) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [0] >= [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [0] >= [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 9.b:1.a:5: NaturalMI. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: {lineMult,lineMult#1,lineMult#2,#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult#,#natmult#,#pred#,#succ# ,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1#,BFTMULT'#2#,BFTMULT'#3# ,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE#,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE# ,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1#,REVERSE#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} TcT has computed the following interpretation: p(#0) = [2] p(#ADD) = [0] p(#MULT) = [0] p(#NATMULT) = [0] p(#PRED) = [0] p(#SUCC) = [0] p(#add) = [1] p(#mult) = [4] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [0] p(#pred) = [5] x1 + [5] p(#s) = [0] p(#succ) = [4] x1 + [0] p(*) = [0] p(*') = [0] p(+) = [0] p(+') = [0] p(::) = [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [0] p(appendreverse#1) = [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [0] p(computeLine#1) = [0] p(computeLine#2) = [0] p(dequeue) = [0] p(dequeue#1) = [0] p(dequeue#2) = [0] p(enqueue) = [0] p(enqueue#1) = [0] p(leaf) = [0] p(lineMult) = [0] p(lineMult#1) = [0] p(lineMult#2) = [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [0] p(reverse) = [0] p(tuple#2) = [1] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [0] p(+#) = [0] p(+'#) = [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [0] p(BFTMULT'#) = [7] p(BFTMULT'#1#) = [7] p(BFTMULT'#2#) = [7] p(BFTMULT'#3#) = [7] p(BFTMULT'#4#) = [7] p(BFTMULT'#5#) = [7] p(COMPUTELINE#) = [4] x3 + [0] p(COMPUTELINE#1#) = [1] x2 + [0] p(COMPUTELINE#2#) = [0] p(DEQUEUE#) = [6] p(DEQUEUE#1#) = [6] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [0] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [2] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(lineMult#2#) = [0] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [4] x1 + [0] p(c_4) = [4] x1 + [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [1] x1 + [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [4] x1 + [0] p(c_16) = [4] x1 + [0] p(c_17) = [0] p(c_18) = [4] x1 + [0] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [0] p(c_22) = [2] x1 + [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [0] p(c_28) = [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [0] p(c_32) = [0] p(c_33) = [0] p(c_34) = [4] x1 + [0] p(c_35) = [2] x1 + [0] p(c_36) = [2] x1 + [0] p(c_37) = [0] p(c_38) = [1] x1 + [2] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [0] p(c_78) = [0] p(c_79) = [0] p(c_80) = [0] p(c_81) = [0] p(c_82) = [0] p(c_83) = [0] p(c_84) = [0] p(c_85) = [0] p(c_86) = [0] p(c_87) = [0] p(c_88) = [0] p(c_89) = [0] p(c_90) = [0] p(c_91) = [0] p(c_92) = [0] p(c_93) = [0] p(c_94) = [0] p(c_95) = [0] p(c_96) = [0] p(c_97) = [0] p(c_98) = [0] p(c_99) = [0] p(c_100) = [0] p(c_101) = [0] p(c_102) = [0] p(c_103) = [0] p(c_104) = [0] p(c_105) = [0] p(c_106) = [0] p(c_107) = [0] p(c_108) = [0] p(c_109) = [0] p(c_110) = [0] p(c_111) = [0] p(c_112) = [0] p(c_113) = [0] p(c_114) = [0] p(c_115) = [0] p(c_116) = [0] p(c_117) = [0] p(c_118) = [0] p(c_119) = [0] p(c_120) = [0] p(c_121) = [0] Following rules are strictly oriented: DEQUEUE#1#(nil(),z0) = [6] > [4] = c_22(REVERSE#(z0)) Following rules are (at-least) weakly oriented: APPENDREVERSE#(z0,z1) = [0] >= [0] = c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) = [0] >= [0] = c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) = [7] >= [7] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [7] >= [7] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [7] >= [7] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) = [7] >= [6] = c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [7] >= [7] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [7] >= [7] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [7] >= [7] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [7] >= [7] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [7] >= [0] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [4] z2 + [0] >= [4] z2 + [0] = c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z2 + [0] >= [0] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [0] >= [0] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) = [6] >= [6] = c_20(DEQUEUE#1#(z0,z1)) MATRIXMULT#(z0,z1) = [0] >= [0] = c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) = [2] >= [2] = c_38(APPENDREVERSE#(z0,nil())) lineMult(z0,z1,z2) = [0] >= [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [0] >= [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [0] >= [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) *** Step 9.b:1.a:6: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(COMPUTELINE#) = {3}, uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [2] x1 + [1] p(#MULT) = [1] x2 + [1] p(#NATMULT) = [2] x2 + [0] p(#PRED) = [2] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [2] x2 + [0] p(+) = [1] x1 + [1] x2 + [0] p(+') = [0] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [2] p(APPENDREVERSE#1) = [1] x1 + [0] p(BFTMULT) = [0] p(BFTMULT') = [2] x1 + [0] p(BFTMULT'#1) = [2] x1 + [1] p(BFTMULT'#2) = [1] x1 + [0] p(BFTMULT'#3) = [1] x2 + [0] p(BFTMULT'#4) = [2] x1 + [0] p(BFTMULT'#5) = [2] x2 + [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [2] x1 + [1] x2 + [1] p(COMPUTELINE#2) = [2] x1 + [2] p(DEQUEUE) = [1] x1 + [0] p(DEQUEUE#1) = [2] x1 + [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [1] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [1] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [1] p(enqueue#1) = [1] x1 + [1] x2 + [1] p(leaf) = [2] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [3] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [2] x1 + [1] p(+#) = [0] p(+'#) = [2] x1 + [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [1] x1 + [2] p(BFTMULT'#) = [1] x1 + [1] x2 + [2] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [1] p(BFTMULT'#2#) = [1] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [1] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [1] p(BFTMULT'#5#) = [1] x1 + [2] p(COMPUTELINE#) = [1] x3 + [0] p(COMPUTELINE#1#) = [1] x2 + [0] p(COMPUTELINE#2#) = [1] x2 + [0] p(DEQUEUE#) = [1] p(DEQUEUE#1#) = [1] p(DEQUEUE#2#) = [1] p(ENQUEUE#) = [1] x2 + [0] p(ENQUEUE#1#) = [1] x2 + [0] p(LINEMULT#) = [2] x2 + [1] p(LINEMULT#1#) = [2] x1 + [2] x2 + [2] x3 + [2] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [2] p(REVERSE#) = [1] p(appendreverse#) = [0] p(appendreverse#1#) = [1] x2 + [0] p(bftMult#) = [1] x2 + [0] p(bftMult'#) = [1] x1 + [1] x2 + [0] p(bftMult'#1#) = [1] x1 + [1] x2 + [2] p(bftMult'#2#) = [1] x1 + [0] p(bftMult'#3#) = [2] x1 + [2] x3 + [2] p(bftMult'#4#) = [1] x1 + [1] x2 + [2] p(bftMult'#5#) = [1] x3 + [2] p(computeLine#) = [1] x3 + [2] p(computeLine#1#) = [1] x1 + [0] p(computeLine#2#) = [1] x4 + [0] p(dequeue#) = [1] p(dequeue#1#) = [2] x2 + [0] p(dequeue#2#) = [2] x1 + [0] p(enqueue#) = [2] x1 + [1] x2 + [0] p(enqueue#1#) = [2] x2 + [2] p(lineMult#) = [1] x1 + [2] x3 + [0] p(lineMult#1#) = [1] x1 + [1] p(lineMult#2#) = [1] x1 + [1] x4 + [2] p(matrixMult#) = [0] p(matrixMult#1#) = [2] p(reverse#) = [0] p(c_1) = [1] x1 + [0] p(c_2) = [1] x1 + [2] p(c_3) = [1] x1 + [0] p(c_4) = [1] x1 + [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [1] x1 + [2] x2 + [2] p(c_8) = [2] x1 + [2] p(c_9) = [1] x1 + [0] p(c_10) = [1] x1 + [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [1] p(c_17) = [1] p(c_18) = [1] x1 + [0] p(c_19) = [0] p(c_20) = [1] x1 + [0] p(c_21) = [0] p(c_22) = [1] x1 + [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [1] p(c_26) = [0] p(c_27) = [2] x1 + [1] p(c_28) = [0] p(c_29) = [0] p(c_30) = [1] x2 + [0] p(c_31) = [1] x1 + [1] p(c_32) = [2] x1 + [2] p(c_33) = [0] p(c_34) = [1] x1 + [1] p(c_35) = [1] x1 + [2] p(c_36) = [1] x1 + [1] p(c_37) = [0] p(c_38) = [1] x1 + [0] p(c_39) = [1] p(c_40) = [0] p(c_41) = [1] x2 + [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [2] p(c_46) = [2] p(c_47) = [0] p(c_48) = [1] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [2] x1 + [0] p(c_53) = [0] p(c_54) = [2] x1 + [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [2] p(c_58) = [0] p(c_59) = [2] p(c_60) = [0] p(c_61) = [1] p(c_62) = [0] p(c_63) = [1] p(c_64) = [2] p(c_65) = [2] p(c_66) = [1] p(c_67) = [2] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [2] x1 + [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [1] x1 + [0] p(c_76) = [1] x1 + [0] p(c_77) = [0] p(c_78) = [2] x2 + [1] p(c_79) = [0] p(c_80) = [0] p(c_81) = [1] p(c_82) = [0] p(c_83) = [0] p(c_84) = [0] p(c_85) = [0] p(c_86) = [0] p(c_87) = [1] p(c_88) = [2] x1 + [1] p(c_89) = [2] x1 + [0] p(c_90) = [1] p(c_91) = [0] p(c_92) = [2] x1 + [0] p(c_93) = [1] x1 + [0] p(c_94) = [1] x1 + [0] p(c_95) = [0] p(c_96) = [2] x1 + [0] p(c_97) = [0] p(c_98) = [1] x1 + [0] p(c_99) = [2] x1 + [1] x2 + [2] p(c_100) = [2] p(c_101) = [2] x1 + [0] p(c_102) = [0] p(c_103) = [2] p(c_104) = [0] p(c_105) = [2] p(c_106) = [2] x1 + [2] p(c_107) = [0] p(c_108) = [2] x1 + [0] p(c_109) = [0] p(c_110) = [2] p(c_111) = [1] p(c_112) = [1] p(c_113) = [1] p(c_114) = [1] x1 + [0] p(c_115) = [0] p(c_116) = [2] x1 + [1] p(c_117) = [1] x2 + [0] p(c_118) = [2] x1 + [0] p(c_119) = [1] p(c_120) = [2] p(c_121) = [0] Following rules are strictly oriented: REVERSE#(z0) = [1] > [0] = c_38(APPENDREVERSE#(z0,nil())) Following rules are (at-least) weakly oriented: APPENDREVERSE#(z0,z1) = [0] >= [0] = c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) = [0] >= [0] = c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [2] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [1] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) = [1] >= [1] = c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [1] >= [1] z0 + [1] z2 + [1] z3 + [1] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [3] >= [1] z0 + [1] z1 + [2] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [1] z4 + [4] >= [1] z1 + [1] z2 + [1] z4 + [4] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [2] >= [1] z0 + [2] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [2] >= [0] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [1] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) = [1] >= [1] = c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) = [1] >= [1] = c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) = [0] >= [3] = c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) = [2] >= [2] = c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) = [2] >= [1] = c_36(MATRIXMULT#(z1,z2)) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [1] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [1] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [0] >= [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [0] >= [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 9.b:1.a:7: NaturalMI. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: {matrixMult,matrixMult#1,#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,*'# ,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1#,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4# ,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE#,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1# ,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1#,REVERSE#,appendreverse#,appendreverse#1# ,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1# ,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2# ,matrixMult#,matrixMult#1#,reverse#} TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [0] p(#MULT) = [0] p(#NATMULT) = [0] p(#PRED) = [0] p(#SUCC) = [0] p(#add) = [3] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [0] p(#pos) = [0] p(#pred) = [0] p(#s) = [5] p(#succ) = [0] p(*) = [0] p(*') = [0] p(+) = [0] p(+') = [0] p(::) = [1] x2 + [1] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [0] p(appendreverse#1) = [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [1] p(c43) = [0] p(c44) = [4] p(c45) = [0] p(c46) = [1] p(c47) = [2] p(c48) = [1] p(c49) = [0] p(c5) = [1] p(c50) = [1] p(c51) = [1] p(c52) = [1] p(c53) = [0] p(c54) = [1] p(c55) = [0] p(c56) = [1] p(c57) = [1] p(c58) = [0] p(c59) = [1] p(c6) = [0] p(c60) = [2] p(c61) = [0] p(c7) = [2] p(c8) = [2] p(c9) = [2] p(computeLine) = [1] x2 + [2] p(computeLine#1) = [3] x1 + [1] x3 + [1] p(computeLine#2) = [2] x1 + [3] p(dequeue) = [0] p(dequeue#1) = [0] p(dequeue#2) = [0] p(enqueue) = [1] p(enqueue#1) = [0] p(leaf) = [0] p(lineMult) = [2] x1 + [0] p(lineMult#1) = [2] x2 + [0] p(lineMult#2) = [2] x2 + [4] x4 + [1] p(matrixMult) = [1] x1 + [0] p(matrixMult#1) = [1] x1 + [0] p(nil) = [0] p(node) = [1] x1 + [0] p(reverse) = [0] p(tuple#2) = [0] p(#ADD#) = [4] x2 + [0] p(#MULT#) = [1] x2 + [4] p(#NATMULT#) = [1] x2 + [0] p(#PRED#) = [0] p(#SUCC#) = [1] p(#add#) = [2] x2 + [0] p(#mult#) = [4] p(#natmult#) = [4] x1 + [1] p(#pred#) = [1] x1 + [1] p(#succ#) = [4] p(*#) = [1] x2 + [1] p(*'#) = [2] x2 + [1] p(+#) = [2] x2 + [2] p(+'#) = [2] x1 + [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [2] x1 + [1] x2 + [2] p(BFTMULT'#) = [4] x2 + [4] p(BFTMULT'#1#) = [4] x2 + [4] p(BFTMULT'#2#) = [1] p(BFTMULT'#3#) = [4] x2 + [4] p(BFTMULT'#4#) = [4] x2 + [4] p(BFTMULT'#5#) = [4] x2 + [4] p(COMPUTELINE#) = [0] p(COMPUTELINE#1#) = [0] p(COMPUTELINE#2#) = [0] p(DEQUEUE#) = [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [1] x1 + [1] p(ENQUEUE#) = [1] x2 + [4] p(ENQUEUE#1#) = [4] x1 + [1] x2 + [1] p(LINEMULT#) = [1] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [4] x2 + [1] x3 + [0] p(MATRIXMULT#) = [4] x1 + [4] p(MATRIXMULT#1#) = [4] x1 + [0] p(REVERSE#) = [0] p(appendreverse#) = [1] x1 + [2] x2 + [4] p(appendreverse#1#) = [4] x1 + [4] p(bftMult#) = [4] x1 + [0] p(bftMult'#) = [1] p(bftMult'#1#) = [2] x1 + [1] x2 + [1] p(bftMult'#2#) = [0] p(bftMult'#3#) = [1] x3 + [2] p(bftMult'#4#) = [4] x2 + [1] x3 + [0] p(bftMult'#5#) = [1] x1 + [1] p(computeLine#) = [1] x2 + [1] x3 + [4] p(computeLine#1#) = [1] p(computeLine#2#) = [1] x4 + [2] p(dequeue#) = [2] x2 + [1] p(dequeue#1#) = [4] x1 + [2] x2 + [0] p(dequeue#2#) = [4] x1 + [1] p(enqueue#) = [2] x1 + [2] p(enqueue#1#) = [1] x2 + [2] p(lineMult#) = [1] x2 + [1] p(lineMult#1#) = [2] x3 + [0] p(lineMult#2#) = [4] x2 + [1] x3 + [1] x4 + [0] p(matrixMult#) = [1] x2 + [1] p(matrixMult#1#) = [1] p(reverse#) = [1] p(c_1) = [1] p(c_2) = [1] p(c_3) = [4] x1 + [0] p(c_4) = [4] x1 + [0] p(c_5) = [0] p(c_6) = [1] p(c_7) = [1] x1 + [4] p(c_8) = [4] x1 + [0] p(c_9) = [4] x1 + [1] p(c_10) = [1] x1 + [1] p(c_11) = [1] p(c_12) = [1] x1 + [2] p(c_13) = [1] p(c_14) = [1] x2 + [0] p(c_15) = [1] x1 + [0] p(c_16) = [2] x1 + [0] p(c_17) = [0] p(c_18) = [4] x1 + [0] p(c_19) = [0] p(c_20) = [2] x1 + [0] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [1] p(c_24) = [0] p(c_25) = [4] x1 + [4] p(c_26) = [2] p(c_27) = [1] x1 + [0] p(c_28) = [0] p(c_29) = [4] p(c_30) = [1] x2 + [0] p(c_31) = [1] x1 + [1] p(c_32) = [0] p(c_33) = [1] p(c_34) = [1] x1 + [0] p(c_35) = [4] x1 + [4] p(c_36) = [1] x1 + [0] p(c_37) = [1] p(c_38) = [4] x1 + [0] p(c_39) = [1] p(c_40) = [2] p(c_41) = [4] p(c_42) = [1] p(c_43) = [2] x3 + [1] p(c_44) = [1] p(c_45) = [2] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [1] x1 + [0] p(c_50) = [1] p(c_51) = [0] p(c_52) = [1] x1 + [1] p(c_53) = [0] p(c_54) = [1] x2 + [1] p(c_55) = [0] p(c_56) = [0] p(c_57) = [1] p(c_58) = [2] p(c_59) = [0] p(c_60) = [1] p(c_61) = [0] p(c_62) = [1] p(c_63) = [4] p(c_64) = [0] p(c_65) = [4] x1 + [4] p(c_66) = [1] x1 + [2] p(c_67) = [1] x1 + [4] x2 + [1] p(c_68) = [1] p(c_69) = [1] p(c_70) = [0] p(c_71) = [1] p(c_72) = [1] x1 + [0] p(c_73) = [1] p(c_74) = [0] p(c_75) = [4] x1 + [1] p(c_76) = [4] p(c_77) = [1] p(c_78) = [1] x1 + [2] x2 + [1] p(c_79) = [1] p(c_80) = [0] p(c_81) = [1] p(c_82) = [1] p(c_83) = [1] p(c_84) = [0] p(c_85) = [1] p(c_86) = [0] p(c_87) = [4] x1 + [0] p(c_88) = [2] x1 + [0] p(c_89) = [1] x1 + [1] p(c_90) = [1] x1 + [2] p(c_91) = [0] p(c_92) = [1] p(c_93) = [1] x1 + [2] p(c_94) = [2] p(c_95) = [0] p(c_96) = [2] x1 + [0] p(c_97) = [0] p(c_98) = [1] x1 + [1] p(c_99) = [1] x1 + [1] x3 + [1] p(c_100) = [1] x1 + [2] x2 + [4] p(c_101) = [0] p(c_102) = [1] p(c_103) = [0] p(c_104) = [1] x2 + [4] p(c_105) = [0] p(c_106) = [1] x1 + [0] p(c_107) = [0] p(c_108) = [0] p(c_109) = [1] p(c_110) = [1] p(c_111) = [1] x1 + [1] p(c_112) = [0] p(c_113) = [1] x1 + [0] p(c_114) = [2] x1 + [1] p(c_115) = [1] p(c_116) = [1] x1 + [0] p(c_117) = [2] x1 + [4] x2 + [1] p(c_118) = [0] p(c_119) = [1] x1 + [1] x2 + [4] p(c_120) = [1] p(c_121) = [0] Following rules are strictly oriented: MATRIXMULT#(z0,z1) = [4] z0 + [4] > [4] z0 + [0] = c_34(MATRIXMULT#1#(z0,z1)) Following rules are (at-least) weakly oriented: APPENDREVERSE#(z0,z1) = [0] >= [0] = c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) = [0] >= [0] = c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) = [4] z1 + [4] >= [4] z1 + [4] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [4] z1 + [4] >= [1] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [4] z2 + [4] >= [4] z2 + [4] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) = [1] >= [1] = c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [4] z2 + [4] >= [4] z2 + [4] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [4] z0 + [4] >= [4] z0 + [4] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [4] z3 + [4] >= [4] z3 + [4] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [4] z1 + [4] >= [4] z1 + [4] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [4] z1 + [4] >= [4] z1 + [4] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [0] >= [0] = c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) = [0] >= [0] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [0] >= [0] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) = [0] >= [0] = c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) = [0] >= [0] = c_22(REVERSE#(z0)) MATRIXMULT#1#(::(z0,z1),z2) = [4] z1 + [4] >= [4] = c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) = [4] z1 + [4] >= [4] z1 + [4] = c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) = [0] >= [0] = c_38(APPENDREVERSE#(z0,nil())) matrixMult(z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [1] z1 + [1] >= [1] z1 + [1] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() *** Step 9.b:1.a:8: NaturalMI. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: {appendreverse,appendreverse#1,bftMult'#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,reverse,#ADD# ,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE# ,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1#,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5# ,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE#,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT# ,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1#,REVERSE#,appendreverse#,appendreverse#1#,bftMult# ,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1# ,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2# ,matrixMult#,matrixMult#1#,reverse#} TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [0] p(#MULT) = [0] p(#NATMULT) = [0] p(#PRED) = [0] p(#SUCC) = [0] p(#add) = [0] p(#mult) = [4] x1 + [2] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] p(#pred) = [6] p(#s) = [0] p(#succ) = [4] x1 + [7] p(*) = [0] p(*') = [0] p(+) = [1] x2 + [3] p(+') = [0] p(::) = [1] x1 + [1] x2 + [2] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [2] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [1] x3 + [0] p(c) = [1] p(c1) = [1] x1 + [1] p(c10) = [0] p(c11) = [2] p(c12) = [2] p(c13) = [2] p(c14) = [0] p(c15) = [1] x2 + [1] p(c16) = [0] p(c17) = [1] p(c18) = [2] p(c19) = [0] p(c2) = [4] p(c20) = [0] p(c21) = [4] p(c22) = [2] p(c23) = [2] p(c24) = [0] p(c25) = [1] x1 + [0] p(c26) = [0] p(c27) = [1] x1 + [0] p(c28) = [4] p(c29) = [0] p(c3) = [1] p(c30) = [0] p(c31) = [1] x1 + [1] p(c32) = [0] p(c33) = [0] p(c34) = [0] p(c35) = [1] p(c36) = [1] x3 + [0] p(c37) = [2] p(c38) = [4] p(c39) = [1] x1 + [1] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x2 + [0] p(c42) = [0] p(c43) = [2] p(c44) = [1] p(c45) = [0] p(c46) = [4] p(c47) = [0] p(c48) = [2] p(c49) = [1] p(c5) = [1] p(c50) = [0] p(c51) = [1] p(c52) = [0] p(c53) = [1] p(c54) = [0] p(c55) = [0] p(c56) = [4] p(c57) = [1] p(c58) = [1] x1 + [4] p(c59) = [4] p(c6) = [4] p(c60) = [1] p(c61) = [1] x1 + [0] p(c7) = [1] p(c8) = [0] p(c9) = [0] p(computeLine) = [2] x1 + [4] x2 + [4] p(computeLine#1) = [4] x1 + [1] x3 + [6] p(computeLine#2) = [4] x1 + [1] x2 + [4] x3 + [4] p(dequeue) = [1] x1 + [1] x2 + [4] p(dequeue#1) = [1] x1 + [1] x2 + [4] p(dequeue#2) = [1] x1 + [4] p(enqueue) = [1] x1 + [1] x2 + [2] p(enqueue#1) = [1] x1 + [1] x2 + [2] p(leaf) = [0] p(lineMult) = [4] x1 + [0] p(lineMult#1) = [1] x1 + [1] p(lineMult#2) = [0] p(matrixMult) = [1] x1 + [0] p(matrixMult#1) = [6] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [5] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [2] p(#ADD#) = [1] x1 + [0] p(#MULT#) = [4] x1 + [2] x2 + [1] p(#NATMULT#) = [2] x1 + [4] x2 + [0] p(#PRED#) = [1] p(#SUCC#) = [1] x1 + [2] p(#add#) = [4] x2 + [1] p(#mult#) = [4] x2 + [4] p(#natmult#) = [4] x2 + [1] p(#pred#) = [1] x1 + [4] p(#succ#) = [0] p(*#) = [1] x2 + [1] p(*'#) = [0] p(+#) = [0] p(+'#) = [1] x1 + [2] x2 + [2] p(APPENDREVERSE#) = [1] x1 + [0] p(APPENDREVERSE#1#) = [1] x1 + [0] p(BFTMULT#) = [4] x1 + [1] x2 + [4] p(BFTMULT'#) = [2] x1 + [4] p(BFTMULT'#1#) = [2] x1 + [0] p(BFTMULT'#2#) = [2] x1 + [4] p(BFTMULT'#3#) = [2] x1 + [2] x3 + [1] p(BFTMULT'#4#) = [2] x1 + [2] x3 + [5] p(BFTMULT'#5#) = [2] x1 + [4] p(COMPUTELINE#) = [0] p(COMPUTELINE#1#) = [0] p(COMPUTELINE#2#) = [0] p(DEQUEUE#) = [2] x1 + [2] x2 + [4] p(DEQUEUE#1#) = [1] x2 + [1] p(DEQUEUE#2#) = [1] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [1] x1 + [1] x2 + [2] p(LINEMULT#) = [1] x1 + [4] p(LINEMULT#1#) = [2] p(LINEMULT#2#) = [1] x4 + [1] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [1] x1 + [0] p(appendreverse#) = [0] p(appendreverse#1#) = [4] x1 + [1] p(bftMult#) = [1] x1 + [0] p(bftMult'#) = [1] x1 + [0] p(bftMult'#1#) = [2] p(bftMult'#2#) = [1] x1 + [1] p(bftMult'#3#) = [1] x3 + [1] p(bftMult'#4#) = [1] x1 + [1] x2 + [0] p(bftMult'#5#) = [1] x3 + [1] p(computeLine#) = [1] x2 + [1] p(computeLine#1#) = [4] x1 + [1] x2 + [1] p(computeLine#2#) = [4] x1 + [1] x2 + [1] x3 + [1] x4 + [4] p(dequeue#) = [2] x2 + [2] p(dequeue#1#) = [1] p(dequeue#2#) = [1] x1 + [1] p(enqueue#) = [4] p(enqueue#1#) = [1] p(lineMult#) = [1] x1 + [2] x2 + [4] x3 + [0] p(lineMult#1#) = [1] x1 + [1] x2 + [4] x3 + [0] p(lineMult#2#) = [2] x2 + [1] x3 + [1] x4 + [0] p(matrixMult#) = [4] x1 + [1] p(matrixMult#1#) = [1] x2 + [0] p(reverse#) = [1] p(c_1) = [1] p(c_2) = [1] x1 + [0] p(c_3) = [1] x1 + [0] p(c_4) = [1] x1 + [0] p(c_5) = [1] p(c_6) = [1] x1 + [1] p(c_7) = [1] x1 + [0] p(c_8) = [2] x1 + [1] p(c_9) = [1] x1 + [1] p(c_10) = [0] p(c_11) = [1] p(c_12) = [1] x1 + [0] p(c_13) = [0] p(c_14) = [2] p(c_15) = [4] x1 + [0] p(c_16) = [4] x1 + [0] p(c_17) = [1] p(c_18) = [4] x1 + [0] p(c_19) = [1] p(c_20) = [2] x1 + [0] p(c_21) = [1] p(c_22) = [1] x1 + [0] p(c_23) = [1] p(c_24) = [4] p(c_25) = [4] x1 + [2] p(c_26) = [2] p(c_27) = [0] p(c_28) = [4] x1 + [1] p(c_29) = [0] p(c_30) = [1] x1 + [1] p(c_31) = [1] p(c_32) = [1] p(c_33) = [4] p(c_34) = [2] x1 + [0] p(c_35) = [2] x1 + [0] p(c_36) = [4] x1 + [0] p(c_37) = [0] p(c_38) = [1] x1 + [0] p(c_39) = [4] p(c_40) = [1] p(c_41) = [0] p(c_42) = [2] p(c_43) = [1] x1 + [1] p(c_44) = [2] p(c_45) = [0] p(c_46) = [1] p(c_47) = [0] p(c_48) = [4] p(c_49) = [0] p(c_50) = [0] p(c_51) = [4] p(c_52) = [1] p(c_53) = [1] p(c_54) = [1] x1 + [4] x2 + [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [4] p(c_58) = [4] p(c_59) = [2] p(c_60) = [1] p(c_61) = [0] p(c_62) = [2] p(c_63) = [0] p(c_64) = [0] p(c_65) = [1] x1 + [4] x2 + [2] p(c_66) = [2] p(c_67) = [1] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [1] x1 + [0] p(c_73) = [0] p(c_74) = [2] p(c_75) = [4] p(c_76) = [0] p(c_77) = [0] p(c_78) = [2] x1 + [4] p(c_79) = [0] p(c_80) = [0] p(c_81) = [1] p(c_82) = [1] p(c_83) = [0] p(c_84) = [1] p(c_85) = [0] p(c_86) = [1] p(c_87) = [4] p(c_88) = [4] x1 + [4] p(c_89) = [4] x1 + [4] p(c_90) = [1] x1 + [4] p(c_91) = [0] p(c_92) = [0] p(c_93) = [1] p(c_94) = [1] x1 + [0] p(c_95) = [4] x1 + [1] p(c_96) = [2] p(c_97) = [0] p(c_98) = [1] x1 + [4] p(c_99) = [1] p(c_100) = [1] x1 + [2] x2 + [1] p(c_101) = [1] p(c_102) = [0] p(c_103) = [0] p(c_104) = [2] x2 + [0] p(c_105) = [1] p(c_106) = [0] p(c_107) = [1] p(c_108) = [2] x2 + [0] p(c_109) = [2] p(c_110) = [0] p(c_111) = [1] p(c_112) = [0] p(c_113) = [2] p(c_114) = [1] x1 + [1] p(c_115) = [0] p(c_116) = [1] x3 + [1] p(c_117) = [1] x1 + [1] p(c_118) = [0] p(c_119) = [1] x1 + [1] x2 + [0] p(c_120) = [0] p(c_121) = [0] Following rules are strictly oriented: APPENDREVERSE#1#(::(z0,z1),z2) = [1] z0 + [1] z1 + [2] > [1] z1 + [0] = c_4(APPENDREVERSE#(z1,::(z0,z2))) Following rules are (at-least) weakly oriented: APPENDREVERSE#(z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = c_3(APPENDREVERSE#1#(z0,z1)) BFTMULT'#(z0,z1) = [2] z0 + [4] >= [2] z0 + [4] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [2] z0 + [4] >= [2] z0 + [4] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [2] z0 + [2] z1 + [4] >= [2] z0 + [2] z1 + [1] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) = [2] z0 + [2] z1 + [8] >= [2] z0 + [2] z1 + [5] = c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [2] z0 + [2] z1 + [2] z3 + [5] >= [2] z0 + [2] z3 + [5] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [2] z1 + [5] >= [2] z1 + [4] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [2] z1 + [2] z2 + [2] z4 + [15] >= [2] z1 + [2] z2 + [2] z4 + [12] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [2] z0 + [4] >= [2] z0 + [4] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [2] z0 + [4] >= [0] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [0] >= [0] = c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) = [0] >= [0] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [0] >= [0] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) = [2] z0 + [2] z1 + [4] >= [2] z1 + [2] = c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) = [1] z0 + [1] >= [1] z0 + [0] = c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) = [0] >= [0] = c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) = [1] z0 + [0] >= [1] z0 + [0] = c_38(APPENDREVERSE#(z0,nil())) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [2] >= [1] z0 + [1] z1 + [1] z2 + [2] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [4] >= [1] z0 + [1] z1 + [4] = dequeue(z0,z1) dequeue(z0,z1) = [1] z0 + [1] z1 + [4] >= [1] z0 + [1] z1 + [4] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [6] >= [1] z0 + [1] z1 + [1] z2 + [6] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [4] >= [1] z0 + [4] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [6] >= [1] z0 + [1] z1 + [6] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [4] >= [4] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [2] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [4] >= [1] z0 + [1] z1 + [1] z2 + [4] = tuple#2(z0,::(z2,z1)) reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) *** Step 9.b:1.a:9: NaturalMI. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_3) = {1}, uargs(c_4) = {1}, uargs(c_9) = {1}, uargs(c_15) = {1}, uargs(c_16) = {1}, uargs(c_18) = {1}, uargs(c_20) = {1}, uargs(c_22) = {1}, uargs(c_34) = {1}, uargs(c_35) = {1}, uargs(c_36) = {1}, uargs(c_38) = {1} Following symbols are considered usable: {appendreverse,appendreverse#1,bftMult'#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,reverse,#ADD# ,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE# ,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1#,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5# ,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE#,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT# ,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1#,REVERSE#,appendreverse#,appendreverse#1#,bftMult# ,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1# ,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2# ,matrixMult#,matrixMult#1#,reverse#} TcT has computed the following interpretation: p(#0) = [1] p(#ADD) = [0] p(#MULT) = [0] p(#NATMULT) = [0] p(#PRED) = [0] p(#SUCC) = [0] p(#add) = [1] x1 + [1] p(#mult) = [4] x2 + [0] p(#natmult) = [5] x1 + [0] p(#neg) = [0] p(#pos) = [1] p(#pred) = [2] x1 + [3] p(#s) = [1] p(#succ) = [0] p(*) = [1] x2 + [4] p(*') = [0] p(+) = [1] x1 + [4] p(+') = [0] p(::) = [1] x1 + [1] x2 + [1] p(APPENDREVERSE) = [2] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [2] p(bftMult'#3) = [1] x1 + [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [0] p(c28) = [0] p(c29) = [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [7] x3 + [0] p(computeLine#1) = [4] x1 + [2] x3 + [0] p(computeLine#2) = [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [1] p(enqueue#1) = [1] x1 + [1] x2 + [1] p(leaf) = [4] p(lineMult) = [2] x2 + [1] p(lineMult#1) = [0] p(lineMult#2) = [0] p(matrixMult) = [6] x1 + [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [4] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [1] p(#mult#) = [1] x1 + [1] p(#natmult#) = [1] p(#pred#) = [1] x1 + [1] p(#succ#) = [1] x1 + [0] p(*#) = [4] p(*'#) = [1] p(+#) = [1] x1 + [2] x2 + [2] p(+'#) = [4] x1 + [1] x2 + [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [4] p(BFTMULT'#) = [1] x1 + [3] p(BFTMULT'#1#) = [1] x1 + [1] p(BFTMULT'#2#) = [1] x1 + [2] p(BFTMULT'#3#) = [1] x1 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x3 + [1] p(BFTMULT'#5#) = [1] x1 + [1] x3 + [3] p(COMPUTELINE#) = [1] x2 + [1] p(COMPUTELINE#1#) = [1] x3 + [1] p(COMPUTELINE#2#) = [1] x1 + [0] p(DEQUEUE#) = [1] x1 + [1] x2 + [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [1] p(ENQUEUE#) = [4] x2 + [1] p(ENQUEUE#1#) = [1] p(LINEMULT#) = [1] x1 + [1] x3 + [1] p(LINEMULT#1#) = [1] x1 + [1] x3 + [0] p(LINEMULT#2#) = [1] x2 + [4] x3 + [4] x4 + [0] p(MATRIXMULT#) = [1] x2 + [3] p(MATRIXMULT#1#) = [1] x2 + [3] p(REVERSE#) = [0] p(appendreverse#) = [1] x1 + [0] p(appendreverse#1#) = [4] x2 + [2] p(bftMult#) = [1] x1 + [0] p(bftMult'#) = [4] x1 + [1] x2 + [2] p(bftMult'#1#) = [1] p(bftMult'#2#) = [1] x1 + [4] p(bftMult'#3#) = [4] x1 + [1] x2 + [1] x3 + [4] p(bftMult'#4#) = [1] x1 + [0] p(bftMult'#5#) = [2] x3 + [1] p(computeLine#) = [1] x1 + [1] x2 + [0] p(computeLine#1#) = [1] x1 + [1] x3 + [1] p(computeLine#2#) = [1] x1 + [2] p(dequeue#) = [1] x2 + [1] p(dequeue#1#) = [1] x2 + [0] p(dequeue#2#) = [1] p(enqueue#) = [1] p(enqueue#1#) = [2] x1 + [1] x2 + [0] p(lineMult#) = [1] x2 + [1] x3 + [0] p(lineMult#1#) = [1] x1 + [2] x2 + [2] x3 + [0] p(lineMult#2#) = [1] x3 + [4] p(matrixMult#) = [1] x1 + [2] p(matrixMult#1#) = [1] p(reverse#) = [4] p(c_1) = [1] x1 + [1] p(c_2) = [1] p(c_3) = [2] x1 + [0] p(c_4) = [4] x1 + [0] p(c_5) = [1] p(c_6) = [1] p(c_7) = [4] x2 + [4] p(c_8) = [4] x1 + [2] p(c_9) = [1] x1 + [2] p(c_10) = [1] p(c_11) = [1] p(c_12) = [2] p(c_13) = [0] p(c_14) = [1] x1 + [1] p(c_15) = [1] x1 + [0] p(c_16) = [1] x1 + [0] p(c_17) = [1] p(c_18) = [1] x1 + [0] p(c_19) = [2] p(c_20) = [1] x1 + [0] p(c_21) = [4] p(c_22) = [2] x1 + [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [1] p(c_26) = [4] p(c_27) = [1] p(c_28) = [1] x1 + [1] p(c_29) = [1] p(c_30) = [0] p(c_31) = [1] x1 + [1] p(c_32) = [1] x1 + [0] p(c_33) = [1] p(c_34) = [1] x1 + [0] p(c_35) = [1] x1 + [2] p(c_36) = [1] x1 + [0] p(c_37) = [0] p(c_38) = [4] x1 + [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [1] p(c_42) = [1] x1 + [1] p(c_43) = [1] x1 + [1] x2 + [1] p(c_44) = [1] p(c_45) = [1] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [1] x1 + [0] p(c_50) = [1] p(c_51) = [2] x1 + [1] p(c_52) = [4] p(c_53) = [0] p(c_54) = [1] x2 + [1] x3 + [0] p(c_55) = [0] p(c_56) = [1] p(c_57) = [0] p(c_58) = [1] p(c_59) = [1] p(c_60) = [0] p(c_61) = [0] p(c_62) = [1] p(c_63) = [0] p(c_64) = [4] x1 + [1] p(c_65) = [1] x1 + [2] x2 + [0] p(c_66) = [1] x1 + [1] p(c_67) = [1] x1 + [4] x2 + [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [1] p(c_71) = [0] p(c_72) = [1] x1 + [0] p(c_73) = [1] x1 + [4] p(c_74) = [0] p(c_75) = [0] p(c_76) = [1] p(c_77) = [0] p(c_78) = [4] x2 + [1] p(c_79) = [1] p(c_80) = [1] p(c_81) = [1] p(c_82) = [0] p(c_83) = [4] p(c_84) = [0] p(c_85) = [4] p(c_86) = [2] p(c_87) = [1] p(c_88) = [2] x1 + [1] p(c_89) = [0] p(c_90) = [1] x1 + [0] p(c_91) = [0] p(c_92) = [1] x1 + [1] p(c_93) = [1] x1 + [0] p(c_94) = [4] p(c_95) = [0] p(c_96) = [0] p(c_97) = [1] p(c_98) = [4] x1 + [1] p(c_99) = [2] p(c_100) = [0] p(c_101) = [1] x1 + [1] p(c_102) = [4] x1 + [0] p(c_103) = [0] p(c_104) = [2] x1 + [1] p(c_105) = [1] p(c_106) = [1] p(c_107) = [1] p(c_108) = [4] x1 + [2] p(c_109) = [1] p(c_110) = [1] p(c_111) = [1] x1 + [0] p(c_112) = [1] p(c_113) = [2] x1 + [4] p(c_114) = [1] x1 + [1] p(c_115) = [4] p(c_116) = [4] x2 + [0] p(c_117) = [1] x1 + [0] p(c_118) = [1] x1 + [4] p(c_119) = [4] x1 + [0] p(c_120) = [0] p(c_121) = [1] x1 + [1] Following rules are strictly oriented: COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z3 + [1] > [1] z3 + [0] = c_16(COMPUTELINE#2#(z3,z2,z0,z1)) Following rules are (at-least) weakly oriented: APPENDREVERSE#(z0,z1) = [0] >= [0] = c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) = [0] >= [0] = c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) = [1] z0 + [3] >= [1] z0 + [3] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) = [1] z0 + [3] >= [1] z0 + [2] = BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [0] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [2] = c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z3 + [1] >= [1] z0 + [1] z3 + [1] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [1] z1 + [5] >= [1] z1 + [3] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z0 + [1] z1 + [1] z2 + [1] z4 + [5] >= [1] z0 + [1] z1 + [1] z2 + [1] z4 + [5] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z2 + [3] >= [1] z0 + [3] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z2 + [3] >= [1] z2 + [3] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [1] z1 + [1] >= [1] z1 + [1] = c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [1] >= [1] z1 + [1] = c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) = [1] z0 + [1] z1 + [0] >= [0] = c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) = [0] >= [0] = c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) = [1] z1 + [3] >= [1] z1 + [3] = c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) = [1] z2 + [3] >= [1] z2 + [3] = c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) = [1] z2 + [3] >= [1] z2 + [3] = c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) = [0] >= [0] = c_38(APPENDREVERSE#(z0,nil())) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [1] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [0] = dequeue(z0,z1) dequeue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [1] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [1] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [1] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [1] = tuple#2(z0,::(z2,z1)) reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) *** Step 9.b:1.a:10: EmptyProcessor. WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: APPENDREVERSE#(z0,z1) -> c_3(APPENDREVERSE#1#(z0,z1)) APPENDREVERSE#1#(::(z0,z1),z2) -> c_4(APPENDREVERSE#(z1,::(z0,z2))) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> c_9(DEQUEUE#(z0,z1)) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> c_15(COMPUTELINE#1#(z0,z2,z1)) COMPUTELINE#1#(::(z0,z1),z2,z3) -> c_16(COMPUTELINE#2#(z3,z2,z0,z1)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> c_18(COMPUTELINE#(z4,z1,lineMult(z3,z0,z2))) DEQUEUE#(z0,z1) -> c_20(DEQUEUE#1#(z0,z1)) DEQUEUE#1#(nil(),z0) -> c_22(REVERSE#(z0)) MATRIXMULT#(z0,z1) -> c_34(MATRIXMULT#1#(z0,z1)) MATRIXMULT#1#(::(z0,z1),z2) -> c_35(COMPUTELINE#(z0,z2,nil())) MATRIXMULT#1#(::(z0,z1),z2) -> c_36(MATRIXMULT#(z1,z2)) REVERSE#(z0) -> c_38(APPENDREVERSE#(z0,nil())) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). *** Step 9.b:1.b:1: RemoveWeakSuffixes. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) - Weak DPs: APPENDREVERSE#(z0,z1) -> APPENDREVERSE#1#(z0,z1) APPENDREVERSE#1#(::(z0,z1),z2) -> APPENDREVERSE#(z1,::(z0,z2)) BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#2#(tuple#2(z0,z1)) -> DEQUEUE#(z0,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2) DEQUEUE#(z0,z1) -> DEQUEUE#1#(z0,z1) DEQUEUE#1#(nil(),z0) -> REVERSE#(z0) MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2) REVERSE#(z0) -> APPENDREVERSE#(z0,nil()) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) -->_1 LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)):2 2:S:LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) -->_1 LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())):4 -->_1 LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)):3 3:S:LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):1 4:S:LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):1 5:W:APPENDREVERSE#(z0,z1) -> APPENDREVERSE#1#(z0,z1) -->_1 APPENDREVERSE#1#(::(z0,z1),z2) -> APPENDREVERSE#(z1,::(z0,z2)):6 6:W:APPENDREVERSE#1#(::(z0,z1),z2) -> APPENDREVERSE#(z1,::(z0,z2)) -->_1 APPENDREVERSE#(z0,z1) -> APPENDREVERSE#1#(z0,z1):5 7:W:BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) -->_1 BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1):9 8:W:BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) -->_1 BFTMULT'#2#(tuple#2(z0,z1)) -> DEQUEUE#(z0,z1):10 9:W:BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) -->_1 BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3):11 10:W:BFTMULT'#2#(tuple#2(z0,z1)) -> DEQUEUE#(z0,z1) -->_1 DEQUEUE#(z0,z1) -> DEQUEUE#1#(z0,z1):20 11:W:BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) -->_1 BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0):13 -->_1 BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0):12 12:W:BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0):8 -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1):7 13:W:BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) -->_1 BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2):15 -->_1 BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)):14 14:W:BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0):8 -->_1 BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1):7 15:W:BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) -->_1 MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1):22 16:W:COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1) -->_1 COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1):17 17:W:COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1) -->_1 COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2):19 -->_1 COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)):18 18:W:COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) -->_1 COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1):16 19:W:COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2) -->_1 LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)):1 20:W:DEQUEUE#(z0,z1) -> DEQUEUE#1#(z0,z1) -->_1 DEQUEUE#1#(nil(),z0) -> REVERSE#(z0):21 21:W:DEQUEUE#1#(nil(),z0) -> REVERSE#(z0) -->_1 REVERSE#(z0) -> APPENDREVERSE#(z0,nil()):25 22:W:MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1) -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2):24 -->_1 MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()):23 23:W:MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()) -->_1 COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1):16 24:W:MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2) -->_1 MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1):22 25:W:REVERSE#(z0) -> APPENDREVERSE#(z0,nil()) -->_1 APPENDREVERSE#(z0,z1) -> APPENDREVERSE#1#(z0,z1):5 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 8: BFTMULT'#(z0,z1) -> BFTMULT'#2#(z0) 10: BFTMULT'#2#(tuple#2(z0,z1)) -> DEQUEUE#(z0,z1) 20: DEQUEUE#(z0,z1) -> DEQUEUE#1#(z0,z1) 21: DEQUEUE#1#(nil(),z0) -> REVERSE#(z0) 25: REVERSE#(z0) -> APPENDREVERSE#(z0,nil()) 5: APPENDREVERSE#(z0,z1) -> APPENDREVERSE#1#(z0,z1) 6: APPENDREVERSE#1#(::(z0,z1),z2) -> APPENDREVERSE#(z1,::(z0,z2)) *** Step 9.b:1.b:2: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) - Weak DPs: BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2) MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(COMPUTELINE#) = {3}, uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_31) = {1}, uargs(c_33) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [2] x1 + [0] p(#MULT) = [1] x1 + [1] x2 + [1] p(#NATMULT) = [1] x2 + [0] p(#PRED) = [2] x1 + [0] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [1] x2 + [0] p(+) = [1] x1 + [1] x2 + [0] p(+') = [0] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [1] x1 + [0] p(BFTMULT'#1) = [1] x1 + [0] p(BFTMULT'#2) = [2] x1 + [1] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [2] p(BFTMULT'#5) = [2] p(COMPUTELINE) = [1] x1 + [0] p(COMPUTELINE#1) = [1] x2 + [0] p(COMPUTELINE#2) = [2] x3 + [1] p(DEQUEUE) = [0] p(DEQUEUE#1) = [1] x1 + [1] p(DEQUEUE#2) = [2] x1 + [0] p(ENQUEUE) = [1] x1 + [2] p(ENQUEUE#1) = [0] p(LINEMULT) = [1] p(LINEMULT#1) = [0] p(LINEMULT#2) = [1] x3 + [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x1 + [1] x3 + [0] p(computeLine#1) = [1] x1 + [1] x2 + [0] p(computeLine#2) = [1] x2 + [1] x4 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [2] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [1] x1 + [0] p(matrixMult#1) = [1] x1 + [0] p(nil) = [0] p(node) = [1] x2 + [1] x3 + [1] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [1] x1 + [1] x2 + [0] p(#natmult#) = [0] p(#pred#) = [2] p(#succ#) = [1] x1 + [1] p(*#) = [1] x2 + [2] p(*'#) = [2] p(+#) = [1] x2 + [0] p(+'#) = [1] p(APPENDREVERSE#) = [2] x1 + [2] x2 + [0] p(APPENDREVERSE#1#) = [2] x2 + [0] p(BFTMULT#) = [1] x1 + [1] p(BFTMULT'#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#2#) = [0] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#5#) = [1] x1 + [1] x2 + [0] p(COMPUTELINE#) = [1] x3 + [0] p(COMPUTELINE#1#) = [1] x2 + [0] p(COMPUTELINE#2#) = [1] x2 + [0] p(DEQUEUE#) = [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [0] p(LINEMULT#1#) = [0] p(LINEMULT#2#) = [2] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [0] p(dequeue#) = [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [0] p(enqueue#1#) = [0] p(lineMult#) = [0] p(lineMult#1#) = [0] p(lineMult#2#) = [0] p(matrixMult#) = [0] p(matrixMult#1#) = [0] p(reverse#) = [0] p(c_1) = [0] p(c_2) = [0] p(c_3) = [0] p(c_4) = [0] p(c_5) = [0] p(c_6) = [0] p(c_7) = [0] p(c_8) = [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [0] p(c_14) = [0] p(c_15) = [0] p(c_16) = [0] p(c_17) = [0] p(c_18) = [0] p(c_19) = [0] p(c_20) = [0] p(c_21) = [0] p(c_22) = [0] p(c_23) = [0] p(c_24) = [0] p(c_25) = [0] p(c_26) = [0] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [0] p(c_31) = [1] x1 + [0] p(c_32) = [2] p(c_33) = [1] x1 + [1] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [0] p(c_39) = [0] p(c_40) = [0] p(c_41) = [0] p(c_42) = [0] p(c_43) = [0] p(c_44) = [0] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [0] p(c_51) = [0] p(c_52) = [0] p(c_53) = [0] p(c_54) = [0] p(c_55) = [0] p(c_56) = [0] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [2] p(c_62) = [0] p(c_63) = [0] p(c_64) = [0] p(c_65) = [0] p(c_66) = [0] p(c_67) = [0] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [0] p(c_72) = [0] p(c_73) = [0] p(c_74) = [0] p(c_75) = [0] p(c_76) = [0] p(c_77) = [0] p(c_78) = [0] p(c_79) = [0] p(c_80) = [0] p(c_81) = [0] p(c_82) = [0] p(c_83) = [0] p(c_84) = [0] p(c_85) = [0] p(c_86) = [2] p(c_87) = [1] p(c_88) = [1] p(c_89) = [2] x1 + [1] p(c_90) = [1] x1 + [0] p(c_91) = [2] p(c_92) = [0] p(c_93) = [2] x2 + [2] p(c_94) = [1] p(c_95) = [2] p(c_96) = [0] p(c_97) = [0] p(c_98) = [2] x1 + [0] p(c_99) = [2] x1 + [0] p(c_100) = [2] x2 + [1] p(c_101) = [1] x1 + [0] p(c_102) = [0] p(c_103) = [2] p(c_104) = [0] p(c_105) = [1] p(c_106) = [2] x1 + [2] p(c_107) = [0] p(c_108) = [1] x1 + [2] p(c_109) = [2] p(c_110) = [2] p(c_111) = [1] x1 + [0] p(c_112) = [0] p(c_113) = [2] p(c_114) = [0] p(c_115) = [1] p(c_116) = [1] x2 + [1] x3 + [0] p(c_117) = [1] x2 + [0] p(c_118) = [0] p(c_119) = [2] x1 + [2] x2 + [0] p(c_120) = [0] p(c_121) = [2] Following rules are strictly oriented: LINEMULT#2#(::(z0,z1),z2,z3,z4) = [2] > [0] = c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) = [2] > [1] = c_33(LINEMULT#(z0,z2,nil())) Following rules are (at-least) weakly oriented: BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [0] >= [1] z0 + [1] z2 + [1] z3 + [0] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [2] >= [1] z0 + [1] z1 + [0] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z1 + [1] z2 + [1] z3 + [1] z4 + [1] >= [1] z1 + [1] z2 + [1] z3 + [1] z4 + [0] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [1] z1 + [0] >= [0] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [0] = LINEMULT#(z3,z0,z2) LINEMULT#(z0,z1,z2) = [0] >= [0] = c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) = [0] >= [2] = c_28(LINEMULT#2#(z2,z3,z0,z1)) MATRIXMULT#(z0,z1) = [0] >= [0] = MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = MATRIXMULT#(z1,z2) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [0] >= [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [0] >= [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [0] >= [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [0] >= [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z0 + [1] z2 + [0] >= [1] z0 + [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z1 + [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [1] z4 + [0] >= [1] z2 + [1] z4 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [1] z2 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 9.b:1.b:3: WeightGap. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) - Weak DPs: BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: WeightGap {wgDimension = 1, wgDegree = 1, wgKind = Algebraic, wgUArgs = UArgs, wgOn = WgOnAny} + Details: The weightgap principle applies using the following constant growth matrix-interpretation: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(#add) = {2}, uargs(#neg) = {1}, uargs(#pos) = {1}, uargs(#pred) = {1}, uargs(#succ) = {1}, uargs(+) = {1}, uargs(::) = {1,2}, uargs(computeLine) = {3}, uargs(dequeue#2) = {1}, uargs(enqueue) = {2}, uargs(BFTMULT'#) = {2}, uargs(BFTMULT'#1#) = {1}, uargs(BFTMULT'#5#) = {1}, uargs(COMPUTELINE#) = {3}, uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_31) = {1}, uargs(c_33) = {1} Following symbols are considered usable: all TcT has computed the following interpretation: p(#0) = [0] p(#ADD) = [2] x2 + [0] p(#MULT) = [0] p(#NATMULT) = [1] x1 + [0] p(#PRED) = [0] p(#SUCC) = [0] p(#add) = [1] x2 + [0] p(#mult) = [0] p(#natmult) = [0] p(#neg) = [1] x1 + [0] p(#pos) = [1] x1 + [0] p(#pred) = [1] x1 + [0] p(#s) = [1] x1 + [0] p(#succ) = [1] x1 + [0] p(*) = [0] p(*') = [1] x1 + [0] p(+) = [1] x1 + [1] x2 + [0] p(+') = [2] x1 + [1] p(::) = [1] x1 + [1] x2 + [0] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [2] x1 + [0] p(BFTMULT) = [1] p(BFTMULT') = [1] x1 + [1] x2 + [0] p(BFTMULT'#1) = [2] p(BFTMULT'#2) = [1] x1 + [0] p(BFTMULT'#3) = [2] p(BFTMULT'#4) = [2] x3 + [0] p(BFTMULT'#5) = [2] x2 + [1] p(COMPUTELINE) = [2] p(COMPUTELINE#1) = [1] x1 + [2] x2 + [1] x3 + [1] p(COMPUTELINE#2) = [1] x4 + [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [2] p(DEQUEUE#2) = [2] x1 + [2] p(ENQUEUE) = [1] x1 + [1] p(ENQUEUE#1) = [0] p(LINEMULT) = [1] x1 + [2] p(LINEMULT#1) = [2] x1 + [2] x3 + [0] p(LINEMULT#2) = [2] x4 + [0] p(MATRIXMULT) = [2] x1 + [1] p(MATRIXMULT#1) = [1] x1 + [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [2] x1 + [2] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [1] x1 + [0] p(computeLine) = [1] x3 + [0] p(computeLine#1) = [1] x2 + [0] p(computeLine#2) = [1] x2 + [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [0] p(enqueue#1) = [1] x1 + [1] x2 + [0] p(leaf) = [0] p(lineMult) = [1] x3 + [0] p(lineMult#1) = [1] x2 + [0] p(lineMult#2) = [1] x1 + [0] p(matrixMult) = [0] p(matrixMult#1) = [0] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [0] p(#SUCC#) = [0] p(#add#) = [0] p(#mult#) = [0] p(#natmult#) = [0] p(#pred#) = [0] p(#succ#) = [0] p(*#) = [0] p(*'#) = [0] p(+#) = [0] p(+'#) = [0] p(APPENDREVERSE#) = [0] p(APPENDREVERSE#1#) = [2] p(BFTMULT#) = [2] x1 + [1] x2 + [0] p(BFTMULT'#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#1#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#2#) = [0] p(BFTMULT'#3#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#4#) = [1] x1 + [1] x2 + [1] x3 + [0] p(BFTMULT'#5#) = [1] x1 + [2] p(COMPUTELINE#) = [1] x3 + [0] p(COMPUTELINE#1#) = [1] x2 + [0] p(COMPUTELINE#2#) = [1] x2 + [0] p(DEQUEUE#) = [0] p(DEQUEUE#1#) = [0] p(DEQUEUE#2#) = [0] p(ENQUEUE#) = [0] p(ENQUEUE#1#) = [0] p(LINEMULT#) = [0] p(LINEMULT#1#) = [3] p(LINEMULT#2#) = [0] p(MATRIXMULT#) = [0] p(MATRIXMULT#1#) = [0] p(REVERSE#) = [0] p(appendreverse#) = [0] p(appendreverse#1#) = [0] p(bftMult#) = [0] p(bftMult'#) = [0] p(bftMult'#1#) = [0] p(bftMult'#2#) = [0] p(bftMult'#3#) = [1] x1 + [0] p(bftMult'#4#) = [0] p(bftMult'#5#) = [0] p(computeLine#) = [0] p(computeLine#1#) = [0] p(computeLine#2#) = [2] x2 + [2] x3 + [2] p(dequeue#) = [2] x2 + [0] p(dequeue#1#) = [0] p(dequeue#2#) = [0] p(enqueue#) = [2] x2 + [0] p(enqueue#1#) = [0] p(lineMult#) = [1] x1 + [0] p(lineMult#1#) = [2] x1 + [0] p(lineMult#2#) = [0] p(matrixMult#) = [2] x1 + [0] p(matrixMult#1#) = [2] x2 + [1] p(reverse#) = [0] p(c_1) = [1] x1 + [1] p(c_2) = [1] x1 + [2] p(c_3) = [2] x1 + [2] p(c_4) = [0] p(c_5) = [0] p(c_6) = [1] x1 + [0] p(c_7) = [2] x1 + [0] p(c_8) = [2] x1 + [0] p(c_9) = [0] p(c_10) = [0] p(c_11) = [0] p(c_12) = [0] p(c_13) = [2] x1 + [2] p(c_14) = [1] x1 + [0] p(c_15) = [1] x1 + [1] p(c_16) = [1] x1 + [0] p(c_17) = [0] p(c_18) = [1] p(c_19) = [0] p(c_20) = [0] p(c_21) = [1] p(c_22) = [0] p(c_23) = [0] p(c_24) = [2] p(c_25) = [2] p(c_26) = [0] p(c_27) = [1] x1 + [3] p(c_28) = [1] x1 + [2] p(c_29) = [0] p(c_30) = [2] x2 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [2] x1 + [2] p(c_33) = [1] x1 + [0] p(c_34) = [0] p(c_35) = [0] p(c_36) = [0] p(c_37) = [0] p(c_38) = [1] x1 + [2] p(c_39) = [0] p(c_40) = [0] p(c_41) = [2] x2 + [2] p(c_42) = [1] x1 + [1] p(c_43) = [2] p(c_44) = [2] p(c_45) = [0] p(c_46) = [0] p(c_47) = [0] p(c_48) = [0] p(c_49) = [0] p(c_50) = [2] p(c_51) = [0] p(c_52) = [0] p(c_53) = [1] p(c_54) = [2] x1 + [2] x2 + [2] x3 + [0] p(c_55) = [0] p(c_56) = [1] p(c_57) = [0] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [0] p(c_62) = [1] p(c_63) = [1] p(c_64) = [0] p(c_65) = [1] x1 + [2] x2 + [1] p(c_66) = [1] x1 + [0] p(c_67) = [0] p(c_68) = [1] p(c_69) = [1] p(c_70) = [0] p(c_71) = [2] p(c_72) = [1] x1 + [0] p(c_73) = [1] x1 + [1] p(c_74) = [2] p(c_75) = [1] x1 + [1] p(c_76) = [0] p(c_77) = [0] p(c_78) = [2] p(c_79) = [0] p(c_80) = [1] p(c_81) = [0] p(c_82) = [0] p(c_83) = [0] p(c_84) = [1] p(c_85) = [1] p(c_86) = [0] p(c_87) = [1] x1 + [0] p(c_88) = [1] x1 + [2] p(c_89) = [1] p(c_90) = [1] x1 + [0] p(c_91) = [2] p(c_92) = [1] x1 + [2] p(c_93) = [1] x1 + [0] p(c_94) = [0] p(c_95) = [1] x1 + [0] p(c_96) = [0] p(c_97) = [0] p(c_98) = [2] x1 + [0] p(c_99) = [2] x2 + [1] x3 + [0] p(c_100) = [1] x2 + [1] p(c_101) = [1] x1 + [1] p(c_102) = [2] p(c_103) = [0] p(c_104) = [0] p(c_105) = [0] p(c_106) = [0] p(c_107) = [1] p(c_108) = [1] x1 + [0] p(c_109) = [0] p(c_110) = [0] p(c_111) = [1] p(c_112) = [2] p(c_113) = [1] x1 + [1] p(c_114) = [0] p(c_115) = [0] p(c_116) = [1] x1 + [2] x2 + [0] p(c_117) = [1] x2 + [1] p(c_118) = [0] p(c_119) = [1] x2 + [2] p(c_120) = [0] p(c_121) = [0] Following rules are strictly oriented: LINEMULT#1#(::(z0,z1),z2,z3) = [3] > [2] = c_28(LINEMULT#2#(z2,z3,z0,z1)) Following rules are (at-least) weakly oriented: BFTMULT'#(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#1#(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [0] >= [1] z0 + [1] z2 + [1] z3 + [0] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [1] z0 + [1] z1 + [1] z2 + [1] z3 + [1] z4 + [2] >= [1] z1 + [1] z2 + [1] z4 + [2] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [2] >= [1] z0 + [0] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [1] z0 + [2] >= [0] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [0] = LINEMULT#(z3,z0,z2) LINEMULT#(z0,z1,z2) = [0] >= [6] = c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#2#(::(z0,z1),z2,z3,z4) = [0] >= [0] = c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) = [0] >= [0] = c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) = [0] >= [0] = MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) = [0] >= [0] = MATRIXMULT#(z1,z2) #add(#0(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 #add(#neg(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #pred(z0) #add(#neg(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) = [1] z0 + [0] >= [1] z0 + [0] = #succ(z0) #add(#pos(#s(#s(z0))),z1) = [1] z1 + [0] >= [1] z1 + [0] = #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) = [0] >= [0] = #0() #mult(#0(),#neg(z0)) = [0] >= [0] = #0() #mult(#0(),#pos(z0)) = [0] >= [0] = #0() #mult(#neg(z0),#0()) = [0] >= [0] = #0() #mult(#neg(z0),#neg(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) = [0] >= [0] = #0() #mult(#pos(z0),#neg(z1)) = [0] >= [0] = #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) = [0] >= [0] = #pos(#natmult(z0,z1)) #natmult(#0(),z0) = [0] >= [0] = #0() #natmult(#s(z0),z1) = [0] >= [0] = #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) = [0] >= [0] = #neg(#s(#0())) #pred(#neg(#s(z0))) = [1] z0 + [0] >= [1] z0 + [0] = #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) = [0] >= [0] = #0() #pred(#pos(#s(#s(z0)))) = [1] z0 + [0] >= [1] z0 + [0] = #pos(#s(z0)) #succ(#0()) = [0] >= [0] = #pos(#s(#0())) #succ(#neg(#s(#0()))) = [0] >= [0] = #0() #succ(#neg(#s(#s(z0)))) = [1] z0 + [0] >= [1] z0 + [0] = #neg(#s(z0)) #succ(#pos(#s(z0))) = [1] z0 + [0] >= [1] z0 + [0] = #pos(#s(#s(z0))) *(z0,z1) = [0] >= [0] = #mult(z0,z1) +(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z1 + [0] = #add(z0,z1) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue(z0,z1) computeLine(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) = [1] z0 + [0] >= [1] z0 + [0] = z0 computeLine#2(::(z0,z1),z2,z3,z4) = [1] z2 + [0] >= [1] z2 + [0] = computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) = [1] z0 + [0] >= [0] = nil() dequeue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [0] >= [1] z0 + [1] z1 + [1] z2 + [0] = tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) = [1] z2 + [0] >= [1] z2 + [0] = lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) = [1] z0 + [0] >= [0] = nil() lineMult#2(::(z0,z1),z2,z3,z4) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) = [0] >= [0] = ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) = [0] >= [0] = matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) = [0] >= [0] = ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) = [0] >= [0] = nil() reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) Further, it can be verified that all rules not oriented are covered by the weightgap condition. *** Step 9.b:1.b:4: NaturalMI. WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) - Weak DPs: BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: NaturalMI {miDimension = 1, miDegree = 1, miKind = Algebraic, uargs = UArgs, urules = URules, selector = Just any strict-rules} + Details: We apply a matrix interpretation of kind constructor based matrix interpretation: The following argument positions are considered usable: uargs(c_27) = {1}, uargs(c_28) = {1}, uargs(c_31) = {1}, uargs(c_33) = {1} Following symbols are considered usable: {appendreverse,appendreverse#1,bftMult'#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,reverse,#ADD# ,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult#,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE# ,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1#,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5# ,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE#,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT# ,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1#,REVERSE#,appendreverse#,appendreverse#1#,bftMult# ,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5#,computeLine#,computeLine#1# ,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult#,lineMult#1#,lineMult#2# ,matrixMult#,matrixMult#1#,reverse#} TcT has computed the following interpretation: p(#0) = [1] p(#ADD) = [0] p(#MULT) = [0] p(#NATMULT) = [0] p(#PRED) = [0] p(#SUCC) = [0] p(#add) = [0] p(#mult) = [3] x2 + [2] p(#natmult) = [0] p(#neg) = [1] p(#pos) = [1] x1 + [0] p(#pred) = [0] p(#s) = [1] x1 + [0] p(#succ) = [4] x1 + [0] p(*) = [1] x1 + [3] x2 + [1] p(*') = [0] p(+) = [1] x1 + [6] p(+') = [0] p(::) = [1] x1 + [1] x2 + [1] p(APPENDREVERSE) = [0] p(APPENDREVERSE#1) = [0] p(BFTMULT) = [0] p(BFTMULT') = [0] p(BFTMULT'#1) = [0] p(BFTMULT'#2) = [0] p(BFTMULT'#3) = [0] p(BFTMULT'#4) = [0] p(BFTMULT'#5) = [0] p(COMPUTELINE) = [0] p(COMPUTELINE#1) = [0] p(COMPUTELINE#2) = [0] p(DEQUEUE) = [0] p(DEQUEUE#1) = [0] p(DEQUEUE#2) = [0] p(ENQUEUE) = [0] p(ENQUEUE#1) = [0] p(LINEMULT) = [0] p(LINEMULT#1) = [0] p(LINEMULT#2) = [0] p(MATRIXMULT) = [0] p(MATRIXMULT#1) = [0] p(REVERSE) = [0] p(appendreverse) = [1] x1 + [1] x2 + [0] p(appendreverse#1) = [1] x1 + [1] x2 + [0] p(bftMult) = [0] p(bftMult') = [0] p(bftMult'#1) = [0] p(bftMult'#2) = [1] x1 + [0] p(bftMult'#3) = [0] p(bftMult'#4) = [0] p(bftMult'#5) = [0] p(c) = [0] p(c1) = [1] x1 + [0] p(c10) = [1] x1 + [0] p(c11) = [0] p(c12) = [1] x1 + [0] p(c13) = [1] x1 + [0] p(c14) = [0] p(c15) = [1] x1 + [1] x2 + [0] p(c16) = [0] p(c17) = [0] p(c18) = [0] p(c19) = [0] p(c2) = [1] x1 + [1] x2 + [0] p(c20) = [0] p(c21) = [0] p(c22) = [0] p(c23) = [0] p(c24) = [1] x1 + [0] p(c25) = [1] x1 + [0] p(c26) = [1] x1 + [0] p(c27) = [1] x1 + [0] p(c28) = [0] p(c29) = [1] x1 + [0] p(c3) = [1] x1 + [0] p(c30) = [1] x1 + [1] x2 + [0] p(c31) = [1] x1 + [0] p(c32) = [1] x1 + [0] p(c33) = [1] x1 + [0] p(c34) = [0] p(c35) = [1] x1 + [0] p(c36) = [1] x1 + [1] x2 + [1] x3 + [0] p(c37) = [1] x1 + [1] x2 + [0] p(c38) = [1] x1 + [0] p(c39) = [1] x1 + [0] p(c4) = [1] x1 + [1] x2 + [0] p(c40) = [0] p(c41) = [1] x1 + [1] x2 + [0] p(c42) = [0] p(c43) = [1] x1 + [0] p(c44) = [0] p(c45) = [1] x1 + [1] x2 + [0] p(c46) = [0] p(c47) = [0] p(c48) = [1] x1 + [0] p(c49) = [0] p(c5) = [0] p(c50) = [1] x1 + [0] p(c51) = [1] x1 + [0] p(c52) = [0] p(c53) = [1] x1 + [1] x2 + [0] p(c54) = [1] x1 + [0] p(c55) = [1] x1 + [0] p(c56) = [1] x1 + [0] p(c57) = [1] x1 + [0] p(c58) = [1] x1 + [0] p(c59) = [1] x1 + [0] p(c6) = [0] p(c60) = [0] p(c61) = [1] x1 + [0] p(c7) = [0] p(c8) = [0] p(c9) = [0] p(computeLine) = [2] x1 + [5] p(computeLine#1) = [0] p(computeLine#2) = [0] p(dequeue) = [1] x1 + [1] x2 + [0] p(dequeue#1) = [1] x1 + [1] x2 + [0] p(dequeue#2) = [1] x1 + [0] p(enqueue) = [1] x1 + [1] x2 + [1] p(enqueue#1) = [1] x1 + [1] x2 + [1] p(leaf) = [1] p(lineMult) = [5] x1 + [0] p(lineMult#1) = [0] p(lineMult#2) = [0] p(matrixMult) = [0] p(matrixMult#1) = [7] p(nil) = [0] p(node) = [1] x1 + [1] x2 + [1] x3 + [2] p(reverse) = [1] x1 + [0] p(tuple#2) = [1] x1 + [1] x2 + [0] p(#ADD#) = [0] p(#MULT#) = [0] p(#NATMULT#) = [0] p(#PRED#) = [2] p(#SUCC#) = [2] p(#add#) = [1] x1 + [1] p(#mult#) = [1] x2 + [0] p(#natmult#) = [1] p(#pred#) = [1] p(#succ#) = [2] p(*#) = [2] p(*'#) = [1] x2 + [4] p(+#) = [1] x1 + [1] x2 + [0] p(+'#) = [4] x1 + [1] p(APPENDREVERSE#) = [1] p(APPENDREVERSE#1#) = [0] p(BFTMULT#) = [1] x1 + [1] x2 + [0] p(BFTMULT'#) = [4] x1 + [0] p(BFTMULT'#1#) = [4] x1 + [0] p(BFTMULT'#2#) = [0] p(BFTMULT'#3#) = [4] x1 + [4] x3 + [0] p(BFTMULT'#4#) = [4] x1 + [4] x3 + [1] p(BFTMULT'#5#) = [4] x1 + [4] x3 + [1] p(COMPUTELINE#) = [4] x2 + [0] p(COMPUTELINE#1#) = [4] x3 + [0] p(COMPUTELINE#2#) = [4] x1 + [0] p(DEQUEUE#) = [2] x2 + [1] p(DEQUEUE#1#) = [1] x1 + [1] p(DEQUEUE#2#) = [1] p(ENQUEUE#) = [1] x2 + [0] p(ENQUEUE#1#) = [1] x1 + [0] p(LINEMULT#) = [2] x2 + [1] p(LINEMULT#1#) = [2] x1 + [0] p(LINEMULT#2#) = [2] x3 + [2] x4 + [1] p(MATRIXMULT#) = [4] x2 + [0] p(MATRIXMULT#1#) = [4] x2 + [0] p(REVERSE#) = [1] p(appendreverse#) = [2] x1 + [4] p(appendreverse#1#) = [4] p(bftMult#) = [1] x1 + [1] x2 + [0] p(bftMult'#) = [0] p(bftMult'#1#) = [2] p(bftMult'#2#) = [2] x1 + [0] p(bftMult'#3#) = [4] x1 + [4] x3 + [1] p(bftMult'#4#) = [1] x1 + [2] p(bftMult'#5#) = [0] p(computeLine#) = [1] x3 + [1] p(computeLine#1#) = [1] x3 + [1] p(computeLine#2#) = [2] x3 + [0] p(dequeue#) = [0] p(dequeue#1#) = [1] x1 + [1] p(dequeue#2#) = [2] x1 + [0] p(enqueue#) = [4] x1 + [0] p(enqueue#1#) = [2] x1 + [1] x2 + [1] p(lineMult#) = [1] p(lineMult#1#) = [1] x1 + [0] p(lineMult#2#) = [1] x3 + [1] p(matrixMult#) = [4] x1 + [1] p(matrixMult#1#) = [2] x1 + [4] x2 + [1] p(reverse#) = [2] p(c_1) = [1] p(c_2) = [4] x1 + [2] p(c_3) = [1] p(c_4) = [1] x1 + [1] p(c_5) = [2] p(c_6) = [1] p(c_7) = [0] p(c_8) = [4] p(c_9) = [1] x1 + [2] p(c_10) = [1] p(c_11) = [1] p(c_12) = [0] p(c_13) = [1] x1 + [1] p(c_14) = [2] x2 + [2] p(c_15) = [0] p(c_16) = [1] x1 + [1] p(c_17) = [4] p(c_18) = [1] x1 + [1] x2 + [4] p(c_19) = [4] p(c_20) = [2] p(c_21) = [1] p(c_22) = [1] p(c_23) = [2] p(c_24) = [0] p(c_25) = [4] p(c_26) = [1] p(c_27) = [1] x1 + [0] p(c_28) = [1] x1 + [0] p(c_29) = [0] p(c_30) = [4] x2 + [0] p(c_31) = [1] x1 + [0] p(c_32) = [1] p(c_33) = [1] x1 + [0] p(c_34) = [1] x1 + [0] p(c_35) = [0] p(c_36) = [2] x1 + [2] p(c_37) = [1] p(c_38) = [1] x1 + [1] p(c_39) = [0] p(c_40) = [1] x1 + [0] p(c_41) = [0] p(c_42) = [2] x1 + [0] p(c_43) = [4] x2 + [4] x3 + [1] p(c_44) = [1] p(c_45) = [0] p(c_46) = [2] p(c_47) = [0] p(c_48) = [2] p(c_49) = [1] x1 + [0] p(c_50) = [0] p(c_51) = [4] p(c_52) = [2] x1 + [1] p(c_53) = [0] p(c_54) = [2] x1 + [2] x2 + [4] x3 + [0] p(c_55) = [1] p(c_56) = [1] p(c_57) = [1] p(c_58) = [0] p(c_59) = [0] p(c_60) = [0] p(c_61) = [2] p(c_62) = [1] p(c_63) = [0] p(c_64) = [2] x1 + [0] p(c_65) = [1] x1 + [4] x2 + [0] p(c_66) = [4] p(c_67) = [4] p(c_68) = [0] p(c_69) = [0] p(c_70) = [0] p(c_71) = [1] p(c_72) = [1] x1 + [0] p(c_73) = [0] p(c_74) = [1] p(c_75) = [1] x1 + [1] p(c_76) = [4] x1 + [0] p(c_77) = [0] p(c_78) = [2] x1 + [2] p(c_79) = [1] p(c_80) = [2] p(c_81) = [1] p(c_82) = [4] p(c_83) = [0] p(c_84) = [0] p(c_85) = [0] p(c_86) = [1] p(c_87) = [0] p(c_88) = [4] p(c_89) = [4] p(c_90) = [1] x1 + [4] p(c_91) = [2] p(c_92) = [4] x1 + [0] p(c_93) = [1] x2 + [0] p(c_94) = [1] p(c_95) = [1] x1 + [2] p(c_96) = [0] p(c_97) = [1] p(c_98) = [4] x1 + [4] p(c_99) = [2] x2 + [1] x3 + [0] p(c_100) = [1] x1 + [4] p(c_101) = [1] x1 + [0] p(c_102) = [0] p(c_103) = [1] p(c_104) = [0] p(c_105) = [0] p(c_106) = [0] p(c_107) = [1] p(c_108) = [4] x2 + [1] p(c_109) = [1] p(c_110) = [0] p(c_111) = [1] x1 + [2] p(c_112) = [0] p(c_113) = [1] x1 + [0] p(c_114) = [1] p(c_115) = [0] p(c_116) = [1] x2 + [1] p(c_117) = [0] p(c_118) = [2] p(c_119) = [1] x1 + [1] p(c_120) = [1] p(c_121) = [1] Following rules are strictly oriented: LINEMULT#(z0,z1,z2) = [2] z1 + [1] > [2] z1 + [0] = c_27(LINEMULT#1#(z1,z2,z0)) Following rules are (at-least) weakly oriented: BFTMULT'#(z0,z1) = [4] z0 + [0] >= [4] z0 + [0] = BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#1#(tuple#2(z0,z1),z2) = [4] z0 + [4] z1 + [0] >= [4] z0 + [4] z1 + [0] = BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) = [4] z0 + [4] z1 + [4] z3 + [4] >= [4] z0 + [4] z3 + [1] = BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) = [4] z1 + [5] >= [4] z1 + [0] = BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) = [4] z0 + [4] z1 + [4] z2 + [4] z4 + [9] >= [4] z0 + [4] z1 + [4] z2 + [4] z4 + [9] = BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) = [4] z0 + [4] z2 + [1] >= [4] z0 + [0] = BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) = [4] z0 + [4] z2 + [1] >= [4] z2 + [0] = MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) = [4] z1 + [0] >= [4] z1 + [0] = COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) = [4] z3 + [0] >= [4] z3 + [0] = COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [4] z0 + [4] z1 + [4] >= [4] z1 + [0] = COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) = [4] z0 + [4] z1 + [4] >= [2] z0 + [1] = LINEMULT#(z3,z0,z2) LINEMULT#1#(::(z0,z1),z2,z3) = [2] z0 + [2] z1 + [2] >= [2] z0 + [2] z1 + [1] = c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) = [2] z3 + [2] z4 + [1] >= [2] z4 + [1] = c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) = [2] z1 + [2] z2 + [1] >= [2] z2 + [1] = c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) = [4] z1 + [0] >= [4] z1 + [0] = MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) = [4] z2 + [0] >= [4] z2 + [0] = COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) = [4] z2 + [0] >= [4] z2 + [0] = MATRIXMULT#(z1,z2) appendreverse(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [1] = appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = z0 bftMult'#2(tuple#2(z0,z1)) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue(z0,z1) dequeue(z0,z1) = [1] z0 + [1] z1 + [0] >= [1] z0 + [1] z1 + [0] = dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [1] = tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) = [1] z0 + [0] >= [1] z0 + [0] = dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [1] = tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) = [0] >= [0] = tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) = [1] z0 + [1] z1 + [1] >= [1] z0 + [1] z1 + [1] = enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) = [1] z0 + [1] z1 + [1] z2 + [1] >= [1] z0 + [1] z1 + [1] z2 + [1] = tuple#2(z0,::(z2,z1)) reverse(z0) = [1] z0 + [0] >= [1] z0 + [0] = appendreverse(z0,nil()) *** Step 9.b:1.b:5: EmptyProcessor. WORST_CASE(?,O(1)) + Considered Problem: - Weak DPs: BFTMULT'#(z0,z1) -> BFTMULT'#1#(bftMult'#2(z0),z1) BFTMULT'#1#(tuple#2(z0,z1),z2) -> BFTMULT'#3#(z0,z2,z1) BFTMULT'#3#(::(z0,z1),z2,z3) -> BFTMULT'#4#(z0,z2,z3) BFTMULT'#4#(leaf(),z0,z1) -> BFTMULT'#(z1,z0) BFTMULT'#4#(node(z0,z1,z2),z3,z4) -> BFTMULT'#5#(enqueue(z2,enqueue(z1,z4)),z3,z0) BFTMULT'#5#(z0,z1,z2) -> BFTMULT'#(z0,matrixMult(z1,z2)) BFTMULT'#5#(z0,z1,z2) -> MATRIXMULT#(z1,z2) COMPUTELINE#(z0,z1,z2) -> COMPUTELINE#1#(z0,z2,z1) COMPUTELINE#1#(::(z0,z1),z2,z3) -> COMPUTELINE#2#(z3,z2,z0,z1) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> COMPUTELINE#(z4,z1,lineMult(z3,z0,z2)) COMPUTELINE#2#(::(z0,z1),z2,z3,z4) -> LINEMULT#(z3,z0,z2) LINEMULT#(z0,z1,z2) -> c_27(LINEMULT#1#(z1,z2,z0)) LINEMULT#1#(::(z0,z1),z2,z3) -> c_28(LINEMULT#2#(z2,z3,z0,z1)) LINEMULT#2#(::(z0,z1),z2,z3,z4) -> c_31(LINEMULT#(z2,z4,z1)) LINEMULT#2#(nil(),z0,z1,z2) -> c_33(LINEMULT#(z0,z2,nil())) MATRIXMULT#(z0,z1) -> MATRIXMULT#1#(z0,z1) MATRIXMULT#1#(::(z0,z1),z2) -> COMPUTELINE#(z0,z2,nil()) MATRIXMULT#1#(::(z0,z1),z2) -> MATRIXMULT#(z1,z2) - Weak TRS: #add(#0(),z0) -> z0 #add(#neg(#s(#0())),z0) -> #pred(z0) #add(#neg(#s(#s(z0))),z1) -> #pred(#add(#pos(#s(z0)),z1)) #add(#pos(#s(#0())),z0) -> #succ(z0) #add(#pos(#s(#s(z0))),z1) -> #succ(#add(#pos(#s(z0)),z1)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(z0)) -> #0() #mult(#0(),#pos(z0)) -> #0() #mult(#neg(z0),#0()) -> #0() #mult(#neg(z0),#neg(z1)) -> #pos(#natmult(z0,z1)) #mult(#neg(z0),#pos(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#0()) -> #0() #mult(#pos(z0),#neg(z1)) -> #neg(#natmult(z0,z1)) #mult(#pos(z0),#pos(z1)) -> #pos(#natmult(z0,z1)) #natmult(#0(),z0) -> #0() #natmult(#s(z0),z1) -> #add(#pos(z1),#natmult(z0,z1)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) *(z0,z1) -> #mult(z0,z1) +(z0,z1) -> #add(z0,z1) appendreverse(z0,z1) -> appendreverse#1(z0,z1) appendreverse#1(::(z0,z1),z2) -> appendreverse(z1,::(z0,z2)) appendreverse#1(nil(),z0) -> z0 bftMult'#2(tuple#2(z0,z1)) -> dequeue(z0,z1) computeLine(z0,z1,z2) -> computeLine#1(z0,z2,z1) computeLine#1(::(z0,z1),z2,z3) -> computeLine#2(z3,z2,z0,z1) computeLine#1(nil(),z0,z1) -> z0 computeLine#2(::(z0,z1),z2,z3,z4) -> computeLine(z4,z1,lineMult(z3,z0,z2)) computeLine#2(nil(),z0,z1,z2) -> nil() dequeue(z0,z1) -> dequeue#1(z0,z1) dequeue#1(::(z0,z1),z2) -> tuple#2(::(z0,nil()),tuple#2(z1,z2)) dequeue#1(nil(),z0) -> dequeue#2(reverse(z0)) dequeue#2(::(z0,z1)) -> tuple#2(::(z0,nil()),tuple#2(z1,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(z0,z1) -> enqueue#1(z1,z0) enqueue#1(tuple#2(z0,z1),z2) -> tuple#2(z0,::(z2,z1)) lineMult(z0,z1,z2) -> lineMult#1(z1,z2,z0) lineMult#1(::(z0,z1),z2,z3) -> lineMult#2(z2,z3,z0,z1) lineMult#1(nil(),z0,z1) -> nil() lineMult#2(::(z0,z1),z2,z3,z4) -> ::(+(*(z3,z2),z0),lineMult(z2,z4,z1)) lineMult#2(nil(),z0,z1,z2) -> ::(*(z1,z0),lineMult(z0,z2,nil())) matrixMult(z0,z1) -> matrixMult#1(z0,z1) matrixMult#1(::(z0,z1),z2) -> ::(computeLine(z0,z2,nil()),matrixMult(z1,z2)) matrixMult#1(nil(),z0) -> nil() reverse(z0) -> appendreverse(z0,nil()) - Signature: {#ADD/2,#MULT/2,#NATMULT/2,#PRED/1,#SUCC/1,#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,*'/2,+/2,+'/2 ,APPENDREVERSE/2,APPENDREVERSE#1/2,BFTMULT/2,BFTMULT'/2,BFTMULT'#1/2,BFTMULT'#2/1,BFTMULT'#3/3,BFTMULT'#4/3 ,BFTMULT'#5/3,COMPUTELINE/3,COMPUTELINE#1/3,COMPUTELINE#2/4,DEQUEUE/2,DEQUEUE#1/2,DEQUEUE#2/1,ENQUEUE/2 ,ENQUEUE#1/2,LINEMULT/3,LINEMULT#1/3,LINEMULT#2/4,MATRIXMULT/2,MATRIXMULT#1/2,REVERSE/1,appendreverse/2 ,appendreverse#1/2,bftMult/2,bftMult'/2,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3 ,computeLine/3,computeLine#1/3,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2 ,lineMult/3,lineMult#1/3,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#ADD#/2,#MULT#/2,#NATMULT#/2 ,#PRED#/1,#SUCC#/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,*'#/2,+#/2,+'#/2,APPENDREVERSE#/2 ,APPENDREVERSE#1#/2,BFTMULT#/2,BFTMULT'#/2,BFTMULT'#1#/2,BFTMULT'#2#/1,BFTMULT'#3#/3,BFTMULT'#4#/3 ,BFTMULT'#5#/3,COMPUTELINE#/3,COMPUTELINE#1#/3,COMPUTELINE#2#/4,DEQUEUE#/2,DEQUEUE#1#/2,DEQUEUE#2#/1 ,ENQUEUE#/2,ENQUEUE#1#/2,LINEMULT#/3,LINEMULT#1#/3,LINEMULT#2#/4,MATRIXMULT#/2,MATRIXMULT#1#/2,REVERSE#/1 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,c/0,c1/1,c10/1,c11/0,c12/1,c13/1,c14/0,c15/2,c16/0,c17/0,c18/0 ,c19/0,c2/2,c20/0,c21/0,c22/0,c23/0,c24/1,c25/1,c26/1,c27/1,c28/0,c29/1,c3/1,c30/2,c31/1,c32/1,c33/1,c34/0 ,c35/1,c36/3,c37/2,c38/1,c39/1,c4/2,c40/0,c41/2,c42/0,c43/1,c44/0,c45/2,c46/0,c47/0,c48/1,c49/0,c5/0,c50/1 ,c51/1,c52/0,c53/2,c54/1,c55/1,c56/1,c57/1,c58/1,c59/1,c6/0,c60/0,c61/1,c7/0,c8/0,c9/1,leaf/0,nil/0,node/3 ,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1 ,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3 ,c_31/1,c_32/1,c_33/1,c_34/1,c_35/1,c_36/1,c_37/0,c_38/1,c_39/0,c_40/1,c_41/3,c_42/1,c_43/3,c_44/0,c_45/0 ,c_46/0,c_47/0,c_48/1,c_49/1,c_50/0,c_51/1,c_52/1,c_53/0,c_54/3,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0,c_60/0 ,c_61/0,c_62/0,c_63/0,c_64/1,c_65/2,c_66/1,c_67/2,c_68/0,c_69/0,c_70/0,c_71/0,c_72/1,c_73/1,c_74/0,c_75/1 ,c_76/1,c_77/0,c_78/2,c_79/0,c_80/0,c_81/0,c_82/0,c_83/0,c_84/0,c_85/0,c_86/0,c_87/1,c_88/1,c_89/1,c_90/1 ,c_91/0,c_92/1,c_93/2,c_94/1,c_95/1,c_96/1,c_97/0,c_98/1,c_99/3,c_100/2,c_101/1,c_102/1,c_103/0,c_104/2 ,c_105/0,c_106/1,c_107/0,c_108/2,c_109/0,c_110/0,c_111/1,c_112/0,c_113/1,c_114/1,c_115/0,c_116/3,c_117/2 ,c_118/1,c_119/2,c_120/0,c_121/1} - Obligation: innermost runtime complexity wrt. defined symbols {#ADD#,#MULT#,#NATMULT#,#PRED#,#SUCC#,#add#,#mult# ,#natmult#,#pred#,#succ#,*#,*'#,+#,+'#,APPENDREVERSE#,APPENDREVERSE#1#,BFTMULT#,BFTMULT'#,BFTMULT'#1# ,BFTMULT'#2#,BFTMULT'#3#,BFTMULT'#4#,BFTMULT'#5#,COMPUTELINE#,COMPUTELINE#1#,COMPUTELINE#2#,DEQUEUE# ,DEQUEUE#1#,DEQUEUE#2#,ENQUEUE#,ENQUEUE#1#,LINEMULT#,LINEMULT#1#,LINEMULT#2#,MATRIXMULT#,MATRIXMULT#1# ,REVERSE#,appendreverse#,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4# ,bftMult'#5#,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1# ,lineMult#,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,:: ,c,c1,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c2,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c3,c30,c31,c32,c33 ,c34,c35,c36,c37,c38,c39,c4,c40,c41,c42,c43,c44,c45,c46,c47,c48,c49,c5,c50,c51,c52,c53,c54,c55,c56,c57,c58 ,c59,c6,c60,c61,c7,c8,c9,leaf,nil,node,tuple#2} + Applied Processor: EmptyProcessor + Details: The problem is already closed. The intended complexity is O(1). WORST_CASE(?,O(n^3))