(** Remark: in the Set-impredicative CCI, Hurkens' paradox still holds with [bool] in [Set] and since [~true=false] for [true] and [false] in [bool] from [Set], we get the inconsistency of [em : forall A:Prop, {A}+{~A}] in the Set-impredicative CCI. *)
(** * Weak classical axioms *)
(** We show the following increasing in the strength of axioms: - weak excluded-middle and classical De Morgan's law - right distributivity of implication over disjunction and Gödel-Dummett axiom - independence of general premises and drinker's paradox - excluded-middle *)
(** ** Weak excluded-middle *)
(** The weak classical logic based on [~~A \/ ~A] is referred to with name KC in [[ChagrovZakharyaschev97]]. See [[SorbiTerwijn11]] for a short survey.  [[ChagrovZakharyaschev97]] Alexander Chagrov and Michael Zakharyaschev, "Modal Logic", Clarendon Press, 1997.  [[SorbiTerwijn11]] Andrea Sorbi and Sebastiaan A. Terwijn, "Generalizations of the weak law of the excluded-middle", Notre Dame J. Formal Logic, vol 56(2), pp 321-331, 2015. *)
Definition weak_excluded_middle :=
forall A:Prop, ~~A \/ ~A.
(** The interest in the equivalent variant [weak_generalized_excluded_middle] is that it holds even in logic without a primitive [False] connective (like Gödel-Dummett axiom) *)
Definition weak_generalized_excluded_middle :=
forall A B:Prop, ((A -> B) -> B) \/ (A -> B).
(** Classical De Morgan's law *)
Definition classical_de_morgan_law :=
forall A B:Prop, ~(A /\ B) -> ~A \/ ~B.
(** ** Gödel-Dummett axiom *)
(** [(A->B) \/ (B->A)] is studied in [[Dummett59]] and is based on [[Gödel33]].  [[Dummett59]] Michael A. E. Dummett. "A Propositional Calculus with a Denumerable Matrix", In the Journal of Symbolic Logic, vol 24(2), pp 97-103, 1959.  [[Gödel33]] Kurt Gödel. "Zum intuitionistischen Aussagenkalkül", Ergeb. Math. Koll. 4, pp. 34-38, 1933. *)
Definition GodelDummett := forall A B:Prop, (A -> B) \/ (B -> A).

(* Specifications: *)
Lemma excluded_middle_Godel_Dummett : excluded_middle -> GodelDummett.
Definition RightDistributivityImplicationOverDisjunction :=
forall A B C:Prop, (C -> A\/B) -> (C->A) \/ (C->B).