YES TRS: 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()) linear polynomial interpretations on N: if_A(x1,x2,x3) = x2 + x3 if#_A(x1,x2,x3) = 0 true_A = 1 true#_A = 2 false_A = 1 false#_A = 0 member_A(x1,x2) = x2 + 1 member#_A(x1,x2) = 5 nil_A = 1 nil#_A = 1 cons_A(x1,x2) = x1 + x2 + 2 cons#_A(x1,x2) = 6 eq_A(x1,x2) = x1 + 1 eq#_A(x1,x2) = 3 O_A(x1) = x1 + 1 O#_A(x1) = 0 0_A(x1) = x1 + 1 0#_A(x1) = 1 1_A(x1) = x1 + 1 1#_A(x1) = 2 negate_A(x1) = x1 negate#_A(x1) = 3 choice_A(x1) = x1 choice#_A(x1) = x1 + 7 guess_A(x1) = x1 + 1 guess#_A(x1) = x1 + 6 verify_A(x1) = x1 + 1 verify#_A(x1) = 4 sat_A(x1) = x1 + 2 sat#_A(x1) = x1 + 7 satck_A(x1,x2) = x2 + 1 satck#_A(x1,x2) = x2 + 5 unsat_A = 1 unsat#_A = 0 precedence: sat > guess > cons = O > member = choice = satck > eq = verify = unsat > if = true > nil > false > 0 > negate > 1