(************************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* IZR 0%Z | Npos p => IZR (Zpos p) end. Definition Reval_expr := eval_pexpr Rplus Rmult Rminus Ropp IZR Nnat.nat_of_N pow. Definition Reval_formula := eval_formula Rplus Rmult Rminus Ropp (@eq R) Rle Rlt IZR Nnat.nat_of_N pow. Definition Reval_nformula := eval_nformula 0 Rplus Rmult Rminus Ropp (@eq R) Rle Rlt IZR Nnat.nat_of_N pow. Lemma Reval_nformula_dec : forall env d, (Reval_nformula env d) \/ ~ (Reval_nformula env d). Proof. exact (fun env d =>eval_nformula_dec Rsor IZR Nnat.nat_of_N pow env d). Qed. Definition RWitness := ConeMember Z. Definition RWeakChecker := check_normalised_formulas 0%Z 1%Z Zplus Zmult Zminus Zopp Zeq_bool Zle_bool. Require Import List. Lemma RWeakChecker_sound : forall (l : list (NFormula Z)) (cm : RWitness), RWeakChecker l cm = true -> forall env, make_impl (Reval_nformula env) l False. Proof. intros l cm H. intro. unfold Reval_nformula. apply (checker_nf_sound Rsor RZSORaddon l cm). unfold RWeakChecker in H. exact H. Qed. Require Import Tauto. Definition RTautoChecker (f : BFormula (Formula Z)) (w: list RWitness) : bool := @tauto_checker (Formula Z) (NFormula Z) (@cnf_normalise Z) (@cnf_negate Z) RWitness RWeakChecker f w. Lemma RTautoChecker_sound : forall f w, RTautoChecker f w = true -> forall env, eval_f (Reval_formula env) f. Proof. intros f w. unfold RTautoChecker. apply (tauto_checker_sound Reval_formula Reval_nformula). apply Reval_nformula_dec. intros. unfold Reval_formula. now apply (cnf_normalise_correct Rsor). intros. unfold Reval_formula. now apply (cnf_negate_correct Rsor). intros t w0. apply RWeakChecker_sound. Qed.