(** * 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.

Lemma subst_cast {b} x t phi :
cast (subst x t phi) = subst x t (cast phi).