Certification Problem

Input (TPDB Runtime_Complexity_Innermost_Rewriting/Transformed_CSR_04/Ex49_GM04_GM)

The rewrite relation of the following TRS is considered.

a__minus(0,Y) 0 (1)
a__minus(s(X),s(Y)) a__minus(X,Y) (2)
a__geq(X,0) true (3)
a__geq(0,s(Y)) false (4)
a__geq(s(X),s(Y)) a__geq(X,Y) (5)
a__div(0,s(Y)) 0 (6)
a__div(s(X),s(Y)) a__if(a__geq(X,Y),s(div(minus(X,Y),s(Y))),0) (7)
a__if(true,X,Y) mark(X) (8)
a__if(false,X,Y) mark(Y) (9)
mark(minus(X1,X2)) a__minus(X1,X2) (10)
mark(geq(X1,X2)) a__geq(X1,X2) (11)
mark(div(X1,X2)) a__div(mark(X1),X2) (12)
mark(if(X1,X2,X3)) a__if(mark(X1),X2,X3) (13)
mark(0) 0 (14)
mark(s(X)) s(mark(X)) (15)
mark(true) true (16)
mark(false) false (17)
a__minus(X1,X2) minus(X1,X2) (18)
a__geq(X1,X2) geq(X1,X2) (19)
a__div(X1,X2) div(X1,X2) (20)
a__if(X1,X2,X3) if(X1,X2,X3) (21)
The evaluation strategy is innermost.

Property / Task

Determine bounds on the runtime complexity.

Answer / Result

An upperbound for the complexity is O(n2).

Proof (by AProVE @ termCOMP 2023)

1 Dependency Tuples

We get the following set of dependency tuples:
a__minus#(0,z0) c (23)
originates from
a__minus(0,z0) 0 (22)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
originates from
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus#(z0,z1) c2 (27)
originates from
a__minus(z0,z1) minus(z0,z1) (26)
a__geq#(z0,0) c3 (29)
originates from
a__geq(z0,0) true (28)
a__geq#(0,s(z0)) c4 (31)
originates from
a__geq(0,s(z0)) false (30)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
originates from
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
a__geq#(z0,z1) c6 (35)
originates from
a__geq(z0,z1) geq(z0,z1) (34)
a__div#(0,s(z0)) c7 (37)
originates from
a__div(0,s(z0)) 0 (36)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
originates from
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)
a__div#(z0,z1) c9 (41)
originates from
a__div(z0,z1) div(z0,z1) (40)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
originates from
a__if(true,z0,z1) mark(z0) (42)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
originates from
a__if(false,z0,z1) mark(z1) (44)
a__if#(z0,z1,z2) c12 (47)
originates from
a__if(z0,z1,z2) if(z0,z1,z2) (46)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
originates from
mark(minus(z0,z1)) a__minus(z0,z1) (48)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
originates from
mark(geq(z0,z1)) a__geq(z0,z1) (50)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
originates from
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
originates from
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark#(0) c17 (56)
originates from
mark(0) 0 (14)
mark#(s(z0)) c18(mark#(z0)) (58)
originates from
mark(s(z0)) s(mark(z0)) (57)
mark#(true) c19 (59)
originates from
mark(true) true (16)
mark#(false) c20 (60)
originates from
mark(false) false (17)
Moreover, we add the following terms to the innermost strategy.
a__minus#(0,z0)
a__minus#(s(z0),s(z1))
a__minus#(z0,z1)
a__geq#(z0,0)
a__geq#(0,s(z0))
a__geq#(s(z0),s(z1))
a__geq#(z0,z1)
a__div#(0,s(z0))
a__div#(s(z0),s(z1))
a__div#(z0,z1)
a__if#(true,z0,z1)
a__if#(false,z0,z1)
a__if#(z0,z1,z2)
mark#(minus(z0,z1))
mark#(geq(z0,z1))
mark#(div(z0,z1))
mark#(if(z0,z1,z2))
mark#(0)
mark#(s(z0))
mark#(true)
mark#(false)

1.1 Rule Shifting

