(** * Classical Natural Deduction *)
Require Export BPCP_FOL.
(** ** Double Negation Translation *)
Implicit Type b : logic.
Definition cprv := @prv class full.
Instance iUnit P : interp unit (fun _ => tt) :=
{| i_f _ _ := tt ; i_e := tt ; i_P _ _ := True ; i_Q := P  |}.
Hint Constructors prv.
Fixpoint cast {b} (phi : form b) : form full :=
match phi with
| Pr s t => Pr s t
| Q => Q
| Fal => Fal
| Impl phi psi => Impl (cast phi) (cast psi)
| All x phi => All x (cast phi)
end.

(* Specifications: *)
Lemma subst_cast {b} x t phi :
cast (subst x t phi) = subst x t (cast phi).
Lemma consts_casts {b} phi :
consts (cast phi) = consts phi.
Lemma MND_CND A (phi : form frag) :
A ⊢M phi -> map cast A ⊢C cast phi.
Lemma cnd_XM:
(forall (phi : form full), cprv [] phi -> valid phi) ->
forall P, ~~ P -> P.