Definition excluded_middle := forall P : Prop,
  P \/ ~ P.

(* Specifications: *)
Theorem restricted_excluded_middle : forall P b, (P <-> b = true) -> P \/ ~ P.
Theorem restricted_excluded_middle_eq : forall (n m : nat), n = m \/ n <> m.
Theorem excluded_middle_irrefutable: forall (P:Prop), ~ ~ (P \/ ~ P).
Theorem not_exists_dist : excluded_middle -> forall (X:Type) (P : X -> Prop), ~ (exists x, ~ P x) -> (forall x, P x).