Section PredExt_RelChoice_imp_EM.
(** The axiom of extensionality for predicates *)
Definition PredicateExtensionality :=
forall P Q:bool -> Prop, (forall b:bool, P b <-> Q b) -> P = Q.
(** From predicate extensionality we get propositional extensionality hence proof-irrelevance *)
Variable pred_extensionality : PredicateExtensionality.
(** From proof-irrelevance and relational choice, we get guarded relational choice *)
Variable rel_choice : RelationalChoice.
(** The form of choice we need: there is a functional relation which chooses an element in any non empty subset of bool *)
(** The proof of the excluded middle *)
(** Remark: P could have been in Set or Type *)

Theorem pred_ext_and_rel_choice_imp_EM : forall P:Prop, P \/ ~ P.