Variable Witness : Type.
Variable checker : list (Term'*Annot) -> Witness -> bool.
Variable checker_sound : forall t  w, checker t w = true -> forall env, make_impl (eval_tt env)  t False.
Fixpoint cnf_checker (f : cnf) (l : list Witness)  {struct f}: bool :=
match f with
| nil => true
| e::f => match l with
| nil => false
| c::l => match checker e c with
| true => cnf_checker f l
|   _  => false
end
end
end.

Lemma eval_bf_map : forall T U (fct: T-> U) env (k: kind) (f:BFormula T k) ,
eval_bf env  (map_bformula fct f)  = eval_bf (fun b x => env b (fct x)) f.