(0) Obligation:

The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, n^2).


The TRS R consists of the following rules:

*(@x, @y) → #mult(@x, @y)
+(@x, @y) → #add(@x, @y)
computeLine(@line, @m, @acc) → computeLine#1(@line, @acc, @m)
computeLine#1(::(@x, @xs), @acc, @m) → computeLine#2(@m, @acc, @x, @xs)
computeLine#1(nil, @acc, @m) → @acc
computeLine#2(::(@l, @ls), @acc, @x, @xs) → computeLine(@xs, @ls, lineMult(@x, @l, @acc))
computeLine#2(nil, @acc, @x, @xs) → nil
lineMult(@n, @l1, @l2) → lineMult#1(@l1, @l2, @n)
lineMult#1(::(@x, @xs), @l2, @n) → lineMult#2(@l2, @n, @x, @xs)
lineMult#1(nil, @l2, @n) → nil
lineMult#2(::(@y, @ys), @n, @x, @xs) → ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys))
lineMult#2(nil, @n, @x, @xs) → ::(*(@x, @n), lineMult(@n, @xs, nil))
matrixMult(@m1, @m2) → matrixMult#1(@m1, @m2)
matrixMult#1(::(@l, @ls), @m2) → ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2))
matrixMult#1(nil, @m2) → nil

The (relative) TRS S consists of the following rules:

#add(#0, @y) → @y
#add(#neg(#s(#0)), @y) → #pred(@y)
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y))
#add(#pos(#s(#0)), @y) → #succ(@y)
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y))
#mult(#0, #0) → #0
#mult(#0, #neg(@y)) → #0
#mult(#0, #pos(@y)) → #0
#mult(#neg(@x), #0) → #0
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y))
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #0) → #0
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y))
#natmult(#0, @y) → #0
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y))
#pred(#0) → #neg(#s(#0))
#pred(#neg(#s(@x))) → #neg(#s(#s(@x)))
#pred(#pos(#s(#0))) → #0
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x))
#succ(#0) → #pos(#s(#0))
#succ(#neg(#s(#0))) → #0
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x))
#succ(#pos(#s(@x))) → #pos(#s(#s(@x)))

Rewrite Strategy: INNERMOST

(1) RelTrsToTrsProof (UPPER BOUND(ID) transformation)

transformed relative TRS to TRS

(2) Obligation:

The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^2).


The TRS R consists of the following rules:

*(@x, @y) → #mult(@x, @y)
+(@x, @y) → #add(@x, @y)
computeLine(@line, @m, @acc) → computeLine#1(@line, @acc, @m)
computeLine#1(::(@x, @xs), @acc, @m) → computeLine#2(@m, @acc, @x, @xs)
computeLine#1(nil, @acc, @m) → @acc
computeLine#2(::(@l, @ls), @acc, @x, @xs) → computeLine(@xs, @ls, lineMult(@x, @l, @acc))
computeLine#2(nil, @acc, @x, @xs) → nil
lineMult(@n, @l1, @l2) → lineMult#1(@l1, @l2, @n)
lineMult#1(::(@x, @xs), @l2, @n) → lineMult#2(@l2, @n, @x, @xs)
lineMult#1(nil, @l2, @n) → nil
lineMult#2(::(@y, @ys), @n, @x, @xs) → ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys))
lineMult#2(nil, @n, @x, @xs) → ::(*(@x, @n), lineMult(@n, @xs, nil))
matrixMult(@m1, @m2) → matrixMult#1(@m1, @m2)
matrixMult#1(::(@l, @ls), @m2) → ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2))
matrixMult#1(nil, @m2) → nil
#add(#0, @y) → @y
#add(#neg(#s(#0)), @y) → #pred(@y)
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y))
#add(#pos(#s(#0)), @y) → #succ(@y)
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y))
#mult(#0, #0) → #0
#mult(#0, #neg(@y)) → #0
#mult(#0, #pos(@y)) → #0
#mult(#neg(@x), #0) → #0
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y))
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #0) → #0
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y))
#natmult(#0, @y) → #0
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y))
#pred(#0) → #neg(#s(#0))
#pred(#neg(#s(@x))) → #neg(#s(#s(@x)))
#pred(#pos(#s(#0))) → #0
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x))
#succ(#0) → #pos(#s(#0))
#succ(#neg(#s(#0))) → #0
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x))
#succ(#pos(#s(@x))) → #pos(#s(#s(@x)))

Rewrite Strategy: INNERMOST

(3) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID) transformation)

Converted Cpx (relative) TRS to CDT

(4) Obligation:

Complexity Dependency Tuples Problem
Rules:

