(** The axiom of extensionality for predicates *)

Definition PredicateExtensionality :=
  forall P Q:bool -> Prop, (forall b:bool, P b <-> Q b) -> P = Q.

(* Specifications: *)
Lemma prop_ext : forall A B:Prop, (A <-> B) -> A = B.
Lemma proof_irrel : forall (A:Prop) (a1 a2:A), a1 = a2.
Lemma guarded_rel_choice : GuardedRelationalChoice.
Lemma AC_bool_subset_to_bool : exists R : (bool -> Prop) -> bool -> Prop, (forall P:bool -> Prop, (exists b : bool, P b) -> exists b : bool, P b /\ R P b /\ (forall b':bool, R P b' -> b = b')).
Theorem pred_ext_and_rel_choice_imp_EM : forall P:Prop, P \/ ~ P.