Certification Problem

Input (TPDB TRS_Standard/Transformed_CSR_04/PALINDROME_nokinds_C)

The rewrite relation of the following TRS is considered.

active(__(__(X,Y),Z)) mark(__(X,__(Y,Z))) (1)
active(__(X,nil)) mark(X) (2)
active(__(nil,X)) mark(X) (3)
active(and(tt,X)) mark(X) (4)
active(isList(V)) mark(isNeList(V)) (5)
active(isList(nil)) mark(tt) (6)
active(isList(__(V1,V2))) mark(and(isList(V1),isList(V2))) (7)
active(isNeList(V)) mark(isQid(V)) (8)
active(isNeList(__(V1,V2))) mark(and(isList(V1),isNeList(V2))) (9)
active(isNeList(__(V1,V2))) mark(and(isNeList(V1),isList(V2))) (10)
active(isNePal(V)) mark(isQid(V)) (11)
active(isNePal(__(I,__(P,I)))) mark(and(isQid(I),isPal(P))) (12)
active(isPal(V)) mark(isNePal(V)) (13)
active(isPal(nil)) mark(tt) (14)
active(isQid(a)) mark(tt) (15)
active(isQid(e)) mark(tt) (16)
active(isQid(i)) mark(tt) (17)
active(isQid(o)) mark(tt) (18)
active(isQid(u)) mark(tt) (19)
active(__(X1,X2)) __(active(X1),X2) (20)
active(__(X1,X2)) __(X1,active(X2)) (21)
active(and(X1,X2)) and(active(X1),X2) (22)
__(mark(X1),X2) mark(__(X1,X2)) (23)
__(X1,mark(X2)) mark(__(X1,X2)) (24)
and(mark(X1),X2) mark(and(X1,X2)) (25)
proper(__(X1,X2)) __(proper(X1),proper(X2)) (26)
proper(nil) ok(nil) (27)
proper(and(X1,X2)) and(proper(X1),proper(X2)) (28)
proper(tt) ok(tt) (29)
proper(isList(X)) isList(proper(X)) (30)
proper(isNeList(X)) isNeList(proper(X)) (31)
proper(isQid(X)) isQid(proper(X)) (32)
proper(isNePal(X)) isNePal(proper(X)) (33)
proper(isPal(X)) isPal(proper(X)) (34)
proper(a) ok(a) (35)
proper(e) ok(e) (36)
proper(i) ok(i) (37)
proper(o) ok(o) (38)
proper(u) ok(u) (39)
__(ok(X1),ok(X2)) ok(__(X1,X2)) (40)
and(ok(X1),ok(X2)) ok(and(X1,X2)) (41)
isList(ok(X)) ok(isList(X)) (42)
isNeList(ok(X)) ok(isNeList(X)) (43)
isQid(ok(X)) ok(isQid(X)) (44)
isNePal(ok(X)) ok(isNePal(X)) (45)
isPal(ok(X)) ok(isPal(X)) (46)
top(mark(X)) top(proper(X)) (47)
top(ok(X)) top(active(X)) (48)

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
[top(x1)] =
1 0 0
0 0 0
1 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[tt] =
1 0 0
0 0 0
0 0 0
[u] =
1 0 0
0 0 0
0 0 0
[isQid(x1)] =
1 0 0
0 0 0
0 0 1
· x1 +
0 0 0
0 0 0
0 0 0
[active(x1)] =
1 0 0
0 0 1
1 0 0
· x1 +
0 0 0
0 0 0
1 0 0
[nil] =
1 0 0
0 0 0
0 0 0
[proper(x1)] =
1 0 0
0 1 0
1 0 0
· x1 +
0 0 0
0 0 0
1 0 0
[ok(x1)] =
1 0 0
0 0 0
1 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[and(x1, x2)] =
1 0 0
1 0 0
1 0 0
· x1 +
1 0 0
0 0 0
1 0 0
· x2 +
0 0 0
1 0 0
1 0 0
[isPal(x1)] =
1 0 0
0 0 0
1 0 0
· x1 +
1 0 0
0 0 0
1 0 0
[__(x1, x2)] =
1 0 0
0 0 0
1 0 0
· x1 +
1 0 0
0 0 0
1 0 0
· x2 +
0 0 0
0 0 0
1 0 0
[isNeList(x1)] =
1 0 0
0 0 0
0 0 1
· x1 +
0 0 0
0 0 0
0 0 0
[o] =
1 0 0
0 0 0
0 0 0
[e] =
1 0 0
0 0 0
0 0 0
[a] =
1 0 0
0 0 0
0 0 0
[isNePal(x1)] =
1 0 0
0 0 0
0 0 1
· x1 +
1 0 0
0 0 0
1 0 0
[i] =
1 0 0
0 0 0
0 0 0
[isList(x1)] =
1 0 0
0 0 0
0 0 1
· x1 +
0 0 0
0 0 0
0 0 0
[mark(x1)] =
1 0 0
0 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
all of the following rules can be deleted.
active(__(X,nil)) mark(X) (2)
active(__(nil,X)) mark(X) (3)
active(and(tt,X)) mark(X) (4)
active(isNePal(V)) mark(isQid(V)) (11)
active(isPal(nil)) mark(tt) (14)

1.1 Rule Removal