The rules
a__div#(0,s(z0)) c7 (37)
a__div#(z0,z1) c9 (41)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1(x1)] = 1 · x1 + 0
[c2] = 0
[c3] = 0
[c4] = 0
[c5(x1)] = 1 · x1 + 0
[c6] = 0
[c7] = 0
[c8(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c9] = 0
[c10(x1)] = 1 · x1 + 0
[c11(x1)] = 1 · x1 + 0
[c12] = 0
[c13(x1)] = 1 · x1 + 0
[c14(x1)] = 1 · x1 + 0
[c15(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c16(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c17] = 0
[c18(x1)] = 1 · x1 + 0
[c19] = 0
[c20] = 0
[a__minus(x1, x2)] = 1 + 1 · x1 + 1 · x2
[a__geq(x1, x2)] = 0
[a__div(x1, x2)] = 1 + 1 · x2
[a__if(x1, x2, x3)] = 1 + 1 · x1 + 1 · x2 + 1 · x3
[mark(x1)] = 1 + 1 · x1
[a__minus#(x1, x2)] = 0
[a__geq#(x1, x2)] = 0
[a__div#(x1, x2)] = 1
[a__if#(x1, x2, x3)] = 1 · x2 + 0 + 1 · x3
[mark#(x1)] = 1 · x1 + 0
[minus(x1, x2)] = 0
[geq(x1, x2)] = 1 + 1 · x1 + 1 · x2
[div(x1, x2)] = 1 + 1 · x1
[if(x1, x2, x3)] = 1 + 1 · x1 + 1 · x2 + 1 · x3
[0] = 0
[s(x1)] = 1 · x1 + 0
[true] = 0
[false] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)

1.1.1 Rule Shifting

The rules
mark#(false) c20 (60)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1(x1)] = 1 · x1 + 0
[c2] = 0
[c3] = 0
[c4] = 0
[c5(x1)] = 1 · x1 + 0
[c6] = 0
[c7] = 0
[c8(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c9] = 0
[c10(x1)] = 1 · x1 + 0
[c11(x1)] = 1 · x1 + 0
[c12] = 0
[c13(x1)] = 1 · x1 + 0
[c14(x1)] = 1 · x1 + 0
[c15(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c16(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c17] = 0
[c18(x1)] = 1 · x1 + 0
[c19] = 0
[c20] = 0
[a__minus(x1, x2)] = 1 + 1 · x1 + 1 · x2
[a__geq(x1, x2)] = 0
[a__div(x1, x2)] = 1 + 1 · x2
[a__if(x1, x2, x3)] = 1 + 1 · x1 + 1 · x2 + 1 · x3
[mark(x1)] = 1 + 1 · x1
[a__minus#(x1, x2)] = 0
[a__geq#(x1, x2)] = 0
[a__div#(x1, x2)] = 0
[a__if#(x1, x2, x3)] = 1 · x2 + 0 + 1 · x3
[mark#(x1)] = 1 · x1 + 0
[minus(x1, x2)] = 0
[geq(x1, x2)] = 1 + 1 · x1 + 1 · x2
[div(x1, x2)] = 1 · x1 + 0
[if(x1, x2, x3)] = 1 + 1 · x1 + 1 · x2 + 1 · x3
[0] = 0
[s(x1)] = 1 · x1 + 0
[true] = 0
[false] = 1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)

1.1.1.1 Rule Shifting

The rules
mark#(true) c19 (59)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1(x1)] = 1 · x1 + 0
[c2] = 0
[c3] = 0
[c4] = 0
[c5(x1)] = 1 · x1 + 0
[c6] = 0
[c7] = 0
[c8(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c9] = 0
[c10(x1)] = 1 · x1 + 0
[c11(x1)] = 1 · x1 + 0
[c12] = 0
[c13(x1)] = 1 · x1 + 0
[c14(x1)] = 1 · x1 + 0
[c15(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c16(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c17] = 0
[c18(x1)] = 1 · x1 + 0
[c19] = 0
[c20] = 0
[a__minus(x1, x2)] = 3 + 3 · x1 + 3 · x2
[a__geq(x1, x2)] = 0
[a__div(x1, x2)] = 3
[a__if(x1, x2, x3)] = 3 + 3 · x1 + 3 · x2 + 3 · x3
[mark(x1)] = 3 · x1 + 0
[a__minus#(x1, x2)] = 0
[a__geq#(x1, x2)] = 0
[a__div#(x1, x2)] = 0
[a__if#(x1, x2, x3)] = 1 · x2 + 0 + 1 · x3
[mark#(x1)] = 1 · x1 + 0
[minus(x1, x2)] = 0
[geq(x1, x2)] = 1 · x1 + 0 + 1 · x2
[div(x1, x2)] = 1 · x1 + 0
[if(x1, x2, x3)] = 2 + 1 · x1 + 1 · x2 + 1 · x3
[0] = 0
[s(x1)] = 1 · x1 + 0
[true] = 1
[false] = 0
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)

1.1.1.1.1 Rule Shifting

The rules
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(0) c17 (56)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
2 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
1 0
+
1 0
0 0
· x1
[c12] =
1 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
1 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
1 0
[c20] =
1 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 1
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
1 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
1 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
1 0
[mark#(x1)] =
1 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 4
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
2 0
[c4] =
0 0
2 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
1 0
0 0
+
1 2
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
1 0
0 0
+
1 4
0 0
· x1 +
2 0
0 1
· x2 +
2 0
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 0
0 0
· x1
[div(x1, x2)] =
1 0
0 0
+
1 4
0 1
· x1 +
0 0
0 0
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
1 0
0 0
+
1 4
0 1
· x1 +
0 0
0 0
· x2
[mark(x1)] =
0 0
0 0
+
2 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1 Rule Shifting

The rules
a__minus#(0,z0) c (23)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 1
0 0
· x2
[c17] =
0 0
2 0
[a__if#(x1, x2, x3)] =
0 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
2 0
[c2] =
1 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
2 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
2 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 2
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
0 0
[c4] =
0 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
2 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
4 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
4 0
0 0
+
1 0
0 0
· x1 +
2 0
0 2
· x2 +
2 0
0 2
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
4 0
+
1 4
0 0
· x1 +
0 0
0 0
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
4 0
+
1 4
0 0
· x1 +
0 0
0 0
· x2
[mark(x1)] =
0 0
0 0
+
2 0
0 2
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1 Rule Shifting

The rules
a__minus#(z0,z1) c2 (27)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
2 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
0 0
2 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 1
0 0
· x1
[a__minus#(x1, x2)] =
2 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
2 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 1
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 2
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
0 0
[c4] =
0 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
2 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 1
0 0
· x1
[div(x1, x2)] =
0 0
0 0
+
1 2
0 0
· x1 +
0 0
0 1
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
2 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
0 0
+
1 2
0 0
· x1 +
0 0
0 1
· x2
[mark(x1)] =
0 0
0 0
+
1 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
0 0
+
0 0
0 1
· x1 +
0 0
0 0
· x2
[c1(x1)] =
4 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
1 0
[a__if#(x1, x2, x3)] =
0 0
0 0
+
0 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
1 0
[c2] =
1 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
1 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
2 0
0 0
+
0 3
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
2 0
0 0
[mark#(x1)] =
0 0
1 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
1 0
0 0
+
1 2
0 0
· x1 +
1 1
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 4
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
0 0
[c4] =
0 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 1
· x1 +
1 1
0 0
· x2
[a__minus(x1, x2)] =
4 0
0 0
+
0 3
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 1
0 1
· x3
[a__if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
2 0
0 1
· x2 +
2 1
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 2
0 1
· x1
[div(x1, x2)] =
1 0
0 0
+
1 4
0 1
· x1 +
0 0
0 0
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
2 0
0 0
+
0 3
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
1 0
0 0
+
1 4
0 1
· x1 +
0 0
0 0
· x2
[mark(x1)] =
0 0
0 0
+
2 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__if#(true,z0,z1) c10(mark#(z0)) (43)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
1 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
1 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
1 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 1
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
0 0
[c4] =
0 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
1 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 4
0 1
· x3
[a__if(x1, x2, x3)] =
1 0
0 0
+
1 0
0 0
· x1 +
4 0
0 4
· x2 +
4 4
0 4
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
4 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
4 0
+
1 4
0 0
· x1 +
0 0
0 1
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
4 0
+
1 4
0 0
· x1 +
0 0
0 3
· x2
[mark(x1)] =
0 0
0 0
+
4 0
0 4
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
mark#(s(z0)) c18(mark#(z0)) (58)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
2 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
0 0
2 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
2 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
2 0
0 0
[c18(x1)] =
1 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
2 0
0 0
+
1 1
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 2
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
0 0
[c4] =
0 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
3 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
2 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
0 0
0 0
+
1 3
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
0 0
0 0
+
1 4
0 0
· x1 +
3 0
0 1
· x2 +
3 0
0 1
· x3
[false] =
2 0
0 0
[s(x1)] =
2 0
4 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
0 0
+
1 2
0 1
· x1 +
0 0
0 0
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
2 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
2 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
0 0
+
1 3
0 1
· x1 +
0 0
0 0
· x2
[mark(x1)] =
2 0
0 0
+
3 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__if#(false,z0,z1) c11(mark#(z1)) (45)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
1 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
1 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 1
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 2
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
0 0
[c4] =
0 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 2
0 0
· x2
[a__minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
2 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 2
0 1
· x3
[a__if(x1, x2, x3)] =
4 0
0 0
+
1 0
0 0
· x1 +
2 0
0 1
· x2 +
2 2
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
2 0
+
1 4
0 0
· x1 +
0 0
0 0
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
2 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
2 0
+
1 4
0 0
· x1 +
0 0
0 0
· x2
[mark(x1)] =
3 0
0 0
+
2 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__if#(z0,z1,z2) c12 (47)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
1 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
4 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 4
0 0
· x1 +
0 2
0 0
· x2
[c3] =
0 0
0 0
[c4] =
0 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
1 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
1 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
0 0
+
1 4
0 1
· x1 +
0 4
0 1
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
0 0
+
1 4
0 1
· x1 +
0 4
0 1
· x2
[mark(x1)] =
0 0
0 0
+
1 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__geq#(z0,z1) c6 (35)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
2 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
0 0
2 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
4 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 4
0 0
· x1 +
0 0
0 0
· x2
[c3] =
1 0
0 0
[c4] =
1 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 1
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
2 0
0 1
· x2 +
2 0
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
3 0
2 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
0 0
+
1 4
0 0
· x1 +
0 0
0 1
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
0 0
+
1 4
0 0
· x1 +
0 0
0 1
· x2
[mark(x1)] =
0 0
0 0
+
2 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__geq#(z0,0) c3 (29)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
0 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
0 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 1
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
0 0
[c4] =
1 0
0 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
2 0
0 1
· x2 +
2 0
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
1 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
3 0
+
1 1
0 1
· x1 +
0 0
0 0
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
1 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
3 0
+
1 1
0 1
· x1 +
0 0
0 0
· x2
[mark(x1)] =
0 0
0 0
+
2 0
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__geq#(0,s(z0)) c4 (31)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
1 0
2 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
0 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
2 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 2
0 0
· x1 +
0 0
0 0
· x2
[c3] =
1 0
2 0
[c4] =
0 0
2 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
3 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
4 0
[geq(x1, x2)] =
2 0
4 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 1
· x2 +
1 0
0 1
· x3
[a__if(x1, x2, x3)] =
0 0
0 0
+
1 0
0 0
· x1 +
2 0
0 2
· x2 +
2 0
0 2
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 0
0 0
· x1
[div(x1, x2)] =
0 0
0 0
+
1 4
0 0
· x1 +
0 0
0 1
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
3 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
2 0
4 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
0 0
+
1 4
0 0
· x1 +
0 0
0 2
· x2
[mark(x1)] =
0 0
0 0
+
2 0
0 2
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1 Rule Shifting

The rules
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
are strictly oriented by the following linear polynomial interpretation over (2 x 2)-matrices with strict dimension 1 over the rationals with delta = 1
[a__geq#(x1, x2)] =
0 0
4 0
+
0 4
0 0
· x1 +
0 0
0 0
· x2
[c1(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c12] =
0 0
0 0
[c5(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c16(x1, x2)] =
1 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c17] =
0 0
0 0
[a__if#(x1, x2, x3)] =
0 0
0 0
+
0 0
0 0
· x1 +
1 0
0 0
· x2 +
1 0
0 0
· x3
[c6] =
0 0
4 0
[c20] =
0 0
0 0
[c2] =
0 0
0 0
[c9] =
0 0
0 0
[c13(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c11(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c19] =
0 0
0 0
[c18(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__minus#(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[c7] =
0 0
0 0
[c] =
0 0
0 0
[mark#(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c8(x1, x2)] =
0 0
0 0
+
1 0
0 0
· x1 +
1 0
0 0
· x2
[c14(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[c10(x1)] =
0 0
0 0
+
1 0
0 0
· x1
[a__div#(x1, x2)] =
0 0
0 0
+
0 4
0 0
· x1 +
0 0
0 0
· x2
[c3] =
0 0
4 0
[c4] =
0 0
4 0
[c15(x1, x2)] =
0 0
0 0
+
1 0
0 1
· x1 +
1 0
0 0
· x2
[a__minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[true] =
0 0
0 0
[geq(x1, x2)] =
0 0
0 0
+
0 4
0 0
· x1 +
0 0
0 0
· x2
[if(x1, x2, x3)] =
1 0
0 0
+
1 2
0 0
· x1 +
1 0
0 1
· x2 +
1 4
0 1
· x3
[a__if(x1, x2, x3)] =
1 0
0 0
+
1 2
0 0
· x1 +
2 1
0 1
· x2 +
2 4
0 1
· x3
[false] =
0 0
0 0
[s(x1)] =
0 0
2 0
+
1 0
0 1
· x1
[div(x1, x2)] =
0 0
0 0
+
1 4
0 1
· x1 +
0 0
0 0
· x2
[0] =
0 0
0 0
[minus(x1, x2)] =
0 0
0 0
+
0 0
0 0
· x1 +
0 0
0 0
· x2
[a__geq(x1, x2)] =
0 0
0 0
+
0 4
0 0
· x1 +
0 0
0 0
· x2
[a__div(x1, x2)] =
0 0
0 0
+
1 4
0 1
· x1 +
0 0
0 0
· x2
[mark(x1)] =
0 0
0 0
+
2 1
0 1
· x1
which has the intended complexity. Here, only the following usable rules have been considered:
a__minus#(0,z0) c (23)
a__minus#(s(z0),s(z1)) c1(a__minus#(z0,z1)) (25)
a__minus#(z0,z1) c2 (27)
a__geq#(z0,0) c3 (29)
a__geq#(0,s(z0)) c4 (31)
a__geq#(s(z0),s(z1)) c5(a__geq#(z0,z1)) (33)
a__geq#(z0,z1) c6 (35)
a__div#(0,s(z0)) c7 (37)
a__div#(s(z0),s(z1)) c8(a__if#(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0),a__geq#(z0,z1)) (39)
a__div#(z0,z1) c9 (41)
a__if#(true,z0,z1) c10(mark#(z0)) (43)
a__if#(false,z0,z1) c11(mark#(z1)) (45)
a__if#(z0,z1,z2) c12 (47)
mark#(minus(z0,z1)) c13(a__minus#(z0,z1)) (49)
mark#(geq(z0,z1)) c14(a__geq#(z0,z1)) (51)
mark#(div(z0,z1)) c15(a__div#(mark(z0),z1),mark#(z0)) (53)
mark#(if(z0,z1,z2)) c16(a__if#(mark(z0),z1,z2),mark#(z0)) (55)
mark#(0) c17 (56)
mark#(s(z0)) c18(mark#(z0)) (58)
mark#(true) c19 (59)
mark#(false) c20 (60)
mark(geq(z0,z1)) a__geq(z0,z1) (50)
a__geq(s(z0),s(z1)) a__geq(z0,z1) (32)
mark(if(z0,z1,z2)) a__if(mark(z0),z1,z2) (54)
mark(0) 0 (14)
a__if(false,z0,z1) mark(z1) (44)
a__div(z0,z1) div(z0,z1) (40)
a__if(z0,z1,z2) if(z0,z1,z2) (46)
a__if(true,z0,z1) mark(z0) (42)
a__geq(0,s(z0)) false (30)
mark(true) true (16)
mark(false) false (17)
mark(s(z0)) s(mark(z0)) (57)
a__div(0,s(z0)) 0 (36)
a__minus(s(z0),s(z1)) a__minus(z0,z1) (24)
a__minus(z0,z1) minus(z0,z1) (26)
mark(minus(z0,z1)) a__minus(z0,z1) (48)
a__minus(0,z0) 0 (22)
a__geq(z0,0) true (28)
mark(div(z0,z1)) a__div(mark(z0),z1) (52)
a__geq(z0,z1) geq(z0,z1) (34)
a__div(s(z0),s(z1)) a__if(a__geq(z0,z1),s(div(minus(z0,z1),s(z1))),0) (38)

1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1 R is empty

There are no rules in the TRS R. Hence, R/S has complexity O(1).