Certification Problem

Input (TPDB TRS_Standard/TCT_12/sat)

The rewrite relation of the following TRS is considered.

if(true,t,e) t (1)
if(false,t,e) e (2)
member(x,nil) false (3)
member(x,cons(y,ys)) if(eq(x,y),true,member(x,ys)) (4)
eq(nil,nil) true (5)
eq(O(x),0(y)) eq(x,y) (6)
eq(0(x),1(y)) false (7)
eq(1(x),0(y)) false (8)
eq(1(x),1(y)) eq(x,y) (9)
negate(0(x)) 1(x) (10)
negate(1(x)) 0(x) (11)
choice(cons(x,xs)) x (12)
choice(cons(x,xs)) choice(xs) (13)
guess(nil) nil (14)
guess(cons(clause,cnf)) cons(choice(clause),guess(cnf)) (15)
verify(nil) true (16)
verify(cons(l,ls)) if(member(negate(l),ls),false,verify(ls)) (17)
sat(cnf) satck(cnf,guess(cnf)) (18)
satck(cnf,assign) if(verify(assign),assign,unsat) (19)

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(unsat) = 0 status(unsat) = [] list-extension(unsat) = Lex
prec(satck) = 0 status(satck) = [2, 1] list-extension(satck) = Lex
prec(sat) = 0 status(sat) = [1] list-extension(sat) = Lex
prec(verify) = 23 status(verify) = [1] list-extension(verify) = Lex
prec(guess) = 1 status(guess) = [1] list-extension(guess) = Lex
prec(choice) = 0 status(choice) = [1] list-extension(choice) = Lex
prec(negate) = 6 status(negate) = [1] list-extension(negate) = Lex
prec(1) = 4 status(1) = [1] list-extension(1) = Lex
prec(0) = 1 status(0) = [1] list-extension(0) = Lex
prec(O) = 0 status(O) = [1] list-extension(O) = Lex
prec(eq) = 0 status(eq) = [1, 2] list-extension(eq) = Lex
prec(cons) = 0 status(cons) = [1, 2] list-extension(cons) = Lex
prec(member) = 5 status(member) = [1, 2] list-extension(member) = Lex
prec(nil) = 0 status(nil) = [] list-extension(nil) = Lex
prec(false) = 0 status(false) = [] list-extension(false) = Lex
prec(if) = 0 status(if) = [3, 1, 2] list-extension(if) = Lex
prec(true) = 0 status(true) = [] list-extension(true) = Lex
and the following Max-polynomial interpretation
[unsat] = 0
[satck(x1, x2)] = max(0, 0 + 1 · x1, 4 + 1 · x2)
[sat(x1)] = max(0, 7 + 1 · x1)
[verify(x1)] = 3 + 1 · x1
[guess(x1)] = max(1, 2 + 1 · x1)
[choice(x1)] = max(1, 1 + 1 · x1)
[negate(x1)] = max(0, 0 + 1 · x1)
[1(x1)] = max(0, 0 + 1 · x1)
[0(x1)] = max(0, 0 + 1 · x1)
[O(x1)] = max(7, 3 + 1 · x1)
[eq(x1, x2)] = max(3, 0 + 1 · x1, 0 + 1 · x2)
[cons(x1, x2)] = max(0, 0 + 1 · x1, 0 + 1 · x2)
[member(x1, x2)] = max(0, 0 + 1 · x1, 3 + 1 · x2)
[nil] = max(2)
[false] = max(0)
[if(x1, x2, x3)] = max(1, 0 + 1 · x1, 2 + 1 · x2, 0 + 1 · x3)
[true] = max(1)
all of the following rules can be deleted.
if(true,t,e) t (1)
if(false,t,e) e (2)
member(x,nil) false (3)
member(x,cons(y,ys)) if(eq(x,y),true,member(x,ys)) (4)
eq(nil,nil) true (5)
eq(O(x),0(y)) eq(x,y) (6)
eq(0(x),1(y)) false (7)
eq(1(x),0(y)) false (8)
eq(1(x),1(y)) eq(x,y) (9)
negate(0(x)) 1(x) (10)
negate(1(x)) 0(x) (11)
choice(cons(x,xs)) x (12)
choice(cons(x,xs)) choice(xs) (13)
guess(nil) nil (14)
guess(cons(clause,cnf)) cons(choice(clause),guess(cnf)) (15)
verify(nil) true (16)
verify(cons(l,ls)) if(member(negate(l),ls),false,verify(ls)) (17)
sat(cnf) satck(cnf,guess(cnf)) (18)
satck(cnf,assign) if(verify(assign),assign,unsat) (19)

1.1 R is empty

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