Certification Problem

Input (TPDB Runtime_Complexity_Innermost_Rewriting/Rubio_04/polo2)

The rewrite relation of the following TRS is considered.

dx(X) → one (1)
dx(a) → zero (2)
dx(plus(ALPHA,BETA)) → plus(dx(ALPHA),dx(BETA)) (3)
dx(times(ALPHA,BETA)) → plus(times(BETA,dx(ALPHA)),times(ALPHA,dx(BETA))) (4)
dx(minus(ALPHA,BETA)) → minus(dx(ALPHA),dx(BETA)) (5)
dx(neg(ALPHA)) → neg(dx(ALPHA)) (6)
dx(div(ALPHA,BETA)) → minus(div(dx(ALPHA),BETA),times(ALPHA,div(dx(BETA),exp(BETA,two)))) (7)
dx(ln(ALPHA)) → div(dx(ALPHA),ALPHA) (8)
dx(exp(ALPHA,BETA)) → plus(times(BETA,times(exp(ALPHA,minus(BETA,one)),dx(ALPHA))),times(exp(ALPHA,BETA),times(ln(ALPHA),dx(BETA)))) (9)
The evaluation strategy is innermost.

Property / Task

Determine bounds on the runtime complexity.

Answer / Result

An upperbound for the complexity is O(n).

Proof (by AProVE @ termCOMP 2023)

1 Dependency Tuples

We get the following set of dependency tuples:
dx#(z0) → c (11)
originates from
dx(z0) → one (10)
dx#(a) → c1 (12)
originates from
dx(a) → zero (2)
dx#(plus(z0,z1)) → c2(dx#(z0),dx#(z1)) (14)
originates from
dx(plus(z0,z1)) → plus(dx(z0),dx(z1)) (13)
dx#(times(z0,z1)) → c3(dx#(z0),dx#(z1)) (16)
originates from
dx(times(z0,z1)) → plus(times(z1,dx(z0)),times(z0,dx(z1))) (15)
dx#(minus(z0,z1)) → c4(dx#(z0),dx#(z1)) (18)
originates from
dx(minus(z0,z1)) → minus(dx(z0),dx(z1)) (17)
dx#(neg(z0)) → c5(dx#(z0)) (20)
originates from
dx(neg(z0)) → neg(dx(z0)) (19)
dx#(div(z0,z1)) → c6(dx#(z0),dx#(z1)) (22)
originates from
dx(div(z0,z1)) → minus(div(dx(z0),z1),times(z0,div(dx(z1),exp(z1,two)))) (21)
dx#(ln(z0)) → c7(dx#(z0)) (24)
originates from
dx(ln(z0)) → div(dx(z0),z0) (23)
dx#(exp(z0,z1)) → c8(dx#(z0),dx#(z1)) (26)
originates from
dx(exp(z0,z1)) → plus(times(z1,times(exp(z0,minus(z1,one)),dx(z0))),times(exp(z0,z1),times(ln(z0),dx(z1)))) (25)
Moreover, we add the following terms to the innermost strategy.
dx#(z0)
dx#(a)
dx#(plus(z0,z1))
dx#(times(z0,z1))
dx#(minus(z0,z1))
dx#(neg(z0))
dx#(div(z0,z1))
dx#(ln(z0))
dx#(exp(z0,z1))

1.1 Usable Rules

We remove the following rules since they are not usable.
dx(z0) → one (10)
dx(a) → zero (2)
dx(plus(z0,z1)) → plus(dx(z0),dx(z1)) (13)
dx(times(z0,z1)) → plus(times(z1,dx(z0)),times(z0,dx(z1))) (15)
dx(minus(z0,z1)) → minus(dx(z0),dx(z1)) (17)
dx(neg(z0)) → neg(dx(z0)) (19)
dx(div(z0,z1)) → minus(div(dx(z0),z1),times(z0,div(dx(z1),exp(z1,two)))) (21)
dx(ln(z0)) → div(dx(z0),z0) (23)
dx(exp(z0,z1)) → plus(times(z1,times(exp(z0,minus(z1,one)),dx(z0))),times(exp(z0,z1),times(ln(z0),dx(z1)))) (25)

1.1.1 Rule Shifting

