Skip to main content

Si a converge a L, entonces (∃ N)(∀ n ≥ N)[aₙ ≥ L - 1]

Demostrar que si la sucesión \(a\) converge a \(L\), entonces \[ (∃ N)(∀ n ≥ N)[aₙ ≥ L - 1] \]

Para ello, completar la siguiente teoría de Lean4:

import Mathlib.Data.Real.Basic
import Mathlib.Tactic

variable {a :   }
variable {L : }

def LimSuc (a :   ) (L : ) : Prop :=
   ε > 0,  N : ,  n  N, |a n - L| < ε

example
  (ha : LimSuc a L) :
   N,  n  N, a n  L - 1 :=
by
  sorry

1. Demostración en lenguaje natural

Puesto que \(a\) converge a \(L\), existe un \(N ∈ ℕ\) tal que \[ (∀ n ≥ N) |aₙ - L| < 1 \tag{1} \] Veamos que \[ (∀ n ≥ N) [aₙ ≥ L - 1] \] En efecto, sea \(n ≥ N\). Por (1), \[ |aₙ - L| < 1 \] Luego, \begin{align} &-1 < aₙ - L ∧ aₙ - L < 1 \newline &\Longrightarrow -1 < aₙ - L \newline &\Longrightarrow aₙ ≥ L - 1 \end{align}

2. Demostraciones en Lean 4

import Mathlib.Data.Real.Basic
import Mathlib.Tactic

variable {a :   }
variable {L : }

def LimSuc (a :   ) (L : ) : Prop :=
   ε > 0,  N : ,  n  N, |a n - L| < ε

-- 1ª demostración
-- ===============

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 : LimSuc 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

-- 2ª demostración
-- ===============

example
  (ha : LimSuc 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)

-- 3ª demostración
-- ===============

example
  (ha : LimSuc 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

-- 4ª demostración
-- ===============

example
  (ha : LimSuc 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

-- 5ª demostración
-- ===============

example
  (ha : LimSuc 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

-- 6ª demostración
-- ===============

example
  (ha : LimSuc a L) :
   N,  n  N, a n  L - 1 :=
let N, hN := ha 1 (by grind)
N, fun n hn => by grind

-- Lemas usados
-- ============

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)

Se puede interactuar con las demostraciones anteriores en Lean 4 Web.