*(z0, z1) → #mult(z0, z1)
+(z0, z1) → #add(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
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
#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)))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#1(nil, z0, z1) → c4
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE#2(nil, z0, z1, z2) → c6
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#1(nil, z0, z1) → c9
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
MATRIXMULT#1(nil, z0) → c14
#ADD(#0, z0) → c15
#ADD(#neg(#s(#0)), z0) → c16(#PRED(z0))
#ADD(#neg(#s(#s(z0))), z1) → c17(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#0)), z0) → c18(#SUCC(z0))
#ADD(#pos(#s(#s(z0))), z1) → c19(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#MULT(#0, #0) → c20
#MULT(#0, #neg(z0)) → c21
#MULT(#0, #pos(z0)) → c22
#MULT(#neg(z0), #0) → c23
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #0) → c26
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#0, z0) → c29
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#PRED(#0) → c31
#PRED(#neg(#s(z0))) → c32
#PRED(#pos(#s(#0))) → c33
#PRED(#pos(#s(#s(z0)))) → c34
#SUCC(#0) → c35
#SUCC(#neg(#s(#0))) → c36
#SUCC(#neg(#s(#s(z0)))) → c37
#SUCC(#pos(#s(z0))) → c38
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#1(nil, z0, z1) → c4
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE#2(nil, z0, z1, z2) → c6
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#1(nil, z0, z1) → c9
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
MATRIXMULT#1(nil, z0) → c14
#ADD(#0, z0) → c15
#ADD(#neg(#s(#0)), z0) → c16(#PRED(z0))
#ADD(#neg(#s(#s(z0))), z1) → c17(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#0)), z0) → c18(#SUCC(z0))
#ADD(#pos(#s(#s(z0))), z1) → c19(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#MULT(#0, #0) → c20
#MULT(#0, #neg(z0)) → c21
#MULT(#0, #pos(z0)) → c22
#MULT(#neg(z0), #0) → c23
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #0) → c26
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#0, z0) → c29
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#PRED(#0) → c31
#PRED(#neg(#s(z0))) → c32
#PRED(#pos(#s(#0))) → c33
#PRED(#pos(#s(#s(z0)))) → c34
#SUCC(#0) → c35
#SUCC(#neg(#s(#0))) → c36
#SUCC(#neg(#s(#s(z0)))) → c37
#SUCC(#pos(#s(z0))) → c38
K tuples:none
Defined Rule Symbols:

*, +, computeLine, computeLine#1, computeLine#2, lineMult, lineMult#1, lineMult#2, matrixMult, matrixMult#1, #add, #mult, #natmult, #pred, #succ

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #ADD, #MULT, #NATMULT, #PRED, #SUCC

Compound Symbols:

c, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38

(5) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID) transformation)

Removed 21 trailing nodes:

#MULT(#0, #neg(z0)) → c21
#SUCC(#0) → c35
#PRED(#0) → c31
#MULT(#0, #0) → c20
#SUCC(#neg(#s(#0))) → c36
#PRED(#pos(#s(#s(z0)))) → c34
#MULT(#neg(z0), #0) → c23
COMPUTELINE#1(nil, z0, z1) → c4
#MULT(#pos(z0), #0) → c26
COMPUTELINE#2(nil, z0, z1, z2) → c6
#ADD(#0, z0) → c15
#SUCC(#pos(#s(z0))) → c38
#PRED(#neg(#s(z0))) → c32
MATRIXMULT#1(nil, z0) → c14
#MULT(#0, #pos(z0)) → c22
#PRED(#pos(#s(#0))) → c33
#NATMULT(#0, z0) → c29
LINEMULT#1(nil, z0, z1) → c9
#ADD(#neg(#s(#0)), z0) → c16(#PRED(z0))
#SUCC(#neg(#s(#s(z0)))) → c37
#ADD(#pos(#s(#0)), z0) → c18(#SUCC(z0))

(6) Obligation:

Complexity Dependency Tuples Problem
Rules:

*(z0, z1) → #mult(z0, z1)
+(z0, z1) → #add(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
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
#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)))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#ADD(#neg(#s(#s(z0))), z1) → c17(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#ADD(#neg(#s(#s(z0))), z1) → c17(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
K tuples:none
Defined Rule Symbols:

*, +, computeLine, computeLine#1, computeLine#2, lineMult, lineMult#1, lineMult#2, matrixMult, matrixMult#1, #add, #mult, #natmult, #pred, #succ

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #ADD, #MULT, #NATMULT

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c17, c19, c24, c25, c27, c28, c30

(7) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID) transformation)

Removed 2 trailing tuple parts

(8) Obligation:

Complexity Dependency Tuples Problem
Rules:

*(z0, z1) → #mult(z0, z1)
+(z0, z1) → #add(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
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
#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)))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:none
Defined Rule Symbols:

