Variable eval'  : Env -> Term' -> Prop.
Variable no_middle_eval' : forall env d, (eval' env d) \/ ~ (eval' env d).
Variable unsat_prop : forall t, unsat t  = true ->
forall env, eval' env t -> False.
Variable deduce_prop : forall t t' u,
deduce t t' = Some u -> forall env,
eval' env t -> eval' env t' -> eval' env u.
Definition eval_tt (env : Env) (tt : Term' * Annot) := eval' env (fst tt).
Definition eval_clause (env : Env) (cl : clause) := ~ make_conj  (eval_tt env) cl.
Definition eval_cnf (env : Env) (f:cnf) := make_conj  (eval_clause  env) f.

(* Specifications: *)
Lemma eval_cnf_app : forall env x y, eval_cnf env (x+++y) <-> eval_cnf env x /\ eval_cnf env y.
Lemma eval_cnf_ff : forall env, eval_cnf env cnf_ff <-> False.
Proof using.