(**
 Classical reasoning becomes directly accessible for any bool subgoal.
 Note that we cannot use "unless" here for lack of universe polymorphism.    **)
Definition classically P : Prop := forall b : bool, (P -> b) -> b.

(* Specifications: *)
Lemma classicP (P : Prop) : classically P <-> ~ ~ P.
Lemma classicW P : P -> classically P.
Lemma classic_bind P Q : (P -> classically Q) -> classically P -> classically Q.
Lemma classic_EM P : classically (decidable P).
Lemma classic_pick T P : classically ({x : T | P x} + (forall x, ~ P x)).
Lemma classic_imply P Q : (P -> classically Q) -> classically (P -> Q).
Lemma classic_sigW T (P : T -> Prop) : classically (exists x, P x) <-> classically ({x | P x}).
Lemma classic_ex T (P : T -> Prop) : ~ (forall x, ~ P x) -> classically (exists x, P x).