Using the linear polynomial interpretation over (3 x 3)-matrices with strict dimension 1 over the naturals
[top(x1)] =
1 0 0
0 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[tt] =
0 0 0
0 0 0
0 0 0
[u] =
0 0 0
0 0 0
0 0 0
[isQid(x1)] =
1 0 0
0 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[active(x1)] =
1 0 0
0 0 1
0 1 0
· x1 +
0 0 0
0 0 0
0 0 0
[nil] =
0 0 0
0 0 0
0 0 0
[proper(x1)] =
1 0 0
0 0 1
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[ok(x1)] =
1 0 0
0 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[and(x1, x2)] =
1 0 0
0 0 0
0 0 0
· x1 +
1 0 0
0 0 1
0 0 1
· x2 +
0 0 0
0 0 0
0 0 0
[isPal(x1)] =
1 0 0
0 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
[__(x1, x2)] =
1 0 0
0 0 0
0 0 0
· x1 +
1 0 0
0 0 0
0 0 0
· x2 +
1 0 0
0 0 0
0 0 0
[isNeList(x1)] =
1 0 0
0 0 0
0 0 1
· x1 +
1 0 0
0 0 0
0 0 0
[o] =
1 0 0
0 0 0
1 0 0
[e] =
0 0 0
0 0 0
0 0 0
[a] =
0 0 0
0 0 0
0 0 0
[isNePal(x1)] =
1 0 0
0 1 0
0 0 1
· x1 +
0 0 0
0 0 0
0 0 0
[i] =
0 0 0
0 0 0
0 0 0
[isList(x1)] =
1 0 0
0 1 0
0 0 1
· x1 +
1 0 0
0 0 0
0 0 0
[mark(x1)] =
1 0 0
0 0 0
0 0 0
· x1 +
0 0 0
0 0 0
0 0 0
all of the following rules can be deleted.
active(isList(nil)) mark(tt) (6)
active(isNeList(V)) mark(isQid(V)) (8)
active(isNePal(__(I,__(P,I)))) mark(and(isQid(I),isPal(P))) (12)
active(isQid(o)) mark(tt) (18)

1.1.1 Dependency Pair Transformation

The following set of initial dependency pairs has been identified.
active#(__(__(X,Y),Z)) __#(Y,Z) (49)
active#(__(__(X,Y),Z)) __#(X,__(Y,Z)) (50)
active#(isList(V)) isNeList#(V) (51)
active#(isList(__(V1,V2))) isList#(V2) (52)
active#(isList(__(V1,V2))) isList#(V1) (53)
active#(isList(__(V1,V2))) and#(isList(V1),isList(V2)) (54)
active#(isNeList(__(V1,V2))) isNeList#(V2) (55)
active#(isNeList(__(V1,V2))) isList#(V1) (56)
active#(isNeList(__(V1,V2))) and#(isList(V1),isNeList(V2)) (57)
active#(isNeList(__(V1,V2))) isList#(V2) (58)
active#(isNeList(__(V1,V2))) isNeList#(V1) (59)
active#(isNeList(__(V1,V2))) and#(isNeList(V1),isList(V2)) (60)
active#(isPal(V)) isNePal#(V) (61)
active#(__(X1,X2)) active#(X1) (62)
active#(__(X1,X2)) __#(active(X1),X2) (63)
active#(__(X1,X2)) active#(X2) (64)
active#(__(X1,X2)) __#(X1,active(X2)) (65)
active#(and(X1,X2)) active#(X1) (66)
active#(and(X1,X2)) and#(active(X1),X2) (67)
__#(mark(X1),X2) __#(X1,X2) (68)
__#(X1,mark(X2)) __#(X1,X2) (69)
and#(mark(X1),X2) and#(X1,X2) (70)
proper#(__(X1,X2)) proper#(X2) (71)
proper#(__(X1,X2)) proper#(X1) (72)
proper#(__(X1,X2)) __#(proper(X1),proper(X2)) (73)
proper#(and(X1,X2)) proper#(X2) (74)
proper#(and(X1,X2)) proper#(X1) (75)
proper#(and(X1,X2)) and#(proper(X1),proper(X2)) (76)
proper#(isList(X)) proper#(X) (77)
proper#(isList(X)) isList#(proper(X)) (78)
proper#(isNeList(X)) proper#(X) (79)
proper#(isNeList(X)) isNeList#(proper(X)) (80)
proper#(isQid(X)) proper#(X) (81)
proper#(isQid(X)) isQid#(proper(X)) (82)
proper#(isNePal(X)) proper#(X) (83)
proper#(isNePal(X)) isNePal#(proper(X)) (84)
proper#(isPal(X)) proper#(X) (85)
proper#(isPal(X)) isPal#(proper(X)) (86)
__#(ok(X1),ok(X2)) __#(X1,X2) (87)
and#(ok(X1),ok(X2)) and#(X1,X2) (88)
isList#(ok(X)) isList#(X) (89)
isNeList#(ok(X)) isNeList#(X) (90)
isQid#(ok(X)) isQid#(X) (91)
isNePal#(ok(X)) isNePal#(X) (92)
isPal#(ok(X)) isPal#(X) (93)
top#(mark(X)) proper#(X) (94)
top#(mark(X)) top#(proper(X)) (95)
top#(ok(X)) active#(X) (96)
top#(ok(X)) top#(active(X)) (97)

1.1.1.1 Dependency Graph Processor

The dependency pairs are split into 10 components.