Search code examples
coqreal-number

Stronger completeness axiom for real numbers in Coq


Here is the completeness axiom defined in the Coq standard library.

Definition is_upper_bound (E:R -> Prop) (m:R) := forall x:R, E x -> x <= m.

Definition bound (E:R -> Prop) := exists m : R, is_upper_bound E m.

Definition is_lub (E:R -> Prop) (m:R) :=
is_upper_bound E m /\ (forall b:R, is_upper_bound E b -> m <= b).



Axiom completeness :
forall E:R -> Prop,
  bound E -> (exists x : R, E x) -> { m:R | is_lub E m }.

Suppose I add in

Axiom supremum :forall E:R -> Prop,
  (exists l : R,is_upper_bound E l) -> 
  (exists x : R, E x) -> 
  { m:R | is_lub E m /\ (forall x:R, x<m -> exists y:R,(E y /\ y >x))}.

Is this required? (i.e does it follow from the others) Would there be any issues with consistency? Also, why is this not the definition in the standard library (I guess this part is subjective).


Solution

  • Your supremum axiom is equivalent to the law of excluded middle, in other words by introducing this axiom you are bringing classical logic to the table.

    The completeness axiom already implies a weak form of the law of excluded middle, as shown by the means of the sig_not_dec lemma (Rlogic module), which states the decidability of negated formulas:

    Lemma sig_not_dec : forall P : Prop, {~~ P} + {~ P}.
    

    supremum axiom implies LEM

    Let's use the standard proof of the sig_not_dec lemma to show that with the stronger completeness axiom (supremum) we can derive the strong form of the law of excluded middle.

    Lemma supremum_implies_lem : forall P : Prop, P \/ ~ P.
    Proof.
    intros P.
    set (E := fun x => x = 0 \/ (x = 1 /\ P)).
    destruct (supremum E) as (x & H & Hclas).
      exists 1. intros x [->|[-> _]].
      apply Rle_0_1. apply Rle_refl. exists 0; now left.
    destruct (Rle_lt_dec 1 x) as [H'|H'].
    - left.
      pose proof (Rlt_le_trans 0 1 x Rlt_0_1 H') as Hx0.
      destruct (Hclas 0 Hx0) as (y & [contra | (_ & Hp)] & Hy0).
      + now apply Rgt_not_eq in Hy0.
      + exact Hp.
    - right. intros HP.
      apply (Rlt_not_le _ _ H'), H; now right.
    Qed.
    

    LEM implies supremum axiom

    Now, let us show that the strong version of LEM implies the supremum axiom. We do this by showing that in constructive setting we can derive a negated form of supremum where the exists y:R, E y /\ y > x part gets replaced with ~ (forall y, y > x -> ~ E y), and then using the usual classical facts we show that the original statement holds as well.

    Require Import Classical.
    
    Lemma helper (z : R) (E : R -> Prop) :
        (forall y, y > z -> ~ E y) -> is_upper_bound E z.
    Proof.
      intros H x Ex.
      destruct (Rle_dec x z).
      - assumption.
      - specialize (H x (Rnot_le_gt x z n)); contradiction.
    Qed.
    
    Lemma supremum :forall E:R -> Prop,
      (exists l : R,is_upper_bound E l) ->
      (exists x : R, E x) ->
      {m:R | is_lub E m /\ (forall x:R, x<m -> exists y:R, E y /\ y > x)}.
    Proof.
      intros E Hbound Hnonempty.
      pose proof (completeness E Hbound Hnonempty) as [m Hlub].
      clear Hbound Hnonempty.
      exists m. split; auto.
      intros x Hlt.
      assert (~ (forall y, y > x -> ~ E y)) as Hclass.
        intro Hcontra; apply helper in Hcontra.
        destruct Hlub as [Hup Hle].
        specialize (Hle x Hcontra).
        apply Rle_not_lt in Hle; contradiction.
      (* classical part starts here *)
      apply not_all_ex_not in Hclass as [y Hclass]; exists y.
      apply imply_to_and in Hclass as [Hyx HnotnotEy].
      now apply NNPP in HnotnotEy.
    Qed.