Imports
import Mathlib.Tactic
import Analysis.Section_5_4Analysis I, Section 5.5: The least upper bound property
I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.
Main constructions and results of this section:
-
Upper bound and least upper bound on the real line
Tips from past users
Users of the companion who have completed the exercises in this section are welcome to send their tips for future users in this section as PRs.
-
(Add tip here)
namespace Chapter5
Definition 5.5.1 (upper bounds). Here we use the upperBounds set defined in Mathlib.
theorem Real.upperBound_def (E: Set Real) (M: Real) : M ∈ upperBounds E ↔ ∀ x ∈ E, x ≤ M :=
mem_upperBoundstheorem Real.lowerBound_def (E: Set Real) (M: Real) : M ∈ lowerBounds E ↔ ∀ x ∈ E, x ≥ M :=
mem_lowerBoundsAPI for Example 5.5.2
theorem Real.Icc_def (x y:Real) : .Icc x y = { z | x ≤ z ∧ z ≤ y } := rflAPI for Example 5.5.2
theorem Real.mem_Icc (x y z:Real) : z ∈ Set.Icc x y ↔ x ≤ z ∧ z ≤ y := x:Realy:Realz:Real⊢ z ∈ Set.Icc x y ↔ x ≤ z ∧ z ≤ y All goals completed! 🐙/-- Example 5.5.2 -/
example (M: Real) : M ∈ upperBounds (.Icc 0 1) ↔ M ≥ 1 := M:Real⊢ M ∈ upperBounds (Set.Icc 0 1) ↔ M ≥ 1 All goals completed! 🐙API for Example 5.5.3
theorem Real.Ioi_def (x:Real) : .Ioi x = { z | z > x } := rfl/-- Example 5.5.3 -/
example : ¬ ∃ M : Real, M ∈ upperBounds (.Ioi 0) := ⊢ ¬∃ M, M ∈ upperBounds (Set.Ioi 0) All goals completed! 🐙/-- Example 5.5.4 -/
example : ∀ M, M ∈ upperBounds (∅ : Set Real) := ⊢ ∀ (M : Real), M ∈ upperBounds ∅ All goals completed! 🐙theorem Real.upperBound_upper {M M': Real} (h: M ≤ M') {E: Set Real} (hb: M ∈ upperBounds E) :
M' ∈ upperBounds E := M:RealM':Realh:M ≤ M'E:Set Realhb:M ∈ upperBounds E⊢ M' ∈ upperBounds E All goals completed! 🐙
Definition 5.5.5 (least upper bound). Here we use the IsLUB predicate defined in Mathlib.
theorem Real.isLUB_def (E: Set Real) (M: Real) :
IsLUB E M ↔ M ∈ upperBounds E ∧ ∀ M' ∈ upperBounds E, M' ≥ M := E:Set RealM:Real⊢ IsLUB E M ↔ M ∈ upperBounds E ∧ ∀ M' ∈ upperBounds E, M' ≥ M All goals completed! 🐙theorem Real.isGLB_def (E: Set Real) (M: Real) :
IsGLB E M ↔ M ∈ lowerBounds E ∧ ∀ M' ∈ lowerBounds E, M' ≤ M := E:Set RealM:Real⊢ IsGLB E M ↔ M ∈ lowerBounds E ∧ ∀ M' ∈ lowerBounds E, M' ≤ M All goals completed! 🐙/-- Example 5.5.6 -/
example : IsLUB (.Icc 0 1) (1 : Real) := ⊢ IsLUB (Set.Icc 0 1) 1 All goals completed! 🐙/-- Example 5.5.7 -/
example : ¬∃ M, IsLUB (∅: Set Real) M := ⊢ ¬∃ M, IsLUB ∅ M All goals completed! 🐙Proposition 5.5.8 (Uniqueness of least upper bound)
theorem Real.LUB_unique {E: Set Real} {M M': Real} (h1: IsLUB E M) (h2: IsLUB E M') : M = M' := E:Set RealM:RealM':Realh1:IsLUB E Mh2:IsLUB E M'⊢ M = M'
All goals completed! 🐙Definition of "bounded above", using Mathlib notation
theorem Real.bddAbove_def (E: Set Real) : BddAbove E ↔ ∃ M, M ∈ upperBounds E := Set.nonempty_deftheorem Real.bddBelow_def (E: Set Real) : BddBelow E ↔ ∃ M, M ∈ lowerBounds E := Set.nonempty_defExercise 5.5.2
theorem Real.upperBound_between {E: Set Real} {n:ℕ} {L K:ℤ} (hLK: L < K)
(hK: K*((1/(n+1):ℚ):Real) ∈ upperBounds E) (hL: L*((1/(n+1):ℚ):Real) ∉ upperBounds E) :
∃ m, L < m
∧ m ≤ K
∧ m*((1/(n+1):ℚ):Real) ∈ upperBounds E
∧ (m-1)*((1/(n+1):ℚ):Real) ∉ upperBounds E := E:Set Realn:ℕL:ℤK:ℤhLK:L < KhK:↑K * ↑(1 / (↑n + 1)) ∈ upperBounds EhL:↑L * ↑(1 / (↑n + 1)) ∉ upperBounds E⊢ ∃ m, L < m ∧ m ≤ K ∧ ↑m * ↑(1 / (↑n + 1)) ∈ upperBounds E ∧ (↑m - 1) * ↑(1 / (↑n + 1)) ∉ upperBounds E All goals completed! 🐙Exercise 5.5.3
theorem Real.upperBound_discrete_unique {E: Set Real} {n:ℕ} {m m':ℤ}
(hm1: (((m:ℚ) / (n+1):ℚ):Real) ∈ upperBounds E)
(hm2: (((m:ℚ) / (n+1) - 1 / (n+1):ℚ):Real) ∉ upperBounds E)
(hm'1: (((m':ℚ) / (n+1):ℚ):Real) ∈ upperBounds E)
(hm'2: (((m':ℚ) / (n+1) - 1 / (n+1):ℚ):Real) ∉ upperBounds E) :
m = m' := E:Set Realn:ℕm:ℤm':ℤhm1:↑(↑m / (↑n + 1)) ∈ upperBounds Ehm2:↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehm'1:↑(↑m' / (↑n + 1)) ∈ upperBounds Ehm'2:↑(↑m' / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E⊢ m = m' All goals completed! 🐙Lemmas that can be helpful for proving 5.5.4
theorem Sequence.IsCauchy.abs {a:ℕ → ℚ} (ha: (a:Sequence).IsCauchy):
((|a| : ℕ → ℚ) : Sequence).IsCauchy := a:ℕ → ℚha:(↑a).IsCauchy⊢ (↑|a|).IsCauchy All goals completed! 🐙theorem Real.LIM.abs_eq {a b:ℕ → ℚ} (ha: (a: Sequence).IsCauchy)
(hb: (b: Sequence).IsCauchy) (h: LIM a = LIM b): LIM |a| = LIM |b| := a:ℕ → ℚb:ℕ → ℚha:(↑a).IsCauchyhb:(↑b).IsCauchyh:LIM a = LIM b⊢ LIM |a| = LIM |b| All goals completed! 🐙theorem Real.LIM.abs_eq_pos {a: ℕ → ℚ} (h: LIM a > 0) (ha: (a:Sequence).IsCauchy):
LIM a = LIM |a| := a:ℕ → ℚh:LIM a > 0ha:(↑a).IsCauchy⊢ LIM a = LIM |a| All goals completed! 🐙theorem Real.LIM_abs {a:ℕ → ℚ} (ha: (a:Sequence).IsCauchy): |LIM a| = LIM |a| := a:ℕ → ℚha:(↑a).IsCauchy⊢ |LIM a| = LIM |a| All goals completed! 🐙theorem Real.LIM_of_le' {x:Real} {a:ℕ → ℚ} (hcauchy: (a:Sequence).IsCauchy)
(h: ∃ N, ∀ n ≥ N, a n ≤ x) : LIM a ≤ x := x:Reala:ℕ → ℚhcauchy:(↑a).IsCauchyh:∃ N, ∀ n ≥ N, ↑(a n) ≤ x⊢ LIM a ≤ x All goals completed! 🐙Exercise 5.5.4
theorem Real.LIM_of_Cauchy {q:ℕ → ℚ} (hq: ∀ M, ∀ n ≥ M, ∀ n' ≥ M, |q n - q n'| ≤ 1 / (M+1)) :
(q:Sequence).IsCauchy ∧ ∀ M, |q M - LIM q| ≤ 1 / (M+1) := q:ℕ → ℚhq:∀ (M n : ℕ), n ≥ M → ∀ n' ≥ M, |q n - q n'| ≤ 1 / (↑M + 1)⊢ (↑q).IsCauchy ∧ ∀ (M : ℕ), |↑(q M) - LIM q| ≤ 1 / (↑M + 1) All goals completed! 🐙The sequence m₁, m₂, … is well-defined. This proof uses a different indexing convention than the text
lemma Real.LUB_claim1 (n : ℕ) {E: Set Real} (hE: Set.Nonempty E) (hbound: BddAbove E)
: ∃! m:ℤ,
(((m:ℚ) / (n+1):ℚ):Real) ∈ upperBounds E
∧ ¬ (((m:ℚ) / (n+1) - 1 / (n+1):ℚ):Real) ∈ upperBounds E := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.some⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:hE.some ∈ E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
have hpos : ε.IsPos := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))⊢ 0 < ↑n + 1; All goals completed! 🐙
n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPos⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds En:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPos⊢ ∀ (y₁ y₂ : ℤ),
↑(↑y₁ / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑y₁ / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E →
↑(↑y₂ / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑y₂ / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E → y₁ = y₂
n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPos⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E n:ℕE:Set RealhE:E.Nonemptyhbound:∃ M, M ∈ upperBounds Ex₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPos⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E; n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds E⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝:K > 0hK:↑K * ε > M⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
have claim1_1 : L * ε < x₀ := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'⊢ -(↑L' * ε) < x₀; All goals completed! 🐙
have claim1_2 : L * ε ∉ upperBounds E := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E All goals completed! 🐙
have claim1_3 : (K:Real) > (L:Real) := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑K ≤ ↑L⊢ ↑L * ε ∈ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:ε * ↑K ≤ ε * ↑L⊢ ↑L * ε ∈ upperBounds E
simp_rw n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:ε * ↑K ≤ ε * ↑L⊢ ↑L * ε ∈ upperBounds Emul_comm] at claim1_2
replace claim1_2 : M ≤ L * ε := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E All goals completed! 🐙
All goals completed! 🐙
have claim1_4 : ∃ m:ℤ, L < m ∧ m ≤ K ∧ m*ε ∈ upperBounds E ∧ (m-1)*ε ∉ upperBounds E := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑L⊢ L < ↑Kn:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑L⊢ ↑↑K * ↑(1 / (↑n + 1)) ∈ upperBounds E
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑L⊢ L < ↑K n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑L⊢ ↑L < ↑K; rwa [←gt_iff_lt, gt_of_coen:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝¹:K > 0hK:↑K * ε > ML':ℕh✝:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑L⊢ ↑↑K > ↑↑L
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))M:Realhbound:M ∈ upperBounds EK:ℕL':ℕL:ℤ := -↑L'hpos:(↑n + 1)⁻¹.IsPosh✝¹:0 < KhK:M < ↑K * (↑n + 1)⁻¹h✝:0 < L'hL:-x₀ < ↑L' * (↑n + 1)⁻¹claim1_1:↑L * (↑n + 1)⁻¹ < x₀claim1_2:↑L * (↑n + 1)⁻¹ ∉ upperBounds Eclaim1_3:↑L < ↑K⊢ ↑K * (↑n + 1)⁻¹ ∈ upperBounds E; n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))M:Realhbound:M ∈ upperBounds EK:ℕL':ℕL:ℤ := -↑L'hpos:(↑n + 1)⁻¹.IsPosh✝¹:0 < KhK:M < ↑K * (↑n + 1)⁻¹h✝:0 < L'hL:-x₀ < ↑L' * (↑n + 1)⁻¹claim1_1:↑L * (↑n + 1)⁻¹ < x₀claim1_2:↑L * (↑n + 1)⁻¹ ∉ upperBounds Eclaim1_3:↑L < ↑K⊢ M ≤ ↑K * (↑n + 1)⁻¹; All goals completed! 🐙
n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝³:K > 0hK:↑K * ε > ML':ℕh✝²:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑Lm:ℤh✝¹:L < mh✝:m ≤ ↑Khm:↑m * ε ∈ upperBounds Ehm':(↑m - 1) * ε ∉ upperBounds E⊢ ∃ x, ↑(↑x / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑x / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E; n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝³:K > 0hK:↑K * ε > ML':ℕh✝²:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑Lm:ℤh✝¹:L < mh✝:m ≤ ↑Khm:↑m * ε ∈ upperBounds Ehm':(↑m - 1) * ε ∉ upperBounds E⊢ ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E
have : (m/(n+1):ℚ) = m*ε := n:ℕE:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝³:K > 0hK:↑K * ε > ML':ℕh✝²:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑Lm:ℤh✝¹:L < mh✝:m ≤ ↑Khm:↑m * ε ∈ upperBounds Ehm':(↑m - 1) * ε ∉ upperBounds E⊢ ↑m / (↑n + 1) = ↑m * (↑n + 1)⁻¹; All goals completed! 🐙
exact ⟨ n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝³:K > 0hK:↑K * ε > ML':ℕh✝²:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑Lm:ℤh✝¹:L < mh✝:m ≤ ↑Khm:↑m * ε ∈ upperBounds Ehm':(↑m - 1) * ε ∉ upperBounds Ethis:↑(↑m / (↑n + 1)) = ↑m * ε⊢ ↑(↑m / (↑n + 1)) ∈ upperBounds E All goals completed! 🐙, n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝³:K > 0hK:↑K * ε > ML':ℕh✝²:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑Lm:ℤh✝¹:L < mh✝:m ≤ ↑Khm:↑m * ε ∈ upperBounds Ehm':(↑m - 1) * ε ∉ upperBounds Ethis:↑(↑m / (↑n + 1)) = ↑m * ε⊢ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E n:ℕE:Set RealhE:E.Nonemptyx₀:Real := hE.somehx₀:hE.some ∈ Eε:Real := ↑(1 / (↑n + 1))hpos:ε.IsPosM:Realhbound:M ∈ upperBounds EK:ℕh✝³:K > 0hK:↑K * ε > ML':ℕh✝²:L' > 0hL:↑L' * ε > -x₀L:ℤ := -↑L'claim1_1:↑L * ε < x₀claim1_2:↑L * ε ∉ upperBounds Eclaim1_3:↑K > ↑Lm:ℤh✝¹:L < mh✝:m ≤ ↑Khm:↑m * ε ∈ upperBounds Ehm':(↑m - 1) * ε ∉ upperBounds Ethis:↑(↑m / (↑n + 1)) = ↑m * ε⊢ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) = (↑m - 1) * ε; All goals completed! 🐙 ⟩
All goals completed! 🐙lemma Real.LUB_claim2 {E : Set Real} (N:ℕ) {a b: ℕ → ℚ}
(hb : ∀ n, b n = 1 / (↑n + 1))
(hm1 : ∀ (n : ℕ), ↑(a n) ∈ upperBounds E)
(hm2 : ∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E)
: ∀ n ≥ N, ∀ n' ≥ N, |a n - a n'| ≤ 1 / (N+1) := E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E⊢ ∀ n ≥ N, ∀ n' ≥ N, |a n - a n'| ≤ 1 / (↑N + 1)
intro n E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ N⊢ ∀ n' ≥ N, |a n - a n'| ≤ 1 / (↑N + 1) E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕ⊢ n' ≥ N → |a n - a n'| ≤ 1 / (↑N + 1) E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕhn':n' ≥ N⊢ |a n - a n'| ≤ 1 / (↑N + 1)
E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕhn':n' ≥ N⊢ -(1 / (↑N + 1)) ≤ a n - a n' ∧ a n - a n' ≤ 1 / (↑N + 1)
E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕhn':n' ≥ N⊢ -(1 / (↑N + 1)) ≤ a n - a n'E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕhn':n' ≥ N⊢ a n - a n' ≤ 1 / (↑N + 1)
E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕhn':n' ≥ N⊢ -(1 / (↑N + 1)) ≤ a n - a n' E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n) ∈ upperBounds E⊢ -(1 / (↑N + 1)) ≤ a n - a n'; E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n) ∈ upperBounds Ehm2:↑((a - b) n') ∉ upperBounds E⊢ -(1 / (↑N + 1)) ≤ a n - a n'
have bound1 : ((a-b) n') < a n := E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E⊢ ∀ n ≥ N, ∀ n' ≥ N, |a n - a n'| ≤ 1 / (↑N + 1) E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n) ∈ upperBounds Ehm2:↑((a - b) n') ∉ upperBounds E⊢ ↑((a - b) n') < ↑(a n); E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n) ∈ upperBounds Ehm2:↑(a n) ≤ ↑((a - b) n')⊢ ↑((a - b) n') ∈ upperBounds E; All goals completed! 🐙
have bound3 : 1/((n':ℚ)+1) ≤ 1/(N+1) := E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E⊢ ∀ n ≥ N, ∀ n' ≥ N, |a n - a n'| ≤ 1 / (↑N + 1) All goals completed! 🐙
E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n) ∈ upperBounds Ehm2:↑((a - b) n') ∉ upperBounds Ebound1:(a - b) n' < a nbound3:-(1 / (↑N + 1)) ≤ -(1 / (↑n' + 1))⊢ -(1 / (↑N + 1)) ≤ a n - a n'; E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n) ∈ upperBounds Ehm2:↑((a - b) n') ∉ upperBounds Ebound1:a n' - b n' < a nbound3:-(1 / (↑N + 1)) ≤ -(1 / (↑n' + 1))⊢ -(1 / (↑N + 1)) ≤ a n - a n'; All goals completed! 🐙
E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds En:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n') ∈ upperBounds E⊢ a n - a n' ≤ 1 / (↑N + 1); E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n') ∈ upperBounds Ehm2:↑((a - b) n) ∉ upperBounds E⊢ a n - a n' ≤ 1 / (↑N + 1)
have bound1 : ((a-b) n) < a n' := E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E⊢ ∀ n ≥ N, ∀ n' ≥ N, |a n - a n'| ≤ 1 / (↑N + 1) E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n') ∈ upperBounds Ehm2:↑((a - b) n) ∉ upperBounds E⊢ ↑((a - b) n) < ↑(a n'); E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)n:ℕhn:n ≥ Nn':ℕhn':n' ≥ Nhm1:↑(a n') ∈ upperBounds Ehm2:↑(a n') ≤ ↑((a - b) n)⊢ ↑((a - b) n) ∈ upperBounds E; All goals completed! 🐙
have bound2 : ((a-b) n) = a n - 1 / (n+1) := E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E⊢ ∀ n ≥ N, ∀ n' ≥ N, |a n - a n'| ≤ 1 / (↑N + 1) All goals completed! 🐙
have bound3 : 1/((n+1):ℚ) ≤ 1/(N+1) := E:Set RealN:ℕa:ℕ → ℚb:ℕ → ℚhb:∀ (n : ℕ), b n = 1 / (↑n + 1)hm1:∀ (n : ℕ), ↑(a n) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E⊢ ∀ n ≥ N, ∀ n' ≥ N, |a n - a n'| ≤ 1 / (↑N + 1) All goals completed! 🐙
All goals completed! 🐙Theorem 5.5.9 (Existence of least upper bound)
theorem Real.LUB_exist {E: Set Real} (hE: Set.Nonempty E) (hbound: BddAbove E): ∃ S, IsLUB E S := E:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃ S, IsLUB E S
-- This proof is written to follow the structure of the original text.
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.some⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ E⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choose⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds E⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchy⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds E⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds E⊢ ∃ S, IsLUB E S
have claim2 (N:ℕ) := LUB_claim2 N (E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds EN:ℕ⊢ ∀ (n : ℕ), b n = 1 / (↑n + 1) All goals completed! 🐙) hm1 hm2
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchy⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM a⊢ ∃ S, IsLUB E S; E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM a⊢ IsLUB E S
have claim4 : S = LIM (a - b) := E:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃ S, IsLUB E S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM athis:LIM b = 0⊢ S = LIM (a - b)
All goals completed! 🐙
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)⊢ (∀ x ∈ E, x ≤ S) ∧ ∀ M' ∈ upperBounds E, M' ≥ S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)⊢ ∀ x ∈ E, x ≤ SE:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)⊢ ∀ M' ∈ upperBounds E, M' ≥ S
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)⊢ ∀ x ∈ E, x ≤ S intro x E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)x:Realhx:x ∈ E⊢ x ≤ S; E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)x:Realhx:x ∈ E⊢ ∀ (n : ℕ), ↑(a n) ≥ x; E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)x:Realhx:x ∈ En:ℕ⊢ ↑(a n) ≥ x
All goals completed! 🐙
intro y E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)y:Realhy:y ∈ upperBounds E⊢ y ≥ S
have claim5 (n:ℕ) : y ≥ (a-b) n := E:Set RealhE:E.Nonemptyhbound:BddAbove E⊢ ∃ S, IsLUB E S E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)y:Realhy:y ∈ upperBounds En:ℕhm2:y < ↑((a - b) n)⊢ ∃ n, ↑((a - b) n) ∈ upperBounds E; E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)y:Realhy:y ∈ upperBounds En:ℕhm2:y < ↑((a - b) n)⊢ ↑((a - b) n) ∈ upperBounds E; E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)y:Realhy:y ∈ upperBounds En:ℕhm2:y < ↑((a - b) n)⊢ y ≤ ↑((a - b) n); All goals completed! 🐙
E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)y:Realhy:y ∈ upperBounds Eclaim5:∀ (n : ℕ), y ≥ ↑((a - b) n)⊢ y ≥ LIM (a - b); E:Set RealhE:E.Nonemptyhbound:BddAbove Ex₀:Real := hE.somehx₀:x₀ ∈ Em:ℕ → ℤ := fun n ↦ ⋯.choosea:ℕ → ℚ := fun n ↦ ↑(m n) / (↑n + 1)b:ℕ → ℚ := fun n ↦ 1 / (↑n + 1)claim1:∀ (n : ℕ), ∃! m, ↑(↑m / (↑n + 1)) ∈ upperBounds E ∧ ↑(↑m / (↑n + 1) - 1 / (↑n + 1)) ∉ upperBounds Ehb:(↑b).IsCauchyhm1:∀ (n : ℕ), ↑(↑⋯.choose / (↑n + 1)) ∈ upperBounds Ehm2:∀ (n : ℕ), ↑((a - b) n) ∉ upperBounds Eclaim2:∀ (N n : ℕ), n ≥ N → ∀ n' ≥ N, |↑⋯.choose / (↑n + 1) - ↑⋯.choose / (↑n' + 1)| ≤ 1 / (↑N + 1)claim3:(↑a).IsCauchyS:Real := LIM aclaim4:S = LIM (a - b)y:Realhy:y ∈ upperBounds Eclaim5:∀ (n : ℕ), y ≥ ↑((a - b) n)⊢ (↑(a - b)).IsCauchy; All goals completed! 🐙A bare-bones extended real class to define supremum.
inductive ExtendedReal where
| neg_infty : ExtendedReal
| real (x:Real) : ExtendedReal
| infty : ExtendedReal
Mathlib prefers ⊤ to denote the +∞ element.
instance ExtendedReal.inst_Top : Top ExtendedReal where
top := infty
Mathlib prefers ⊥ to denote the -∞ element.
instance ExtendedReal.inst_Bot: Bot ExtendedReal where
bot := neg_inftyinstance ExtendedReal.coe_real : Coe Real ExtendedReal where
coe x := ExtendedReal.real xinstance ExtendedReal.real_coe : Coe ExtendedReal Real where
coe X := match X with
| neg_infty => 0
| real x => x
| infty => 0abbrev ExtendedReal.IsFinite (X : ExtendedReal) : Prop := match X with
| neg_infty => False
| real _ => True
| infty => Falsetheorem ExtendedReal.finite_eq_coe {X: ExtendedReal} (hX: X.IsFinite) :
X = ((X:Real):ExtendedReal) := X:ExtendedRealhX:X.IsFinite⊢ X =
real
(match X with
| neg_infty => 0
| real x => x
| infty => 0)
hX:neg_infty.IsFinite⊢ neg_infty =
real
(match neg_infty with
| neg_infty => 0
| real x => x
| infty => 0)x✝:RealhX:(real x✝).IsFinite⊢ real x✝ =
real
(match real x✝ with
| neg_infty => 0
| real x => x
| infty => 0)hX:infty.IsFinite⊢ infty =
real
(match infty with
| neg_infty => 0
| real x => x
| infty => 0) hX:neg_infty.IsFinite⊢ neg_infty =
real
(match neg_infty with
| neg_infty => 0
| real x => x
| infty => 0)x✝:RealhX:(real x✝).IsFinite⊢ real x✝ =
real
(match real x✝ with
| neg_infty => 0
| real x => x
| infty => 0)hX:infty.IsFinite⊢ infty =
real
(match infty with
| neg_infty => 0
| real x => x
| infty => 0) try All goals completed! 🐙
All goals completed! 🐙Definition 5.5.10 (Supremum)
open Classical innoncomputable abbrev ExtendedReal.sup (E: Set Real) : ExtendedReal :=
if h1:E.Nonempty then (if h2:BddAbove E then ((Real.LUB_exist h1 h2).choose:Real) else ⊤) else ⊥Definition 5.5.10 (Supremum)
Definition 5.5.10 (Supremum)
theorem ExtendedReal.sup_of_unbounded {E: Set Real} (hb: ¬ BddAbove E) : sup E = ⊤ := E:Set Realhb:¬BddAbove E⊢ sup E = ⊤
have hE : E.Nonempty := E:Set Realhb:¬BddAbove E⊢ sup E = ⊤ E:Set Realhb:E = ∅⊢ BddAbove E; All goals completed! 🐙
All goals completed! 🐙Definition 5.5.10 (Supremum)
theorem ExtendedReal.sup_of_bounded {E: Set Real} (hnon: E.Nonempty) (hb: BddAbove E) :
IsLUB E (sup E) := E:Set Realhnon:E.Nonemptyhb:BddAbove E⊢ IsLUB E
(match sup E with
| neg_infty => 0
| real x => x
| infty => 0)
E:Set Realhnon:E.Nonemptyhb:BddAbove E⊢ IsLUB E ⋯.choose; All goals completed! 🐙theorem ExtendedReal.sup_of_bounded_finite {E: Set Real} (hnon: E.Nonempty) (hb: BddAbove E) :
(sup E).IsFinite := E:Set Realhnon:E.Nonemptyhb:BddAbove E⊢ (sup E).IsFinite All goals completed! 🐙Proposition 5.5.12
theorem Real.exist_sqrt_two : ∃ x:Real, x^2 = 2 := ⊢ ∃ x, x ^ 2 = 2
-- This proof is written to follow the structure of the original text.
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}⊢ ∃ x, x ^ 2 = 2
have claim1: 2 ∈ upperBounds E := ⊢ ∃ x, x ^ 2 = 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}⊢ ∀ x ∈ E, x ≤ 2
intro y E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}y:Realhy:y ∈ E⊢ y ≤ 2; E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}y:Realhy:0 ≤ y ∧ y ^ 2 < 2⊢ y ≤ 2; E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}y:Realhy:2 < y⊢ 0 ≤ y → 2 ≤ y ^ 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}y:Realhy:2 < yhpos:0 ≤ y⊢ 2 ≤ y ^ 2
calc
_ ≤ 2 * 2 := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}y:Realhy:2 < yhpos:0 ≤ y⊢ 2 ≤ 2 * 2 All goals completed! 🐙
_ ≤ y * y := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}y:Realhy:2 < yhpos:0 ≤ y⊢ 2 * 2 ≤ y * y All goals completed! 🐙
_ = y^2 := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}y:Realhy:2 < yhpos:0 ≤ y⊢ y * y = y ^ 2 All goals completed! 🐙
have claim1' : BddAbove E := ⊢ ∃ x, x ^ 2 = 2 E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds E⊢ ∃ M, M ∈ upperBounds E; All goals completed! 🐙
have claim2: 1 ∈ E := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonempty⊢ ∃ x, x ^ 2 = 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0⊢ ∃ x, x ^ 2 = 2
have claim3 : IsLUB E x := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
have claim4 : x ≥ 1 := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
have claim5 : x ≤ 2 := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
have claim6 : x.IsPos := ⊢ ∃ x, x ^ 2 = 2 E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2⊢ x > 0; All goals completed! 🐙
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPos⊢ x ^ 2 = 2; E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2⊢ x ^ 2 = 2E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2⊢ x ^ 2 = 2E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 = 2⊢ x ^ 2 = 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2⊢ x ^ 2 = 2 have claim11: ∃ ε, 0 < ε ∧ ε < 1 ∧ x^2 - 4*ε > 2 := ⊢ ∃ x, x ^ 2 = 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Real := min (1 / 2) ((x ^ 2 - 2) / 8)⊢ ∃ ε, 0 < ε ∧ ε < 1 ∧ x ^ 2 - 4 * ε > 2
have hx : x^2 - 2 > 0 := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
have hε : 0 < ε := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Real := min (1 / 2) ((x ^ 2 - 2) / 8)hx:x ^ 2 - 2 > 0hε:0 < εhε1:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ 1 / 2⊢ ∃ ε, 0 < ε ∧ ε < 1 ∧ x ^ 2 - 4 * ε > 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Real := min (1 / 2) ((x ^ 2 - 2) / 8)hx:x ^ 2 - 2 > 0hε:0 < εhε1:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ 1 / 2hε2:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ (x ^ 2 - 2) / 8⊢ ∃ ε, 0 < ε ∧ ε < 1 ∧ x ^ 2 - 4 * ε > 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Real := min (1 / 2) ((x ^ 2 - 2) / 8)hx:x ^ 2 - 2 > 0hε:0 < εhε1:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ 1 / 2hε2:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ (x ^ 2 - 2) / 8⊢ ε < 1E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Real := min (1 / 2) ((x ^ 2 - 2) / 8)hx:x ^ 2 - 2 > 0hε:0 < εhε1:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ 1 / 2hε2:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ (x ^ 2 - 2) / 8⊢ x ^ 2 - 4 * ε > 2 E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Real := min (1 / 2) ((x ^ 2 - 2) / 8)hx:x ^ 2 - 2 > 0hε:0 < εhε1:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ 1 / 2hε2:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ (x ^ 2 - 2) / 8⊢ ε < 1E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Real := min (1 / 2) ((x ^ 2 - 2) / 8)hx:x ^ 2 - 2 > 0hε:0 < εhε1:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ 1 / 2hε2:min (1 / 2) ((x ^ 2 - 2) / 8) ≤ (x ^ 2 - 2) / 8⊢ x ^ 2 - 4 * ε > 2 All goals completed! 🐙
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 - 4 * ε > 2⊢ x ^ 2 = 2
have claim12: (x-ε)^2 > 2 := calc
_ = x^2 - 2 * ε * x + ε * ε := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 - 4 * ε > 2⊢ (x - ε) ^ 2 = x ^ 2 - 2 * ε * x + ε * ε All goals completed! 🐙
_ ≥ x^2 - 2 * ε * 2 + 0 * 0 := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 - 4 * ε > 2⊢ x ^ 2 - 2 * ε * x + ε * ε ≥ x ^ 2 - 2 * ε * 2 + 0 * 0 All goals completed! 🐙
_ = x^2 - 4 * ε := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 - 4 * ε > 2⊢ x ^ 2 - 2 * ε * 2 + 0 * 0 = x ^ 2 - 4 * ε All goals completed! 🐙
_ > 2 := hε3
have why (y:Real) (hy: y ∈ E) : x - ε ≥ y := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
have claim13: x-ε ∈ upperBounds E := ⊢ ∃ x, x ^ 2 = 2 rwa [upperBound_defE:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 > 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 - 4 * ε > 2claim12:(x - ε) ^ 2 > 2why:∀ y ∈ E, x - ε ≥ y⊢ ∀ x_1 ∈ E, x_1 ≤ x - ε
have claim14: x ≤ x-ε := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
All goals completed! 🐙
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2⊢ x ^ 2 = 2 have claim7 : ∃ ε, 0 < ε ∧ ε < 1 ∧ x^2 + 5*ε < 2 := ⊢ ∃ x, x ^ 2 = 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Real := min (1 / 2) ((2 - x ^ 2) / 10)⊢ ∃ ε, 0 < ε ∧ ε < 1 ∧ x ^ 2 + 5 * ε < 2
have hx : 2 - x^2 > 0 := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
have hε: 0 < ε := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Real := min (1 / 2) ((2 - x ^ 2) / 10)hx:2 - x ^ 2 > 0hε:0 < εhε1:ε ≤ 1 / 2⊢ ∃ ε, 0 < ε ∧ ε < 1 ∧ x ^ 2 + 5 * ε < 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Real := min (1 / 2) ((2 - x ^ 2) / 10)hx:2 - x ^ 2 > 0hε:0 < εhε1:ε ≤ 1 / 2hε2:ε ≤ (2 - x ^ 2) / 10⊢ ∃ ε, 0 < ε ∧ ε < 1 ∧ x ^ 2 + 5 * ε < 2
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Real := min (1 / 2) ((2 - x ^ 2) / 10)hx:2 - x ^ 2 > 0hε:0 < εhε1:ε ≤ 1 / 2hε2:ε ≤ (2 - x ^ 2) / 10⊢ ε < 1E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Real := min (1 / 2) ((2 - x ^ 2) / 10)hx:2 - x ^ 2 > 0hε:0 < εhε1:ε ≤ 1 / 2hε2:ε ≤ (2 - x ^ 2) / 10⊢ x ^ 2 + 5 * ε < 2 E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Real := min (1 / 2) ((2 - x ^ 2) / 10)hx:2 - x ^ 2 > 0hε:0 < εhε1:ε ≤ 1 / 2hε2:ε ≤ (2 - x ^ 2) / 10⊢ ε < 1E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Real := min (1 / 2) ((2 - x ^ 2) / 10)hx:2 - x ^ 2 > 0hε:0 < εhε1:ε ≤ 1 / 2hε2:ε ≤ (2 - x ^ 2) / 10⊢ x ^ 2 + 5 * ε < 2 All goals completed! 🐙
E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 + 5 * ε < 2⊢ x ^ 2 = 2
have claim8 : (x+ε)^2 < 2 := calc
_ = x^2 + (2*x)*ε + ε*ε := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 + 5 * ε < 2⊢ (x + ε) ^ 2 = x ^ 2 + 2 * x * ε + ε * ε All goals completed! 🐙
_ ≤ x^2 + (2*2)*ε + 1*ε := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 + 5 * ε < 2⊢ x ^ 2 + 2 * x * ε + ε * ε ≤ x ^ 2 + 2 * 2 * ε + 1 * ε All goals completed! 🐙
_ = x^2 + 5*ε := E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 + 5 * ε < 2⊢ x ^ 2 + 2 * 2 * ε + 1 * ε = x ^ 2 + 5 * ε All goals completed! 🐙
_ < 2 := hε3
have claim9 : x + ε ∈ E := ⊢ ∃ x, x ^ 2 = 2 E:Set Real := {y | y ≥ 0 ∧ y ^ 2 < 2}claim1:2 ∈ upperBounds Eclaim1':BddAbove Eclaim2:1 ∈ Eclaim2':E.Nonemptyx:Real :=
match ExtendedReal.sup E with
| ExtendedReal.neg_infty => 0
| ExtendedReal.real x => x
| ExtendedReal.infty => 0claim3:IsLUB E xclaim4:x ≥ 1claim5:x ≤ 2claim6:x.IsPosh:x ^ 2 < 2ε:Realhε1:0 < εhε2:ε < 1hε3:x ^ 2 + 5 * ε < 2claim8:(x + ε) ^ 2 < 2⊢ 0 ≤ x + ε; All goals completed! 🐙
have claim10 : x + ε ≤ x := ⊢ ∃ x, x ^ 2 = 2 All goals completed! 🐙
All goals completed! 🐙
All goals completed! 🐙Remark 5.5.13
theorem Real.exist_irrational : ∃ x:Real, ¬ ∃ q:ℚ, x = (q:Real) := ⊢ ∃ x, ¬∃ q, x = ↑q All goals completed! 🐙Helper lemma for Exercise 5.5.1.
Exercise 5.5.1
theorem Real.inf_neg {E: Set Real} {M:Real} (h: IsLUB E M) : IsGLB (-E) (-M) := E:Set RealM:Realh:IsLUB E M⊢ IsGLB (-E) (-M) All goals completed! 🐙theorem Real.GLB_exist {E: Set Real} (hE: Set.Nonempty E) (hbound: BddBelow E): ∃ S, IsGLB E S := E:Set RealhE:E.Nonemptyhbound:BddBelow E⊢ ∃ S, IsGLB E S
All goals completed! 🐙open Classical in
noncomputable abbrev ExtendedReal.inf (E: Set Real) : ExtendedReal :=
if h1:E.Nonempty then (if h2:BddBelow E then ((Real.GLB_exist h1 h2).choose:Real) else ⊥) else ⊤theorem ExtendedReal.inf_of_empty : inf ∅ = ⊤ := ⊢ inf ∅ = ⊤ All goals completed! 🐙theorem ExtendedReal.inf_of_unbounded {E: Set Real} (hb: ¬ BddBelow E) : inf E = ⊥ := E:Set Realhb:¬BddBelow E⊢ inf E = ⊥
have hE : E.Nonempty := E:Set Realhb:¬BddBelow E⊢ inf E = ⊥ E:Set Realhb:E = ∅⊢ BddBelow E; All goals completed! 🐙
All goals completed! 🐙theorem ExtendedReal.inf_of_bounded {E: Set Real} (hnon: E.Nonempty) (hb: BddBelow E) :
IsGLB E (inf E) := E:Set Realhnon:E.Nonemptyhb:BddBelow E⊢ IsGLB E
(match inf E with
| neg_infty => 0
| real x => x
| infty => 0) E:Set Realhnon:E.Nonemptyhb:BddBelow E⊢ IsGLB E ⋯.choose; All goals completed! 🐙theorem ExtendedReal.inf_of_bounded_finite {E: Set Real} (hnon: E.Nonempty) (hb: BddBelow E) :
(inf E).IsFinite := E:Set Realhnon:E.Nonemptyhb:BddBelow E⊢ (inf E).IsFinite All goals completed! 🐙Exercise 5.5.5
theorem Real.irrat_between {x y:Real} (hxy: x < y) :
∃ z, x < z ∧ z < y ∧ ¬ ∃ q:ℚ, z = (q:Real) := x:Realy:Realhxy:x < y⊢ ∃ z, x < z ∧ z < y ∧ ¬∃ q, z = ↑q All goals completed! 🐙/- Use the notion of supremum in this section to define a Mathlib `sSup` operation -/
noncomputable instance Real.inst_SupSet : SupSet Real where
sSup E := ((ExtendedReal.sup E):Real)
Use the sSup operation to build a conditionally complete lattice structure on Real.
noncomputable instance Real.inst_conditionallyCompleteLattice :
ConditionallyCompleteLattice Real :=
conditionallyCompleteLatticeOfLatticeOfsSup Real
(⊢ ∀ (s : Set Real), BddAbove s → s.Nonempty → IsLUB s (sSup s) s✝:Set Reala✝¹:BddAbove s✝a✝:s✝.Nonempty⊢ IsLUB s✝ (sSup s✝); All goals completed! 🐙)theorem ExtendedReal.sSup_of_bounded {E: Set Real} (hnon: E.Nonempty) (hb: BddAbove E) :
IsLUB E (sSup E) := sup_of_bounded hnon hbend Chapter5