Certification Problem

Input (TPDB TRS_Standard/Transformed_CSR_04/Ex5_DLMMU04_iGM)

The rewrite relation of the following TRS is considered.

active(pairNs) mark(cons(0,incr(oddNs))) (1)
active(oddNs) mark(incr(pairNs)) (2)
active(incr(cons(X,XS))) mark(cons(s(X),incr(XS))) (3)
active(take(0,XS)) mark(nil) (4)
active(take(s(N),cons(X,XS))) mark(cons(X,take(N,XS))) (5)
active(zip(nil,XS)) mark(nil) (6)
active(zip(X,nil)) mark(nil) (7)
active(zip(cons(X,XS),cons(Y,YS))) mark(cons(pair(X,Y),zip(XS,YS))) (8)
active(tail(cons(X,XS))) mark(XS) (9)
active(repItems(nil)) mark(nil) (10)
active(repItems(cons(X,XS))) mark(cons(X,cons(X,repItems(XS)))) (11)
mark(pairNs) active(pairNs) (12)
mark(cons(X1,X2)) active(cons(mark(X1),X2)) (13)
mark(0) active(0) (14)
mark(incr(X)) active(incr(mark(X))) (15)
mark(oddNs) active(oddNs) (16)
mark(s(X)) active(s(mark(X))) (17)
mark(take(X1,X2)) active(take(mark(X1),mark(X2))) (18)
mark(nil) active(nil) (19)
mark(zip(X1,X2)) active(zip(mark(X1),mark(X2))) (20)
mark(pair(X1,X2)) active(pair(mark(X1),mark(X2))) (21)
mark(tail(X)) active(tail(mark(X))) (22)
mark(repItems(X)) active(repItems(mark(X))) (23)
cons(mark(X1),X2) cons(X1,X2) (24)
cons(X1,mark(X2)) cons(X1,X2) (25)
cons(active(X1),X2) cons(X1,X2) (26)
cons(X1,active(X2)) cons(X1,X2) (27)
incr(mark(X)) incr(X) (28)
incr(active(X)) incr(X) (29)
s(mark(X)) s(X) (30)
s(active(X)) s(X) (31)
take(mark(X1),X2) take(X1,X2) (32)
take(X1,mark(X2)) take(X1,X2) (33)
take(active(X1),X2) take(X1,X2) (34)
take(X1,active(X2)) take(X1,X2) (35)
zip(mark(X1),X2) zip(X1,X2) (36)
zip(X1,mark(X2)) zip(X1,X2) (37)
zip(active(X1),X2) zip(X1,X2) (38)
zip(X1,active(X2)) zip(X1,X2) (39)
pair(mark(X1),X2) pair(X1,X2) (40)
pair(X1,mark(X2)) pair(X1,X2) (41)
pair(active(X1),X2) pair(X1,X2) (42)
pair(X1,active(X2)) pair(X1,X2) (43)
tail(mark(X)) tail(X) (44)
tail(active(X)) tail(X) (45)
repItems(mark(X)) repItems(X) (46)
repItems(active(X)) repItems(X) (47)

Property / Task

Prove or disprove termination.

Answer / Result

Yes.

Proof (by ttt2 @ termCOMP 2023)

1 Rule Removal