The rules
dx#(a) → c1 (12)
dx#(times(z0,z1)) → c3(dx#(z0),dx#(z1)) (16)
dx#(minus(z0,z1)) → c4(dx#(z0),dx#(z1)) (18)
dx#(neg(z0)) → c5(dx#(z0)) (20)
dx#(div(z0,z1)) → c6(dx#(z0),dx#(z1)) (22)
dx#(ln(z0)) → c7(dx#(z0)) (24)
dx#(exp(z0,z1)) → c8(dx#(z0),dx#(z1)) (26)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c3(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c4(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c5(x1)] = 1 · x1 + 0
[c6(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c7(x1)] = 1 · x1 + 0
[c8(x1, x2)] = 1 · x1 + 0 + 1 · x2
[dx#(x1)] = 3 · x1 + 0
[a] = 1
[plus(x1, x2)] = 1 · x1 + 0 + 1 · x2
[times(x1, x2)] = 2 + 1 · x1 + 1 · x2
[minus(x1, x2)] = 2 + 1 · x1 + 1 · x2
[neg(x1)] = 3 + 1 · x1
[div(x1, x2)] = 3 + 1 · x1 + 1 · x2
[ln(x1)] = 3 + 1 · x1
[exp(x1, x2)] = 2 + 1 · x1 + 1 · x2
which has the intended complexity. Here, only the following usable rules have been considered:
dx#(z0) → c (11)
dx#(a) → c1 (12)
dx#(plus(z0,z1)) → c2(dx#(z0),dx#(z1)) (14)
dx#(times(z0,z1)) → c3(dx#(z0),dx#(z1)) (16)
dx#(minus(z0,z1)) → c4(dx#(z0),dx#(z1)) (18)
dx#(neg(z0)) → c5(dx#(z0)) (20)
dx#(div(z0,z1)) → c6(dx#(z0),dx#(z1)) (22)
dx#(ln(z0)) → c7(dx#(z0)) (24)
dx#(exp(z0,z1)) → c8(dx#(z0),dx#(z1)) (26)

1.1.1.1 Rule Shifting

The rules
dx#(z0) → c (11)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c3(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c4(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c5(x1)] = 1 · x1 + 0
[c6(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c7(x1)] = 1 · x1 + 0
[c8(x1, x2)] = 1 · x1 + 0 + 1 · x2
[dx#(x1)] = 1 + 1 · x1
[a] = 0
[plus(x1, x2)] = 1 + 1 · x1 + 1 · x2
[times(x1, x2)] = 1 + 1 · x1 + 1 · x2
[minus(x1, x2)] = 1 + 1 · x1 + 1 · x2
[neg(x1)] = 1 · x1 + 0
[div(x1, x2)] = 1 + 1 · x1 + 1 · x2
[ln(x1)] = 1 · x1 + 0
[exp(x1, x2)] = 1 + 1 · x1 + 1 · x2
which has the intended complexity. Here, only the following usable rules have been considered:
dx#(z0) → c (11)
dx#(a) → c1 (12)
dx#(plus(z0,z1)) → c2(dx#(z0),dx#(z1)) (14)
dx#(times(z0,z1)) → c3(dx#(z0),dx#(z1)) (16)
dx#(minus(z0,z1)) → c4(dx#(z0),dx#(z1)) (18)
dx#(neg(z0)) → c5(dx#(z0)) (20)
dx#(div(z0,z1)) → c6(dx#(z0),dx#(z1)) (22)
dx#(ln(z0)) → c7(dx#(z0)) (24)
dx#(exp(z0,z1)) → c8(dx#(z0),dx#(z1)) (26)

1.1.1.1.1 Rule Shifting

The rules
dx#(plus(z0,z1)) → c2(dx#(z0),dx#(z1)) (14)
are strictly oriented by the following linear polynomial interpretation over the naturals
[c] = 0
[c1] = 0
[c2(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c3(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c4(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c5(x1)] = 1 · x1 + 0
[c6(x1, x2)] = 1 · x1 + 0 + 1 · x2
[c7(x1)] = 1 · x1 + 0
[c8(x1, x2)] = 1 · x1 + 0 + 1 · x2
[dx#(x1)] = 1 · x1 + 0
[a] = 0
[plus(x1, x2)] = 1 + 1 · x1 + 1 · x2
[times(x1, x2)] = 1 + 1 · x1 + 1 · x2
[minus(x1, x2)] = 1 + 1 · x1 + 1 · x2
[neg(x1)] = 1 · x1 + 0
[div(x1, x2)] = 1 · x1 + 0 + 1 · x2
[ln(x1)] = 1 · x1 + 0
[exp(x1, x2)] = 1 · x1 + 0 + 1 · x2
which has the intended complexity. Here, only the following usable rules have been considered:
dx#(z0) → c (11)
dx#(a) → c1 (12)
dx#(plus(z0,z1)) → c2(dx#(z0),dx#(z1)) (14)
dx#(times(z0,z1)) → c3(dx#(z0),dx#(z1)) (16)
dx#(minus(z0,z1)) → c4(dx#(z0),dx#(z1)) (18)
dx#(neg(z0)) → c5(dx#(z0)) (20)
dx#(div(z0,z1)) → c6(dx#(z0),dx#(z1)) (22)
dx#(ln(z0)) → c7(dx#(z0)) (24)
dx#(exp(z0,z1)) → c8(dx#(z0),dx#(z1)) (26)

1.1.1.1.1.1 R is empty

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