Certification Problem

Input (TPDB TRS_Standard/Transformed_CSR_04/Ex1_GL02a_GM)

The rewrite relation of the following TRS is considered.

a__eq(0,0) true (1)
a__eq(s(X),s(Y)) a__eq(X,Y) (2)
a__eq(X,Y) false (3)
a__inf(X) cons(X,inf(s(X))) (4)
a__take(0,X) nil (5)
a__take(s(X),cons(Y,L)) cons(Y,take(X,L)) (6)
a__length(nil) 0 (7)
a__length(cons(X,L)) s(length(L)) (8)
mark(eq(X1,X2)) a__eq(X1,X2) (9)
mark(inf(X)) a__inf(mark(X)) (10)
mark(take(X1,X2)) a__take(mark(X1),mark(X2)) (11)
mark(length(X)) a__length(mark(X)) (12)
mark(0) 0 (13)
mark(true) true (14)
mark(s(X)) s(X) (15)
mark(false) false (16)
mark(cons(X1,X2)) cons(X1,X2) (17)
mark(nil) nil (18)
a__eq(X1,X2) eq(X1,X2) (19)
a__inf(X) inf(X) (20)
a__take(X1,X2) take(X1,X2) (21)
a__length(X) length(X) (22)

Property / Task

Prove or disprove termination.

Answer / Result

Yes.

Proof (by ttt2 @ termCOMP 2023)

1 Rule Removal

Using the Weighted Path Order with the following precedence and status
prec(mark) = 3 status(mark) = [1] list-extension(mark) = Lex
prec(eq) = 0 status(eq) = [2, 1] list-extension(eq) = Lex
prec(length) = 0 status(length) = [1] list-extension(length) = Lex
prec(a__length) = 1 status(a__length) = [1] list-extension(a__length) = Lex
prec(take) = 0 status(take) = [2, 1] list-extension(take) = Lex
prec(nil) = 0 status(nil) = [] list-extension(nil) = Lex
prec(a__take) = 1 status(a__take) = [2, 1] list-extension(a__take) = Lex
prec(cons) = 0 status(cons) = [2, 1] list-extension(cons) = Lex
prec(inf) = 0 status(inf) = [1] list-extension(inf) = Lex
prec(a__inf) = 2 status(a__inf) = [1] list-extension(a__inf) = Lex
prec(false) = 0 status(false) = [] list-extension(false) = Lex
prec(s) = 0 status(s) = [1] list-extension(s) = Lex
prec(true) = 0 status(true) = [] list-extension(true) = Lex
prec(a__eq) = 1 status(a__eq) = [1, 2] list-extension(a__eq) = Lex
prec(0) = 0 status(0) = [] list-extension(0) = Lex
and the following Max-polynomial interpretation
[mark(x1)] = max(0, 0 + 1 · x1)
[eq(x1, x2)] = max(0, 0 + 1 · x1, 0 + 1 · x2)
[length(x1)] = 5 + 1 · x1
[a__length(x1)] = max(2, 5 + 1 · x1)
[take(x1, x2)] = max(0, 0 + 1 · x1, 0 + 1 · x2)
[nil] = max(3)
[a__take(x1, x2)] = max(0, 0 + 1 · x1, 0 + 1 · x2)
[cons(x1, x2)] = max(0, 0 + 1 · x1, 0 + 1 · x2)
[inf(x1)] = max(0, 0 + 1 · x1)
[a__inf(x1)] = max(0, 0 + 1 · x1)
[false] = max(0)
[s(x1)] = max(0, 0 + 1 · x1)
[true] = max(0)
[a__eq(x1, x2)] = max(0, 0 + 1 · x1, 0 + 1 · x2)
[0] = max(4)
all of the following rules can be deleted.
a__eq(0,0) true (1)
a__eq(s(X),s(Y)) a__eq(X,Y) (2)
a__eq(X,Y) false (3)
a__inf(X) cons(X,inf(s(X))) (4)
a__take(0,X) nil (5)
a__take(s(X),cons(Y,L)) cons(Y,take(X,L)) (6)
a__length(nil) 0 (7)
a__length(cons(X,L)) s(length(L)) (8)
mark(eq(X1,X2)) a__eq(X1,X2) (9)
mark(inf(X)) a__inf(mark(X)) (10)
mark(take(X1,X2)) a__take(mark(X1),mark(X2)) (11)
mark(length(X)) a__length(mark(X)) (12)
mark(0) 0 (13)
mark(true) true (14)
mark(s(X)) s(X) (15)
mark(false) false (16)
mark(cons(X1,X2)) cons(X1,X2) (17)
mark(nil) nil (18)
a__eq(X1,X2) eq(X1,X2) (19)
a__inf(X) inf(X) (20)
a__take(X1,X2) take(X1,X2) (21)
a__length(X) length(X) (22)

1.1 R is empty

There are no rules in the TRS. Hence, it is terminating.