Using the linear polynomial interpretation over (3 x 3)-matrices with strict dimension 1 over the naturals
[incr(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[take(x1, x2)] =
1 1 0
0 1 0
0 1 0
· x1 +
1 0 0
0 1 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[active(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[oddNs] =
1 0 0
0 0 0
0 0 0
[cons(x1, x2)] =
1 0 0
1 0 0
0 0 0
· x1 +
1 0 0
0 1 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[zip(x1, x2)] =
1 0 0
1 0 0
0 0 0
· x1 +
1 0 0
1 1 0
1 0 0
· x2 +
0 0 0
1 0 0
0 0 0
[pairNs] =
1 0 0
0 0 0
0 0 0
[s(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
1 0 0
0 0 0
[tail(x1)] =
1 0 0
1 1 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
[pair(x1, x2)] =
1 0 0
0 0 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[nil] =
1 0 0
0 0 0
0 0 0
[repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
1 0 0
1 0 0
0 0 0
[mark(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[0] =
0 0 0
1 0 0
0 0 0
all of the following rules can be deleted.
active(take(s(N),cons(X,XS))) mark(cons(X,take(N,XS))) (5)
active(tail(cons(X,XS))) mark(XS) (9)
active(repItems(nil)) mark(nil) (10)

1.1 Dependency Pair Transformation

The following set of initial dependency pairs has been identified.
active#(pairNs) incr#(oddNs) (48)
active#(pairNs) cons#(0,incr(oddNs)) (49)
active#(pairNs) mark#(cons(0,incr(oddNs))) (50)
active#(oddNs) incr#(pairNs) (51)
active#(oddNs) mark#(incr(pairNs)) (52)
active#(incr(cons(X,XS))) incr#(XS) (53)
active#(incr(cons(X,XS))) s#(X) (54)
active#(incr(cons(X,XS))) cons#(s(X),incr(XS)) (55)
active#(incr(cons(X,XS))) mark#(cons(s(X),incr(XS))) (56)
active#(take(0,XS)) mark#(nil) (57)
active#(zip(nil,XS)) mark#(nil) (58)
active#(zip(X,nil)) mark#(nil) (59)
active#(zip(cons(X,XS),cons(Y,YS))) zip#(XS,YS) (60)
active#(zip(cons(X,XS),cons(Y,YS))) pair#(X,Y) (61)
active#(zip(cons(X,XS),cons(Y,YS))) cons#(pair(X,Y),zip(XS,YS)) (62)
active#(zip(cons(X,XS),cons(Y,YS))) mark#(cons(pair(X,Y),zip(XS,YS))) (63)
active#(repItems(cons(X,XS))) repItems#(XS) (64)
active#(repItems(cons(X,XS))) cons#(X,repItems(XS)) (65)
active#(repItems(cons(X,XS))) cons#(X,cons(X,repItems(XS))) (66)
active#(repItems(cons(X,XS))) mark#(cons(X,cons(X,repItems(XS)))) (67)
mark#(pairNs) active#(pairNs) (68)
mark#(cons(X1,X2)) mark#(X1) (69)
mark#(cons(X1,X2)) cons#(mark(X1),X2) (70)
mark#(cons(X1,X2)) active#(cons(mark(X1),X2)) (71)
mark#(0) active#(0) (72)
mark#(incr(X)) mark#(X) (73)
mark#(incr(X)) incr#(mark(X)) (74)
mark#(incr(X)) active#(incr(mark(X))) (75)
mark#(oddNs) active#(oddNs) (76)
mark#(s(X)) mark#(X) (77)
mark#(s(X)) s#(mark(X)) (78)
mark#(s(X)) active#(s(mark(X))) (79)
mark#(take(X1,X2)) mark#(X2) (80)
mark#(take(X1,X2)) mark#(X1) (81)
mark#(take(X1,X2)) take#(mark(X1),mark(X2)) (82)
mark#(take(X1,X2)) active#(take(mark(X1),mark(X2))) (83)
mark#(nil) active#(nil) (84)
mark#(zip(X1,X2)) mark#(X2) (85)
mark#(zip(X1,X2)) mark#(X1) (86)
mark#(zip(X1,X2)) zip#(mark(X1),mark(X2)) (87)
mark#(zip(X1,X2)) active#(zip(mark(X1),mark(X2))) (88)
mark#(pair(X1,X2)) mark#(X2) (89)
mark#(pair(X1,X2)) mark#(X1) (90)
mark#(pair(X1,X2)) pair#(mark(X1),mark(X2)) (91)
mark#(pair(X1,X2)) active#(pair(mark(X1),mark(X2))) (92)
mark#(tail(X)) mark#(X) (93)
mark#(tail(X)) tail#(mark(X)) (94)
mark#(tail(X)) active#(tail(mark(X))) (95)
mark#(repItems(X)) mark#(X) (96)
mark#(repItems(X)) repItems#(mark(X)) (97)
mark#(repItems(X)) active#(repItems(mark(X))) (98)
cons#(mark(X1),X2) cons#(X1,X2) (99)
cons#(X1,mark(X2)) cons#(X1,X2) (100)
cons#(active(X1),X2) cons#(X1,X2) (101)
cons#(X1,active(X2)) cons#(X1,X2) (102)
incr#(mark(X)) incr#(X) (103)
incr#(active(X)) incr#(X) (104)
s#(mark(X)) s#(X) (105)
s#(active(X)) s#(X) (106)
take#(mark(X1),X2) take#(X1,X2) (107)
take#(X1,mark(X2)) take#(X1,X2) (108)
take#(active(X1),X2) take#(X1,X2) (109)
take#(X1,active(X2)) take#(X1,X2) (110)
zip#(mark(X1),X2) zip#(X1,X2) (111)
zip#(X1,mark(X2)) zip#(X1,X2) (112)
zip#(active(X1),X2) zip#(X1,X2) (113)
zip#(X1,active(X2)) zip#(X1,X2) (114)
pair#(mark(X1),X2) pair#(X1,X2) (115)
pair#(X1,mark(X2)) pair#(X1,X2) (116)
pair#(active(X1),X2) pair#(X1,X2) (117)
pair#(X1,active(X2)) pair#(X1,X2) (118)
tail#(mark(X)) tail#(X) (119)
tail#(active(X)) tail#(X) (120)
repItems#(mark(X)) repItems#(X) (121)
repItems#(active(X)) repItems#(X) (122)

1.1.1 Dependency Graph Processor

The dependency pairs are split into 9 components.