YES
0 QTRS
↳1 QTRSRRRProof (⇔, 74 ms)
↳2 QTRS
↳3 QTRSRRRProof (⇔, 0 ms)
↳4 QTRS
↳5 RisEmptyProof (⇔, 0 ms)
↳6 YES
if(true, t, e) → t
if(false, t, e) → e
member(x, nil) → false
member(x, cons(y, ys)) → if(eq(x, y), true, member(x, ys))
eq(nil, nil) → true
eq(O(x), 0(y)) → eq(x, y)
eq(0(x), 1(y)) → false
eq(1(x), 0(y)) → false
eq(1(x), 1(y)) → eq(x, y)
negate(0(x)) → 1(x)
negate(1(x)) → 0(x)
choice(cons(x, xs)) → x
choice(cons(x, xs)) → choice(xs)
guess(nil) → nil
guess(cons(clause, cnf)) → cons(choice(clause), guess(cnf))
verify(nil) → true
verify(cons(l, ls)) → if(member(negate(l), ls), false, verify(ls))
sat(cnf) → satck(cnf, guess(cnf))
satck(cnf, assign) → if(verify(assign), assign, unsat)
sat1 > [verify1, satck2] > member2 > [if3, cons2]
sat1 > [verify1, satck2] > member2 > [true, false, eq2]
sat1 > [verify1, satck2] > negate1 > 01 > [true, false, eq2]
sat1 > [verify1, satck2] > unsat
if3: multiset
true: multiset
false: multiset
member2: multiset
nil: multiset
cons2: multiset
eq2: multiset
O1: [1]
01: multiset
negate1: multiset
verify1: multiset
sat1: multiset
satck2: multiset
unsat: multiset
if(true, t, e) → t
if(false, t, e) → e
member(x, nil) → false
member(x, cons(y, ys)) → if(eq(x, y), true, member(x, ys))
eq(nil, nil) → true
eq(O(x), 0(y)) → eq(x, y)
eq(0(x), 1(y)) → false
eq(1(x), 0(y)) → false
negate(0(x)) → 1(x)
negate(1(x)) → 0(x)
choice(cons(x, xs)) → x
choice(cons(x, xs)) → choice(xs)
verify(nil) → true
verify(cons(l, ls)) → if(member(negate(l), ls), false, verify(ls))
sat(cnf) → satck(cnf, guess(cnf))
satck(cnf, assign) → if(verify(assign), assign, unsat)
eq(1(x), 1(y)) → eq(x, y)
guess(nil) → nil
guess(cons(clause, cnf)) → cons(choice(clause), guess(cnf))
choice1 > guess1 > cons2 > nil > 11 > eq2
nil=1
1_1=1
guess_1=1
choice_1=0
cons_2=0
eq_2=0
eq(1(x), 1(y)) → eq(x, y)
guess(nil) → nil
guess(cons(clause, cnf)) → cons(choice(clause), guess(cnf))