If a converges to L, then (∃ N)(∀ n ≥ N)[aₙ ≥ L - 1]
Prove that if the sequence \(a\) converges to \(L\), then \[ (∃ N)(∀ n ≥ N)[aₙ ≥ L - 1] \]
To do so, complete the following Lean 4 theory:
import Mathlib.Data.Real.Basic import Mathlib.Tactic variable {a : ℕ → ℝ} variable {L : ℝ} def SeqLim (a : ℕ → ℝ) (L : ℝ) : Prop := ∀ ε > 0, ∃ N : ℕ, ∀ n ≥ N, |a n - L| < ε example (ha : SeqLim a L) : ∃ N, ∀ n ≥ N, a n ≥ L - 1 := by sorry
1. Proof in natural language
Since \(a\) converges to \(L\), there exists an \(N ∈ ℕ\) such that \[ (∀ n ≥ N) |aₙ - L| < 1 \tag{1} \] We show that \[ (∀ n ≥ N) [aₙ ≥ L - 1] \] Indeed, let \(n ≥ N\). By (1), \[ |aₙ - L| < 1 \] Hence, \begin{align} &-1 < aₙ - L ∧ aₙ - L < 1 \newline &\Longrightarrow -1 < aₙ - L \newline &\Longrightarrow aₙ ≥ L - 1 \end{align}
2. Proofs in Lean 4
import Mathlib.Data.Real.Basic import Mathlib.Tactic variable {a : ℕ → ℝ} variable {L : ℝ} def SeqLim (a : ℕ → ℝ) (L : ℝ) : Prop := ∀ ε > 0, ∃ N : ℕ, ∀ n ≥ N, |a n - L| < ε -- Proof 1 -- ======= variable (x : ℝ) lemma L1 (h : -1 < x) : 0 ≤ x + 1 := by have h1 : -1 + 1 < x + 1 := (add_lt_add_iff_right 1).mpr h have h2 : 0 < x + 1 := neg_lt_iff_pos_add.mp h exact le_of_lt h2 example (ha : SeqLim a L) : ∃ N, ∀ n ≥ N, a n ≥ L - 1 := by obtain ⟨N, hN⟩ := ha 1 one_pos -- N : ℕ -- hN : ∀ n ≥ N, |a n - L| < 1 use N -- ⊢ ∀ n ≥ N, a n ≥ L - 1 intro n hn -- n : ℕ -- hn : n ≥ N -- ⊢ a n ≥ L - 1 have h1 : |a n - L| < 1 := hN n hn have h2 : -1 < a n - L ∧ a n - L < 1 := abs_lt.mp h1 have h3 : -1 < a n - L := h2.1 rw [ge_iff_le, ← sub_nonneg] -- ⊢ 0 ≤ a n - (L - 1) calc 0 _ ≤ (a n - L) + 1 := L1 (a n - L) h3 _ = a n - (L - 1) := sub_add (a n) L 1 -- Proof 2 -- ======= example (ha : SeqLim a L) : ∃ N, ∀ n ≥ N, a n ≥ L - 1 := by obtain ⟨N, hN⟩ := ha 1 one_pos -- N : ℕ -- hN : ∀ n ≥ N, |a n - L| < 1 use N -- ⊢ ∀ n ≥ N, a n ≥ L - 1 intro n hn -- n : ℕ -- hn : n ≥ N -- ⊢ a n ≥ L - 1 have h1 : -1 < a n - L := (abs_lt.mp (hN n hn)).1 have h2 : a n - (L - 1) = (a n - L) + 1 := (sub_add (a n) L 1).symm rw [ge_iff_le, ← sub_nonneg] -- ⊢ 0 ≤ a n - (L - 1) rw [h2] -- ⊢ 0 ≤ a n - L + 1 exact neg_le_iff_add_nonneg.mp (le_of_lt h1) -- Proof 3 -- ======= example (ha : SeqLim a L) : ∃ N, ∀ n ≥ N, a n ≥ L - 1 := by obtain ⟨N, hN⟩ := ha 1 one_pos -- N : ℕ -- hN : ∀ n ≥ N, |a n - L| < 1 use N -- ⊢ ∀ n ≥ N, a n ≥ L - 1 intro n hn -- n : ℕ -- hn : n ≥ N -- ⊢ a n ≥ L - 1 have h1 : -1 < a n - L := (abs_lt.mp (hN n hn)).1 rw [ge_iff_le, ← sub_nonneg] -- ⊢ 0 ≤ a n - (L - 1) calc 0 _ ≤ (a n - L) + 1 := by grind _ = a n - (L - 1) := by grind -- Proof 4 -- ======= example (ha : SeqLim a L) : ∃ N, ∀ n ≥ N, a n ≥ L - 1 := by obtain ⟨N, hN⟩ := ha 1 one_pos -- N : ℕ -- hN : ∀ n ≥ N, |a n - L| < 1 use N -- ⊢ ∀ n ≥ N, a n ≥ L - 1 intro n hn -- n : ℕ -- hn : n ≥ N -- ⊢ a n ≥ L - 1 have : -1 < a n - L := (abs_lt.mp (hN n hn)).1 linarith -- Proof 5 -- ======= example (ha : SeqLim a L) : ∃ N, ∀ n ≥ N, a n ≥ L - 1 := by obtain ⟨N, hN⟩ := ha 1 (by grind) -- N : ℕ -- hN : ∀ n ≥ N, |a n - L| < 1 refine ⟨N, fun n hn => ?_⟩ -- n : ℕ -- hn : n ≥ N -- ⊢ a n ≥ L - 1 grind -- Proof 6 -- ======= example (ha : SeqLim a L) : ∃ N, ∀ n ≥ N, a n ≥ L - 1 := let ⟨N, hN⟩ := ha 1 (by grind) ⟨N, fun n hn => by grind⟩ -- Lemmas used -- =========== variable (x y z : ℝ) #check (abs_lt : |x| < y ↔ -y < x ∧ x < y) #check (add_lt_add_iff_right x : y + x < z + x ↔ y < z) #check (ge_iff_le : x ≥ y ↔ y ≤ x) #check (le_of_lt : x < y → x ≤ y) #check (neg_le_iff_add_nonneg : -x ≤ y ↔ 0 ≤ y + x) #check (neg_lt_iff_pos_add : -x < y ↔ 0 < y + x) #check (one_pos : 0 < 1) #check (sub_add x y z : x - y + z = x - (y - z)) #check (sub_nonneg : 0 ≤ x - y ↔ y ≤ x)
You can inspect, modify and run the code of these proofs interactively in Lean 4 Web.
3. Collaborative solutions
Have you found a proof that differs from the published ones? You can share it in the comments below by following these steps:
- Write your proof in live.lean-lang.org and check that it compiles without errors.
- Copy the code and post it in the comments of this entry, inside a Lean code block:
```lean -- your proof ```
Comments