*, +, computeLine, computeLine#1, computeLine#2, lineMult, lineMult#1, lineMult#2, matrixMult, matrixMult#1, #add, #mult, #natmult, #pred, #succ

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(9) CdtUsableRulesProof (EQUIVALENT transformation)

The following rules are not usable and were removed:

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
matrixMult(z0, z1) → matrixMult#1(z0, z1)
matrixMult#1(::(z0, z1), z2) → ::(computeLine(z0, z2, nil), matrixMult(z1, z2))
matrixMult#1(nil, z0) → nil

(10) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:none
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(11) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1)) transformation)

Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
We considered the (Usable) Rules:

#succ(#0) → #pos(#s(#0))
#mult(#neg(z0), #pos(z1)) → #neg(#natmult(z0, z1))
#mult(#pos(z0), #neg(z1)) → #neg(#natmult(z0, z1))
#succ(#neg(#s(#s(z0)))) → #neg(#s(z0))
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#pos(#s(#0)), z0) → #succ(z0)
#mult(#pos(z0), #pos(z1)) → #pos(#natmult(z0, z1))
#succ(#neg(#s(#0))) → #0
#natmult(#s(z0), z1) → #add(#pos(z1), #natmult(z0, z1))
#mult(#0, #neg(z0)) → #0
#mult(#neg(z0), #0) → #0
#mult(#0, #pos(z0)) → #0
#mult(#neg(z0), #neg(z1)) → #pos(#natmult(z0, z1))
#mult(#pos(z0), #0) → #0
#mult(#0, #0) → #0
*(z0, z1) → #mult(z0, z1)
#natmult(#0, z0) → #0
#succ(#pos(#s(z0))) → #pos(#s(#s(z0)))
And the Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
The order we found is given by the following interpretation:
Polynomial interpretation :

