Certification Problem

Input (TPDB TRS_Standard/Transformed_CSR_04/Ex9_BLR02_C)

The rewrite relation of the following TRS is considered.

active(filter(cons(X,Y),0,M)) mark(cons(0,filter(Y,M,M))) (1)
active(filter(cons(X,Y),s(N),M)) mark(cons(X,filter(Y,N,M))) (2)
active(sieve(cons(0,Y))) mark(cons(0,sieve(Y))) (3)
active(sieve(cons(s(N),Y))) mark(cons(s(N),sieve(filter(Y,N,N)))) (4)
active(nats(N)) mark(cons(N,nats(s(N)))) (5)
active(zprimes) mark(sieve(nats(s(s(0))))) (6)
active(filter(X1,X2,X3)) filter(active(X1),X2,X3) (7)
active(filter(X1,X2,X3)) filter(X1,active(X2),X3) (8)
active(filter(X1,X2,X3)) filter(X1,X2,active(X3)) (9)
active(cons(X1,X2)) cons(active(X1),X2) (10)
active(s(X)) s(active(X)) (11)
active(sieve(X)) sieve(active(X)) (12)
active(nats(X)) nats(active(X)) (13)
filter(mark(X1),X2,X3) mark(filter(X1,X2,X3)) (14)
filter(X1,mark(X2),X3) mark(filter(X1,X2,X3)) (15)
filter(X1,X2,mark(X3)) mark(filter(X1,X2,X3)) (16)
cons(mark(X1),X2) mark(cons(X1,X2)) (17)
s(mark(X)) mark(s(X)) (18)
sieve(mark(X)) mark(sieve(X)) (19)
nats(mark(X)) mark(nats(X)) (20)
proper(filter(X1,X2,X3)) filter(proper(X1),proper(X2),proper(X3)) (21)
proper(cons(X1,X2)) cons(proper(X1),proper(X2)) (22)
proper(0) ok(0) (23)
proper(s(X)) s(proper(X)) (24)
proper(sieve(X)) sieve(proper(X)) (25)
proper(nats(X)) nats(proper(X)) (26)
proper(zprimes) ok(zprimes) (27)
filter(ok(X1),ok(X2),ok(X3)) ok(filter(X1,X2,X3)) (28)
cons(ok(X1),ok(X2)) ok(cons(X1,X2)) (29)
s(ok(X)) ok(s(X)) (30)
sieve(ok(X)) ok(sieve(X)) (31)
nats(ok(X)) ok(nats(X)) (32)
top(mark(X)) top(proper(X)) (33)
top(ok(X)) top(active(X)) (34)

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.
active#(filter(cons(X,Y),0,M)) cons#(0,filter(Y,M,M)) (35)
active#(filter(cons(X,Y),0,M)) filter#(Y,M,M) (36)
active#(filter(cons(X,Y),s(N),M)) cons#(X,filter(Y,N,M)) (37)
active#(filter(cons(X,Y),s(N),M)) filter#(Y,N,M) (38)
active#(sieve(cons(0,Y))) cons#(0,sieve(Y)) (39)
active#(sieve(cons(0,Y))) sieve#(Y) (40)
active#(sieve(cons(s(N),Y))) cons#(s(N),sieve(filter(Y,N,N))) (41)
active#(sieve(cons(s(N),Y))) sieve#(filter(Y,N,N)) (42)
active#(sieve(cons(s(N),Y))) filter#(Y,N,N) (43)
active#(nats(N)) cons#(N,nats(s(N))) (44)
active#(nats(N)) nats#(s(N)) (45)
active#(nats(N)) s#(N) (46)
active#(zprimes) sieve#(nats(s(s(0)))) (47)
active#(zprimes) nats#(s(s(0))) (48)
active#(zprimes) s#(s(0)) (49)
active#(zprimes) s#(0) (50)
active#(filter(X1,X2,X3)) filter#(active(X1),X2,X3) (51)
active#(filter(X1,X2,X3)) active#(X1) (52)
active#(filter(X1,X2,X3)) filter#(X1,active(X2),X3) (53)
active#(filter(X1,X2,X3)) active#(X2) (54)
active#(filter(X1,X2,X3)) filter#(X1,X2,active(X3)) (55)
active#(filter(X1,X2,X3)) active#(X3) (56)
active#(cons(X1,X2)) cons#(active(X1),X2) (57)
active#(cons(X1,X2)) active#(X1) (58)
active#(s(X)) s#(active(X)) (59)
active#(s(X)) active#(X) (60)
active#(sieve(X)) sieve#(active(X)) (61)
active#(sieve(X)) active#(X) (62)
active#(nats(X)) nats#(active(X)) (63)
active#(nats(X)) active#(X) (64)
filter#(mark(X1),X2,X3) filter#(X1,X2,X3) (65)
filter#(X1,mark(X2),X3) filter#(X1,X2,X3) (66)
filter#(X1,X2,mark(X3)) filter#(X1,X2,X3) (67)
cons#(mark(X1),X2) cons#(X1,X2) (68)
s#(mark(X)) s#(X) (69)
sieve#(mark(X)) sieve#(X) (70)
nats#(mark(X)) nats#(X) (71)
proper#(filter(X1,X2,X3)) filter#(proper(X1),proper(X2),proper(X3)) (72)
proper#(filter(X1,X2,X3)) proper#(X1) (73)
proper#(filter(X1,X2,X3)) proper#(X2) (74)
proper#(filter(X1,X2,X3)) proper#(X3) (75)
proper#(cons(X1,X2)) cons#(proper(X1),proper(X2)) (76)
proper#(cons(X1,X2)) proper#(X1) (77)
proper#(cons(X1,X2)) proper#(X2) (78)
proper#(s(X)) s#(proper(X)) (79)
proper#(s(X)) proper#(X) (80)
proper#(sieve(X)) sieve#(proper(X)) (81)
proper#(sieve(X)) proper#(X) (82)
proper#(nats(X)) nats#(proper(X)) (83)
proper#(nats(X)) proper#(X) (84)
filter#(ok(X1),ok(X2),ok(X3)) filter#(X1,X2,X3) (85)
cons#(ok(X1),ok(X2)) cons#(X1,X2) (86)
s#(ok(X)) s#(X) (87)
sieve#(ok(X)) sieve#(X) (88)
nats#(ok(X)) nats#(X) (89)
top#(mark(X)) top#(proper(X)) (90)
top#(mark(X)) proper#(X) (91)
top#(ok(X)) top#(active(X)) (92)
top#(ok(X)) active#(X) (93)

1.1 Dependency Graph Processor

The dependency pairs are split into 8 components.