Certification Problem

Input (TPDB TRS_Standard/Transformed_CSR_04/Ex5_DLMMU04_GM)

The rewrite relation of the following TRS is considered.

a__pairNs cons(0,incr(oddNs)) (1)
a__oddNs a__incr(a__pairNs) (2)
a__incr(cons(X,XS)) cons(s(mark(X)),incr(XS)) (3)
a__take(0,XS) nil (4)
a__take(s(N),cons(X,XS)) cons(mark(X),take(N,XS)) (5)
a__zip(nil,XS) nil (6)
a__zip(X,nil) nil (7)
a__zip(cons(X,XS),cons(Y,YS)) cons(pair(mark(X),mark(Y)),zip(XS,YS)) (8)
a__tail(cons(X,XS)) mark(XS) (9)
a__repItems(nil) nil (10)
a__repItems(cons(X,XS)) cons(mark(X),cons(X,repItems(XS))) (11)
mark(pairNs) a__pairNs (12)
mark(incr(X)) a__incr(mark(X)) (13)
mark(oddNs) a__oddNs (14)
mark(take(X1,X2)) a__take(mark(X1),mark(X2)) (15)
mark(zip(X1,X2)) a__zip(mark(X1),mark(X2)) (16)
mark(tail(X)) a__tail(mark(X)) (17)
mark(repItems(X)) a__repItems(mark(X)) (18)
mark(cons(X1,X2)) cons(mark(X1),X2) (19)
mark(0) 0 (20)
mark(s(X)) s(mark(X)) (21)
mark(nil) nil (22)
mark(pair(X1,X2)) pair(mark(X1),mark(X2)) (23)
a__pairNs pairNs (24)
a__incr(X) incr(X) (25)
a__oddNs oddNs (26)
a__take(X1,X2) take(X1,X2) (27)
a__zip(X1,X2) zip(X1,X2) (28)
a__tail(X) tail(X) (29)
a__repItems(X) repItems(X) (30)

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
[pairNs] =
0 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
[a__tail(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[s(x1)] =
1 0 0
1 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[0] =
0 0 0
0 0 0
0 0 0
[incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[a__repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
[tail(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
[a__oddNs] =
0 0 0
0 0 0
0 0 0
[nil] =
0 0 0
0 0 0
0 0 0
[a__pairNs] =
0 0 0
0 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
[zip(x1, x2)] =
1 0 0
1 1 0
0 0 0
· x1 +
1 0 0
0 1 0
0 0 0
· x2 +
1 0 0
0 0 0
0 0 0
[a__zip(x1, x2)] =
1 0 1
1 1 0
0 0 0
· x1 +
1 0 0
0 1 0
0 0 0
· x2 +
1 0 0
0 0 0
0 0 0
[take(x1, x2)] =
1 1 0
0 0 0
0 0 0
· x1 +
1 1 0
0 1 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[a__take(x1, x2)] =
1 1 1
0 0 0
0 0 0
· x1 +
1 1 0
0 1 0
0 0 0
· x2 +
0 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
[a__incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[oddNs] =
0 0 0
0 0 0
0 0 0
all of the following rules can be deleted.
a__zip(nil,XS) nil (6)
a__zip(X,nil) nil (7)
a__repItems(nil) nil (10)

1.1 Rule Removal

Using the linear polynomial interpretation over (3 x 3)-matrices with strict dimension 1 over the naturals
[pairNs] =
0 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
[a__tail(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
1 0 0
[s(x1)] =
1 0 0
0 1 0
0 0 1
· x1 +
0 0 0
0 0 0
0 0 0
[0] =
0 0 0
1 0 0
1 0 0
[incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[a__repItems(x1)] =
1 1 0
1 1 0
0 0 1
· x1 +
1 0 0
0 0 0
0 0 0
[tail(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
1 0 0
[repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
[a__oddNs] =
0 0 0
0 0 0
1 0 0
[nil] =
0 0 0
0 0 0
1 0 0
[a__pairNs] =
0 0 0
0 0 0
0 0 0
[mark(x1)] =
1 0 0
0 1 0
0 0 0
· x1 +
0 0 0
0 0 0
1 0 0
[zip(x1, x2)] =
1 0 0
1 0 0
0 0 0
· x1 +
1 1 0
0 1 0
0 0 1
· x2 +
0 0 0
1 0 0
0 0 0
[a__zip(x1, x2)] =
1 0 0
1 0 0
0 0 0
· x1 +
1 1 0
0 1 0
0 0 1
· x2 +
0 0 0
1 0 0
0 0 0
[take(x1, x2)] =
1 1 0
0 0 0
0 0 1
· x1 +
1 0 0
0 1 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[a__take(x1, x2)] =
1 1 0
0 0 0
0 0 1
· x1 +
1 0 0
0 1 0
0 0 0
· x2 +
0 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 1
· x2 +
0 0 0
0 0 0
0 0 0
[a__incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[oddNs] =
0 0 0
0 0 0
1 0 0
all of the following rules can be deleted.
a__take(0,XS) nil (4)

1.1.1 Rule Removal

Using the linear polynomial interpretation over (3 x 3)-matrices with strict dimension 1 over the naturals
[pairNs] =
0 0 0
1 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
[a__tail(x1)] =
1 1 1
0 1 0
0 0 1
· x1 +
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
[0] =
0 0 0
0 0 0
0 0 0
[incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
1 0 0
0 0 0
[a__repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[tail(x1)] =
1 1 0
0 1 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
[repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[a__oddNs] =
0 0 0
1 0 0
0 0 0
[nil] =
0 0 0
0 0 0
0 0 0
[a__pairNs] =
0 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
[zip(x1, x2)] =
1 1 0
1 0 0
0 0 0
· x1 +
1 0 0
0 1 0
0 0 0
· x2 +
0 0 0
1 0 0
0 0 0
[a__zip(x1, x2)] =
1 1 0
1 0 0
0 0 0
· x1 +
1 0 1
0 1 0
0 0 0
· x2 +
0 0 0
1 0 0
0 0 0
[take(x1, x2)] =
1 0 0
0 0 0
0 0 0
· x1 +
1 1 0
0 1 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[a__take(x1, x2)] =
1 0 0
0 0 0
0 0 0
· x1 +
1 1 0
0 1 0
0 0 0
· x2 +
0 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
[a__incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
1 0 0
0 0 0
[oddNs] =
0 0 0
1 0 0
0 0 0
all of the following rules can be deleted.
a__tail(cons(X,XS)) mark(XS) (9)

1.1.1.1 Rule Removal

Using the linear polynomial interpretation over (3 x 3)-matrices with strict dimension 1 over the naturals
[pairNs] =
0 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
[a__tail(x1)] =
1 0 0
0 0 1
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[s(x1)] =
1 0 0
0 1 1
0 0 0
· x1 +
0 0 0
1 0 0
0 0 0
[0] =
0 0 0
1 0 0
0 0 0
[incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[a__repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[tail(x1)] =
1 0 0
0 0 1
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[repItems(x1)] =
1 1 0
1 1 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[a__oddNs] =
0 0 0
1 0 0
0 0 0
[nil] =
0 0 0
0 0 0
0 0 0
[a__pairNs] =
0 0 0
0 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
[zip(x1, x2)] =
1 0 0
1 0 0
0 0 0
· x1 +
1 0 0
1 1 0
0 0 0
· x2 +
0 0 0
1 0 0
0 0 0
[a__zip(x1, x2)] =
1 0 0
1 0 0
0 0 0
· x1 +
1 0 1
1 1 1
0 0 0
· x2 +
0 0 0
1 0 0
0 0 0
[take(x1, x2)] =
1 1 0
0 0 0
0 0 0
· x1 +
1 1 0
1 1 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[a__take(x1, x2)] =
1 1 0
0 0 0
0 0 0
· x1 +
1 1 0
1 1 0
0 0 0
· x2 +
0 0 0
0 0 0
0 0 0
[pair(x1, x2)] =
1 0 1
0 0 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
· x2 +
0 0 0
1 0 0
0 0 0
[a__incr(x1)] =
1 0 0
1 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[oddNs] =
0 0 0
1 0 0
0 0 0
all of the following rules can be deleted.
a__take(s(N),cons(X,XS)) cons(mark(X),take(N,XS)) (5)

1.1.1.1.1 Dependency Pair Transformation

The following set of initial dependency pairs has been identified.
a__oddNs# a__pairNs# (31)
a__oddNs# a__incr#(a__pairNs) (32)
a__incr#(cons(X,XS)) mark#(X) (33)
a__zip#(cons(X,XS),cons(Y,YS)) mark#(Y) (34)
a__zip#(cons(X,XS),cons(Y,YS)) mark#(X) (35)
a__repItems#(cons(X,XS)) mark#(X) (36)
mark#(pairNs) a__pairNs# (37)
mark#(incr(X)) mark#(X) (38)
mark#(incr(X)) a__incr#(mark(X)) (39)
mark#(oddNs) a__oddNs# (40)
mark#(take(X1,X2)) mark#(X2) (41)
mark#(take(X1,X2)) mark#(X1) (42)
mark#(take(X1,X2)) a__take#(mark(X1),mark(X2)) (43)
mark#(zip(X1,X2)) mark#(X2) (44)
mark#(zip(X1,X2)) mark#(X1) (45)
mark#(zip(X1,X2)) a__zip#(mark(X1),mark(X2)) (46)
mark#(tail(X)) mark#(X) (47)
mark#(tail(X)) a__tail#(mark(X)) (48)
mark#(repItems(X)) mark#(X) (49)
mark#(repItems(X)) a__repItems#(mark(X)) (50)
mark#(cons(X1,X2)) mark#(X1) (51)
mark#(s(X)) mark#(X) (52)
mark#(pair(X1,X2)) mark#(X2) (53)
mark#(pair(X1,X2)) mark#(X1) (54)

1.1.1.1.1.1 Dependency Graph Processor

The dependency pairs are split into 1 component.