POL(#0) = 0   
POL(#ADD(x1, x2)) = x1   
POL(#MULT(x1, x2)) = 0   
POL(#NATMULT(x1, x2)) = 0   
POL(#add(x1, x2)) = x1 + x2   
POL(#mult(x1, x2)) = 0   
POL(#natmult(x1, x2)) = 0   
POL(#neg(x1)) = x1   
POL(#pos(x1)) = 0   
POL(#pred(x1)) = [1]   
POL(#s(x1)) = [1]   
POL(#succ(x1)) = x1   
POL(*(x1, x2)) = 0   
POL(*'(x1, x2)) = 0   
POL(+(x1, x2)) = x1 + x2   
POL(+'(x1, x2)) = x1   
POL(::(x1, x2)) = [1] + x2   
POL(COMPUTELINE(x1, x2, x3)) = 0   
POL(COMPUTELINE#1(x1, x2, x3)) = 0   
POL(COMPUTELINE#2(x1, x2, x3, x4)) = 0   
POL(LINEMULT(x1, x2, x3)) = 0   
POL(LINEMULT#1(x1, x2, x3)) = 0   
POL(LINEMULT#2(x1, x2, x3, x4)) = 0   
POL(MATRIXMULT(x1, x2)) = [1] + x1   
POL(MATRIXMULT#1(x1, x2)) = x1   
POL(c(x1)) = x1   
POL(c1(x1)) = x1   
POL(c10(x1, x2, x3)) = x1 + x2 + x3   
POL(c11(x1, x2)) = x1 + x2   
POL(c12(x1)) = x1   
POL(c13(x1, x2)) = x1 + x2   
POL(c17(x1)) = x1   
POL(c19(x1)) = x1   
POL(c2(x1)) = x1   
POL(c24(x1)) = x1   
POL(c25(x1)) = x1   
POL(c27(x1)) = x1   
POL(c28(x1)) = x1   
POL(c3(x1)) = x1   
POL(c30(x1, x2)) = x1 + x2   
POL(c5(x1, x2)) = x1 + x2   
POL(c7(x1)) = x1   
POL(c8(x1)) = x1   
POL(lineMult(x1, x2, x3)) = 0   
POL(lineMult#1(x1, x2, x3)) = 0   
POL(lineMult#2(x1, x2, x3, x4)) = 0   
POL(nil) = 0   

(12) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(13) CdtKnowledgeProof (BOTH BOUNDS(ID, ID) transformation)

The following tuples could be moved from S to K by knowledge propagation:

MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))

(14) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(15) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1)) transformation)

Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.

COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
We considered the (Usable) Rules:

#mult(#0, #neg(z0)) → #0
#mult(#neg(z0), #0) → #0
#mult(#0, #pos(z0)) → #0
#mult(#neg(z0), #neg(z1)) → #pos(#natmult(z0, z1))
#mult(#pos(z0), #0) → #0
#mult(#0, #0) → #0
*(z0, z1) → #mult(z0, z1)
#mult(#neg(z0), #pos(z1)) → #neg(#natmult(z0, z1))
#mult(#pos(z0), #neg(z1)) → #neg(#natmult(z0, z1))
#mult(#pos(z0), #pos(z1)) → #pos(#natmult(z0, z1))
And the Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
The order we found is given by the following interpretation:
Polynomial interpretation :

POL(#0) = 0   
POL(#ADD(x1, x2)) = x1   
POL(#MULT(x1, x2)) = 0   
POL(#NATMULT(x1, x2)) = 0   
POL(#add(x1, x2)) = 0   
POL(#mult(x1, x2)) = 0   
POL(#natmult(x1, x2)) = 0   
POL(#neg(x1)) = 0   
POL(#pos(x1)) = 0   
POL(#pred(x1)) = 0   
POL(#s(x1)) = 0   
POL(#succ(x1)) = 0   
POL(*(x1, x2)) = 0   
POL(*'(x1, x2)) = 0   
POL(+(x1, x2)) = 0   
POL(+'(x1, x2)) = x1   
POL(::(x1, x2)) = [1] + x1 + x2   
POL(COMPUTELINE(x1, x2, x3)) = x1   
POL(COMPUTELINE#1(x1, x2, x3)) = x1   
POL(COMPUTELINE#2(x1, x2, x3, x4)) = x3 + x4   
POL(LINEMULT(x1, x2, x3)) = 0   
POL(LINEMULT#1(x1, x2, x3)) = 0   
POL(LINEMULT#2(x1, x2, x3, x4)) = 0   
POL(MATRIXMULT(x1, x2)) = x1   
POL(MATRIXMULT#1(x1, x2)) = x1   
POL(c(x1)) = x1   
POL(c1(x1)) = x1   
POL(c10(x1, x2, x3)) = x1 + x2 + x3   
POL(c11(x1, x2)) = x1 + x2   
POL(c12(x1)) = x1   
POL(c13(x1, x2)) = x1 + x2   
POL(c17(x1)) = x1   
POL(c19(x1)) = x1   
POL(c2(x1)) = x1   
POL(c24(x1)) = x1   
POL(c25(x1)) = x1   
POL(c27(x1)) = x1   
POL(c28(x1)) = x1   
POL(c3(x1)) = x1   
POL(c30(x1, x2)) = x1 + x2   
POL(c5(x1, x2)) = x1 + x2   
POL(c7(x1)) = x1   
POL(c8(x1)) = x1   
POL(lineMult(x1, x2, x3)) = 0   
POL(lineMult#1(x1, x2, x3)) = 0   
POL(lineMult#2(x1, x2, x3, x4)) = 0   
POL(nil) = 0   

(16) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(17) CdtKnowledgeProof (BOTH BOUNDS(ID, ID) transformation)

The following tuples could be moved from S to K by knowledge propagation:

COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))

(18) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(19) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2)) transformation)

Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.

#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
The order we found is given by the following interpretation:
Polynomial interpretation :

POL(#0) = [2]   
POL(#ADD(x1, x2)) = 0   
POL(#MULT(x1, x2)) = x2   
POL(#NATMULT(x1, x2)) = 0   
POL(#add(x1, x2)) = x12   
POL(#mult(x1, x2)) = [2] + x1 + x2 + x12   
POL(#natmult(x1, x2)) = 0   
POL(#neg(x1)) = 0   
POL(#pos(x1)) = [1]   
POL(#pred(x1)) = [2] + x1   
POL(#s(x1)) = 0   
POL(#succ(x1)) = [1]   
POL(*(x1, x2)) = [2]x2 + [2]x12   
POL(*'(x1, x2)) = [2]x2   
POL(+(x1, x2)) = [1] + x1 + [2]x2 + x22 + x12   
POL(+'(x1, x2)) = 0   
POL(::(x1, x2)) = [2] + x1 + x2   
POL(COMPUTELINE(x1, x2, x3)) = x1 + x2 + x1·x2   
POL(COMPUTELINE#1(x1, x2, x3)) = x3 + x1·x3   
POL(COMPUTELINE#2(x1, x2, x3, x4)) = [2]x1 + x1·x4 + x1·x3   
POL(LINEMULT(x1, x2, x3)) = x1·x2   
POL(LINEMULT#1(x1, x2, x3)) = x1·x3   
POL(LINEMULT#2(x1, x2, x3, x4)) = [2]x2 + x2·x4   
POL(MATRIXMULT(x1, x2)) = x1 + x2 + [2]x1·x2   
POL(MATRIXMULT#1(x1, x2)) = x1 + x2 + [2]x1·x2   
POL(c(x1)) = x1   
POL(c1(x1)) = x1   
POL(c10(x1, x2, x3)) = x1 + x2 + x3   
POL(c11(x1, x2)) = x1 + x2   
POL(c12(x1)) = x1   
POL(c13(x1, x2)) = x1 + x2   
POL(c17(x1)) = x1   
POL(c19(x1)) = x1   
POL(c2(x1)) = x1   
POL(c24(x1)) = x1   
POL(c25(x1)) = x1   
POL(c27(x1)) = x1   
POL(c28(x1)) = x1   
POL(c3(x1)) = x1   
POL(c30(x1, x2)) = x1 + x2   
POL(c5(x1, x2)) = x1 + x2   
POL(c7(x1)) = x1   
POL(c8(x1)) = x1   
POL(lineMult(x1, x2, x3)) = [2]x1 + [2]x12   
POL(lineMult#1(x1, x2, x3)) = [1] + [2]x1 + x2 + [2]x3 + [2]x2·x3 + x1·x3 + x12 + x1·x2 + x22   
POL(lineMult#2(x1, x2, x3, x4)) = x2 + x3 + x3·x4 + x1·x4 + [2]x1·x2 + x1·x3 + x32 + [2]x2·x3 + [2]x22   
POL(nil) = 0   

(20) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(21) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2)) transformation)

Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.

#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
The order we found is given by the following interpretation:
Polynomial interpretation :

POL(#0) = [1]   
POL(#ADD(x1, x2)) = 0   
POL(#MULT(x1, x2)) = x1·x2   
POL(#NATMULT(x1, x2)) = 0   
POL(#add(x1, x2)) = [1] + x2 + x22 + x12   
POL(#mult(x1, x2)) = [2]   
POL(#natmult(x1, x2)) = [2]x1·x2   
POL(#neg(x1)) = [1]   
POL(#pos(x1)) = [1]   
POL(#pred(x1)) = x1   
POL(#s(x1)) = 0   
POL(#succ(x1)) = 0   
POL(*(x1, x2)) = 0   
POL(*'(x1, x2)) = x1·x2   
POL(+(x1, x2)) = [1] + x1 + x2 + [2]x22 + [2]x1·x2 + [2]x12   
POL(+'(x1, x2)) = 0   
POL(::(x1, x2)) = [1] + x1 + x2   
POL(COMPUTELINE(x1, x2, x3)) = [2]x12 + [2]x1·x2   
POL(COMPUTELINE#1(x1, x2, x3)) = [2]x1·x3 + [2]x12   
POL(COMPUTELINE#2(x1, x2, x3, x4)) = x3 + x4 + [2]x42 + x3·x4 + [2]x1·x4 + [2]x1·x3 + x32   
POL(LINEMULT(x1, x2, x3)) = x1 + x1·x2   
POL(LINEMULT#1(x1, x2, x3)) = x3 + x1·x3   
POL(LINEMULT#2(x1, x2, x3, x4)) = [2]x2 + x2·x4 + x2·x3   
POL(MATRIXMULT(x1, x2)) = [2] + x2 + [2]x1·x2 + [2]x12   
POL(MATRIXMULT#1(x1, x2)) = [2] + [2]x1·x2 + [2]x12   
POL(c(x1)) = x1   
POL(c1(x1)) = x1   
POL(c10(x1, x2, x3)) = x1 + x2 + x3   
POL(c11(x1, x2)) = x1 + x2   
POL(c12(x1)) = x1   
POL(c13(x1, x2)) = x1 + x2   
POL(c17(x1)) = x1   
POL(c19(x1)) = x1   
POL(c2(x1)) = x1   
POL(c24(x1)) = x1   
POL(c25(x1)) = x1   
POL(c27(x1)) = x1   
POL(c28(x1)) = x1   
POL(c3(x1)) = x1   
POL(c30(x1, x2)) = x1 + x2   
POL(c5(x1, x2)) = x1 + x2   
POL(c7(x1)) = x1   
POL(c8(x1)) = x1   
POL(lineMult(x1, x2, x3)) = x32 + [2]x1·x3   
POL(lineMult#1(x1, x2, x3)) = [1] + x1 + [2]x2 + [2]x3 + x32 + [2]x2·x3 + x1·x3 + x12 + x1·x2 + x22   
POL(lineMult#2(x1, x2, x3, x4)) = [2] + [2]x1 + x2 + [2]x3 + x42 + x3·x4 + x2·x4 + [2]x1·x4 + [2]x12 + [2]x1·x2 + x1·x3 + [2]x32 + x2·x3 + [2]x22   
POL(nil) = 0   

(22) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(23) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2)) transformation)

Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.

LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
We considered the (Usable) Rules:none
And the Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
The order we found is given by the following interpretation:
Polynomial interpretation :

POL(#0) = 0   
POL(#ADD(x1, x2)) = 0   
POL(#MULT(x1, x2)) = 0   
POL(#NATMULT(x1, x2)) = 0   
POL(#add(x1, x2)) = [2] + x1 + [2]x22 + x12   
POL(#mult(x1, x2)) = [2] + x1 + x2 + [2]x1·x2   
POL(#natmult(x1, x2)) = [1] + [2]x1·x2 + x12   
POL(#neg(x1)) = 0   
POL(#pos(x1)) = 0   
POL(#pred(x1)) = [2] + x1 + x12   
POL(#s(x1)) = [2]   
POL(#succ(x1)) = [2]   
POL(*(x1, x2)) = x1 + [2]x12   
POL(*'(x1, x2)) = 0   
POL(+(x1, x2)) = [1] + [2]x1 + [2]x1·x2 + [2]x12   
POL(+'(x1, x2)) = 0   
POL(::(x1, x2)) = [1] + x1 + x2   
POL(COMPUTELINE(x1, x2, x3)) = x2   
POL(COMPUTELINE#1(x1, x2, x3)) = x3   
POL(COMPUTELINE#2(x1, x2, x3, x4)) = x1   
POL(LINEMULT(x1, x2, x3)) = x2   
POL(LINEMULT#1(x1, x2, x3)) = x1   
POL(LINEMULT#2(x1, x2, x3, x4)) = x4   
POL(MATRIXMULT(x1, x2)) = [2] + x1 + x1·x2 + x12   
POL(MATRIXMULT#1(x1, x2)) = [1] + x1·x2 + x12   
POL(c(x1)) = x1   
POL(c1(x1)) = x1   
POL(c10(x1, x2, x3)) = x1 + x2 + x3   
POL(c11(x1, x2)) = x1 + x2   
POL(c12(x1)) = x1   
POL(c13(x1, x2)) = x1 + x2   
POL(c17(x1)) = x1   
POL(c19(x1)) = x1   
POL(c2(x1)) = x1   
POL(c24(x1)) = x1   
POL(c25(x1)) = x1   
POL(c27(x1)) = x1   
POL(c28(x1)) = x1   
POL(c3(x1)) = x1   
POL(c30(x1, x2)) = x1 + x2   
POL(c5(x1, x2)) = x1 + x2   
POL(c7(x1)) = x1   
POL(c8(x1)) = x1   
POL(lineMult(x1, x2, x3)) = [2]x1 + [2]x2·x3 + x1·x3 + x12 + x1·x2   
POL(lineMult#1(x1, x2, x3)) = [1] + [2]x1 + [2]x2 + [2]x3 + x32 + [2]x2·x3 + x1·x3 + x12 + [2]x1·x2 + [2]x22   
POL(lineMult#2(x1, x2, x3, x4)) = x1 + [2]x2 + [2]x3 + x4 + [2]x42 + x3·x4 + x2·x4 + x1·x2 + x1·x3 + [2]x32 + x22   
POL(nil) = 0   

(24) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(25) CdtKnowledgeProof (BOTH BOUNDS(ID, ID) transformation)

The following tuples could be moved from S to K by knowledge propagation:

LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
+'(z0, z1) → c1(#ADD(z0, z1))
*'(z0, z1) → c(#MULT(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
*'(z0, z1) → c(#MULT(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))

(26) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
+'(z0, z1) → c1(#ADD(z0, z1))
*'(z0, z1) → c(#MULT(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(27) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2)) transformation)

Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.

#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
We considered the (Usable) Rules:none
And the Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
The order we found is given by the following interpretation:
Polynomial interpretation :

POL(#0) = 0   
POL(#ADD(x1, x2)) = 0   
POL(#MULT(x1, x2)) = x1   
POL(#NATMULT(x1, x2)) = x1   
POL(#add(x1, x2)) = 0   
POL(#mult(x1, x2)) = [2] + [2]x12   
POL(#natmult(x1, x2)) = [2]x22   
POL(#neg(x1)) = x1   
POL(#pos(x1)) = x1   
POL(#pred(x1)) = [2] + x12   
POL(#s(x1)) = [2] + x1   
POL(#succ(x1)) = [1]   
POL(*(x1, x2)) = [2]   
POL(*'(x1, x2)) = x1   
POL(+(x1, x2)) = [1] + x1 + [2]x2 + x1·x2 + [2]x12   
POL(+'(x1, x2)) = 0   
POL(::(x1, x2)) = [1] + x1 + x2   
POL(COMPUTELINE(x1, x2, x3)) = x2   
POL(COMPUTELINE#1(x1, x2, x3)) = x3   
POL(COMPUTELINE#2(x1, x2, x3, x4)) = x1   
POL(LINEMULT(x1, x2, x3)) = x2   
POL(LINEMULT#1(x1, x2, x3)) = x1   
POL(LINEMULT#2(x1, x2, x3, x4)) = x3 + x4   
POL(MATRIXMULT(x1, x2)) = [2]x1·x2   
POL(MATRIXMULT#1(x1, x2)) = [2]x1·x2   
POL(c(x1)) = x1   
POL(c1(x1)) = x1   
POL(c10(x1, x2, x3)) = x1 + x2 + x3   
POL(c11(x1, x2)) = x1 + x2   
POL(c12(x1)) = x1   
POL(c13(x1, x2)) = x1 + x2   
POL(c17(x1)) = x1   
POL(c19(x1)) = x1   
POL(c2(x1)) = x1   
POL(c24(x1)) = x1   
POL(c25(x1)) = x1   
POL(c27(x1)) = x1   
POL(c28(x1)) = x1   
POL(c3(x1)) = x1   
POL(c30(x1, x2)) = x1 + x2   
POL(c5(x1, x2)) = x1 + x2   
POL(c7(x1)) = x1   
POL(c8(x1)) = x1   
POL(lineMult(x1, x2, x3)) = [2]x2 + [2]x12 + [2]x22   
POL(lineMult#1(x1, x2, x3)) = [2] + x1 + x2 + [2]x3 + x2·x3 + [2]x1·x3 + x12 + x1·x2 + x22   
POL(lineMult#2(x1, x2, x3, x4)) = [2]x1 + x3 + x3·x4 + [2]x1·x4 + x32 + [2]x22   
POL(nil) = 0   

(28) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:

#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
+'(z0, z1) → c1(#ADD(z0, z1))
*'(z0, z1) → c(#MULT(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(29) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2)) transformation)

Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S.

#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
We considered the (Usable) Rules:

#succ(#0) → #pos(#s(#0))
#mult(#neg(z0), #pos(z1)) → #neg(#natmult(z0, z1))
#mult(#pos(z0), #neg(z1)) → #neg(#natmult(z0, z1))
#succ(#neg(#s(#s(z0)))) → #neg(#s(z0))
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#pos(#s(#0)), z0) → #succ(z0)
#mult(#pos(z0), #pos(z1)) → #pos(#natmult(z0, z1))
#succ(#neg(#s(#0))) → #0
#natmult(#s(z0), z1) → #add(#pos(z1), #natmult(z0, z1))
#mult(#0, #neg(z0)) → #0
#mult(#neg(z0), #0) → #0
#mult(#0, #pos(z0)) → #0
#mult(#neg(z0), #neg(z1)) → #pos(#natmult(z0, z1))
#mult(#pos(z0), #0) → #0
#mult(#0, #0) → #0
*(z0, z1) → #mult(z0, z1)
#natmult(#0, z0) → #0
#succ(#pos(#s(z0))) → #pos(#s(#s(z0)))
And the Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
The order we found is given by the following interpretation:
Polynomial interpretation :

POL(#0) = 0   
POL(#ADD(x1, x2)) = x1   
POL(#MULT(x1, x2)) = x1·x2   
POL(#NATMULT(x1, x2)) = x1·x2   
POL(#add(x1, x2)) = x1 + x2   
POL(#mult(x1, x2)) = x1·x2   
POL(#natmult(x1, x2)) = x1·x2   
POL(#neg(x1)) = x1   
POL(#pos(x1)) = x1   
POL(#pred(x1)) = [2]   
POL(#s(x1)) = [1] + x1   
POL(#succ(x1)) = [1] + x1   
POL(*(x1, x2)) = x1·x2   
POL(*'(x1, x2)) = x1·x2   
POL(+(x1, x2)) = [2] + [2]x2 + [2]x22 + x1·x2   
POL(+'(x1, x2)) = x1   
POL(::(x1, x2)) = [2] + x1 + x2   
POL(COMPUTELINE(x1, x2, x3)) = [2]x1 + [2]x1·x2   
POL(COMPUTELINE#1(x1, x2, x3)) = [2]x1·x3   
POL(COMPUTELINE#2(x1, x2, x3, x4)) = [2]x1 + [2]x1·x4 + [2]x1·x3   
POL(LINEMULT(x1, x2, x3)) = [1] + [2]x1·x2   
POL(LINEMULT#1(x1, x2, x3)) = [1] + [2]x1·x3   
POL(LINEMULT#2(x1, x2, x3, x4)) = [1] + [2]x2·x4 + [2]x2·x3   
POL(MATRIXMULT(x1, x2)) = [2]x1 + x2 + [2]x1·x2   
POL(MATRIXMULT#1(x1, x2)) = [2]x1 + x2 + [2]x1·x2   
POL(c(x1)) = x1   
POL(c1(x1)) = x1   
POL(c10(x1, x2, x3)) = x1 + x2 + x3   
POL(c11(x1, x2)) = x1 + x2   
POL(c12(x1)) = x1   
POL(c13(x1, x2)) = x1 + x2   
POL(c17(x1)) = x1   
POL(c19(x1)) = x1   
POL(c2(x1)) = x1   
POL(c24(x1)) = x1   
POL(c25(x1)) = x1   
POL(c27(x1)) = x1   
POL(c28(x1)) = x1   
POL(c3(x1)) = x1   
POL(c30(x1, x2)) = x1 + x2   
POL(c5(x1, x2)) = x1 + x2   
POL(c7(x1)) = x1   
POL(c8(x1)) = x1   
POL(lineMult(x1, x2, x3)) = [1] + x2 + x32 + [2]x1·x3 + [2]x12   
POL(lineMult#1(x1, x2, x3)) = [2] + [2]x1 + x3 + x32 + x1·x3 + [2]x12 + [2]x1·x2 + x22   
POL(lineMult#2(x1, x2, x3, x4)) = [2] + [2]x1 + [2]x2 + x3 + x42 + [2]x3·x4 + x2·x4 + [2]x1·x4 + [2]x1·x2 + [2]x32 + x2·x3 + x22   
POL(nil) = 0   

(30) Obligation:

Complexity Dependency Tuples Problem
Rules:

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))
+(z0, z1) → #add(z0, z1)
*(z0, z1) → #mult(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))
#add(#pos(#s(#0)), z0) → #succ(z0)
#add(#pos(#s(#s(z0))), z1) → #succ(#add(#pos(#s(z0)), z1))
#add(#0, z0) → z0
#add(#neg(#s(#0)), z0) → #pred(z0)
#add(#neg(#s(#s(z0))), z1) → #pred(#add(#pos(#s(z0)), z1))
#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)))
#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))
Tuples:

*'(z0, z1) → c(#MULT(z0, z1))
+'(z0, z1) → c1(#ADD(z0, z1))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
S tuples:none
K tuples:

MATRIXMULT(z0, z1) → c12(MATRIXMULT#1(z0, z1))
#ADD(#neg(#s(#s(z0))), z1) → c17(#ADD(#pos(#s(z0)), z1))
MATRIXMULT#1(::(z0, z1), z2) → c13(COMPUTELINE(z0, z2, nil), MATRIXMULT(z1, z2))
COMPUTELINE#1(::(z0, z1), z2, z3) → c3(COMPUTELINE#2(z3, z2, z0, z1))
COMPUTELINE#2(::(z0, z1), z2, z3, z4) → c5(COMPUTELINE(z4, z1, lineMult(z3, z0, z2)), LINEMULT(z3, z0, z2))
COMPUTELINE(z0, z1, z2) → c2(COMPUTELINE#1(z0, z2, z1))
#MULT(#neg(z0), #pos(z1)) → c25(#NATMULT(z0, z1))
#MULT(#pos(z0), #pos(z1)) → c28(#NATMULT(z0, z1))
#MULT(#neg(z0), #neg(z1)) → c24(#NATMULT(z0, z1))
#MULT(#pos(z0), #neg(z1)) → c27(#NATMULT(z0, z1))
LINEMULT#1(::(z0, z1), z2, z3) → c8(LINEMULT#2(z2, z3, z0, z1))
LINEMULT#2(::(z0, z1), z2, z3, z4) → c10(+'(*(z3, z2), z0), *'(z3, z2), LINEMULT(z2, z4, z1))
LINEMULT#2(nil, z0, z1, z2) → c11(*'(z1, z0), LINEMULT(z0, z2, nil))
+'(z0, z1) → c1(#ADD(z0, z1))
*'(z0, z1) → c(#MULT(z0, z1))
LINEMULT(z0, z1, z2) → c7(LINEMULT#1(z1, z2, z0))
#NATMULT(#s(z0), z1) → c30(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1))
#ADD(#pos(#s(#s(z0))), z1) → c19(#ADD(#pos(#s(z0)), z1))
Defined Rule Symbols:

lineMult, lineMult#1, lineMult#2, +, *, #mult, #natmult, #add, #succ, #pred

Defined Pair Symbols:

*', +', COMPUTELINE, COMPUTELINE#1, COMPUTELINE#2, LINEMULT, LINEMULT#1, LINEMULT#2, MATRIXMULT, MATRIXMULT#1, #MULT, #NATMULT, #ADD

Compound Symbols:

c, c1, c2, c3, c5, c7, c8, c10, c11, c12, c13, c24, c25, c27, c28, c30, c17, c19

(31) SIsEmptyProof (BOTH BOUNDS(ID, ID) transformation)

The set S is empty

(32) BOUNDS(1, 1)