Certification Problem

Input (TPDB TRS_Innermost/Transformed_CSR_innermost_04/Ex9_BLR02_GM)

The rewrite relation of the following TRS is considered.

a__filter(cons(X,Y),0,M) cons(0,filter(Y,M,M)) (1)
a__filter(cons(X,Y),s(N),M) cons(mark(X),filter(Y,N,M)) (2)
a__sieve(cons(0,Y)) cons(0,sieve(Y)) (3)
a__sieve(cons(s(N),Y)) cons(s(mark(N)),sieve(filter(Y,N,N))) (4)
a__nats(N) cons(mark(N),nats(s(N))) (5)
a__zprimes a__sieve(a__nats(s(s(0)))) (6)
mark(filter(X1,X2,X3)) a__filter(mark(X1),mark(X2),mark(X3)) (7)
mark(sieve(X)) a__sieve(mark(X)) (8)
mark(nats(X)) a__nats(mark(X)) (9)
mark(zprimes) a__zprimes (10)
mark(cons(X1,X2)) cons(mark(X1),X2) (11)
mark(0) 0 (12)
mark(s(X)) s(mark(X)) (13)
a__filter(X1,X2,X3) filter(X1,X2,X3) (14)
a__sieve(X) sieve(X) (15)
a__nats(X) nats(X) (16)
a__zprimes zprimes (17)
The evaluation strategy is innermost.

Property / Task

Prove or disprove termination.

Answer / Result

Yes.

Proof (by AProVE @ termCOMP 2023)

1 Dependency Pair Transformation

The following set of initial dependency pairs has been identified.
a__filter#(cons(X,Y),s(N),M) mark#(X) (18)
a__sieve#(cons(s(N),Y)) mark#(N) (19)
a__nats#(N) mark#(N) (20)
a__zprimes# a__sieve#(a__nats(s(s(0)))) (21)
a__zprimes# a__nats#(s(s(0))) (22)
mark#(filter(X1,X2,X3)) a__filter#(mark(X1),mark(X2),mark(X3)) (23)
mark#(filter(X1,X2,X3)) mark#(X1) (24)
mark#(filter(X1,X2,X3)) mark#(X2) (25)
mark#(filter(X1,X2,X3)) mark#(X3) (26)
mark#(sieve(X)) a__sieve#(mark(X)) (27)
mark#(sieve(X)) mark#(X) (28)
mark#(nats(X)) a__nats#(mark(X)) (29)
mark#(nats(X)) mark#(X) (30)
mark#(zprimes) a__zprimes# (31)
mark#(cons(X1,X2)) mark#(X1) (32)
mark#(s(X)) mark#(X) (33)

1.1 Reduction Pair Processor

Using the linear polynomial interpretation over the naturals
[a__filter#(x1, x2, x3)] = 2 + 2 · x1
[a__nats#(x1)] = 1 + 2 · x1
[a__sieve#(x1)] = -2 + 2 · x1
[a__nats(x1)] = 2 + x1
[cons(x1, x2)] = 2 + x1
[mark(x1)] = x1
[nats(x1)] = 2 + x1
[s(x1)] = 2 · x1
[filter(x1, x2, x3)] = 1 + x1 + x2 + x3
[a__filter(x1, x2, x3)] = 1 + x1 + x2 + x3
[sieve(x1)] = x1
[a__sieve(x1)] = x1
[zprimes] = 2
[a__zprimes] = 2
[0] = 0
[mark#(x1)] = 1 + 2 · x1
[a__zprimes#] = 2
the pairs
a__filter#(cons(X,Y),s(N),M) mark#(X) (18)
a__sieve#(cons(s(N),Y)) mark#(N) (19)
a__zprimes# a__nats#(s(s(0))) (22)
mark#(filter(X1,X2,X3)) a__filter#(mark(X1),mark(X2),mark(X3)) (23)
mark#(filter(X1,X2,X3)) mark#(X1) (24)
mark#(filter(X1,X2,X3)) mark#(X2) (25)
mark#(filter(X1,X2,X3)) mark#(X3) (26)
mark#(sieve(X)) a__sieve#(mark(X)) (27)
mark#(nats(X)) a__nats#(mark(X)) (29)
mark#(nats(X)) mark#(X) (30)
mark#(zprimes) a__zprimes# (31)
mark#(cons(X1,X2)) mark#(X1) (32)
could be deleted.

1.1.1 Dependency Graph Processor

The dependency pairs are split into 1 component.