(** 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.