Ir al contenido principal

Reto 24: La sucesión 1, -1, 1, -1,... no es convergente (2ª versión)

Usando el Reto 22 (que afirma que si una sucesión tiene dos subsucesiones que convergen a límites distintos, entonces la sucesión no es convergente) demostrar que la sucesión definida por 1, -1, 1, -1, ... no es convergente.

Para ello, completar la siguiente teoría:

import Mathlib.Tactic

-- a converge a L
def SeqLim (a : ℕ → ℝ) (L : ℝ) : Prop :=
  ∀ ε > 0, ∃ k : ℕ, ∀ n ≥ k, |a n - L| < ε

-- La sucesión a es convergente
def SeqConv (a : ℕ → ℝ) : Prop :=
  ∃ L, SeqLim a L

-- φ es una función de extracción.
def IsExtraction (φ : ℕ → ℕ) : Prop :=
  StrictMono φ

-- b es una subsucesión de a.
def Subseq (b a : ℕ → ℝ) : Prop :=
  ∃ φ, IsExtraction φ ∧ b = a ∘ φ

variable {a : ℕ → ℝ}

example
  (ha : ∀ n, a n = (-1)^n)
  : ¬SeqConv a :=
by sorry

1. Demostración en lenguaje natural

Por el Reto 22, basta demostrar que la sucesión \(a\) tiene dos subsucesiones que convergen a límites distintos. Para ello, consideramos las funciones \(φ₁\) y \(φ₂\) de \(ℕ\) en \(ℕ\) definidas por \[ \begin{array}{ll} φ₁(n) &= 2n \\ φ₂(n) &= 2n + 1 \end{array} \] Ambas son funciones de extracción ya que, para todo \(i, j ∈ ℕ\) con \(i < j\), se tiene que \[ \begin{array}{ll} φ₁(i) &= 2i < 2j = φ₁(j) \\ φ₂(i) &= 2i + 1 < 2j + 1 = φ₂(j) \end{array} \] Definimos las subsucesiones de \(a\) \[ \begin{array}{ll} b₁ &= a ∘ φ₁ \\ b₂ &= a ∘ φ₂ \end{array} \] Ambas subsucesiones son constantes (\(b₁\) vale 1 y \(b₂\) vale -1), ya que para todo \(n ∈ ℕ\) \[ \begin{array}{ll} b₁(n) &= a(2n) = (-1)²ⁿ = 1 \\ b₂(n) &= a(2n + 1) = (-1)²ⁿ⁺¹ = -1 \end{array} \] Luego, aplicando el Reto 23 que dice "toda sucesión constante converge a su valor", \(b₁\) converge a 1 y \(b₂\) converge a -1. Como \(1 ≠ -1\), \(a\) tiene dos subsucesiones con límites distintos y, por el Reto 22, no es convergente.

2. Demostraciones en Lean 4

import Mathlib.Tactic

variable {a : ℕ → ℝ}

-- Definiciones
-- ============

-- L es el límite de la sucesión a.
def SeqLim (a : ℕ → ℝ) (L : ℝ) : Prop :=
  ∀ ε > 0, ∃ k : ℕ, ∀ n ≥ k, |a n - L| < ε

-- La sucesión a es convergente.
def SeqConv (a : ℕ → ℝ) : Prop :=
  ∃ L, SeqLim a L

-- φ es una función de extracción.
def IsExtraction (φ : ℕ → ℕ) : Prop :=
  StrictMono φ

-- v es una subsucesión de u.
def Subseq (v u : ℕ → ℝ) : Prop :=
  ∃ φ, IsExtraction φ ∧ v = u ∘ φ

-- Lemas auxiliares demostrados en retos anteriores
-- ================================================

lemma seqLim_unique -- del Reto 9
  (hL : SeqLim a L)
  (hM : SeqLim a M)
  : L = M :=
by
  by_contra h
  -- h : ¬L = M
  -- ⊢ False
  let ε := |L - M|
  apply lt_irrefl ε
  -- ⊢ ε < ε
  have h1 : 0 < ε/2 := half_pos (abs_sub_pos.mpr h)
  obtain ⟨k1, hk1⟩ := hL (ε/2) h1
  -- k1 : ℕ
  -- hk1 : ∀ n ≥ k1, |a n - L| < ε / 2
  obtain ⟨k2, hk2⟩ := hM (ε/2) h1
  -- k2 : ℕ
  -- hk2 : ∀ n ≥ k2, |a n - M| < ε / 2
  let k := max k1 k2
  have h2 : k ≥ k1 := le_max_left k1 k2
  have h3 : k ≥ k2 := le_max_right k1 k2
  have h4 : |a k - L| < ε/2 := hk1 k h2
  have h5 : |a k - M| < ε/2 := hk2 k h3
  calc ε = |L - M|                 := rfl
       _ = |(L - M) + 0|           := congrArg abs (add_zero (L - M)).symm
       _ = |(L - M) + (a k - a k)| := congrArg (|(L - M) + ·|) (sub_self (a k)).symm
       _ = |(L - a k) + (a k - M)| := congrArg abs (by ring)
       _ ≤ |L - a k| + |a k - M|   := abs_add_le (L - a k) (a k - M)
       _ = |a k - L| + |a k - M|   := congrArg (· + |a k - M|) (abs_sub_comm L (a k))
       _ < ε/2 + ε/2               := add_lt_add h4 h5
       _ = ε                       := add_halves ε

lemma seqLim_of_subseq -- del Reto 21
  {u v : ℕ → ℝ}
  {a : ℝ}
  (hv : Subseq v u)
  (ha : SeqLim u a)
  : SeqLim v a :=
by
  obtain ⟨φ, hφ, rfl⟩ := hv
  -- φ : ℕ → ℕ
  -- hφ : IsExtraction φ
  -- ⊢ SeqLim (u ∘ φ) a
  intros ε hε
  -- ε : ℝ
  -- hε : ε > 0
  -- ⊢ ∃ k, ∀ n ≥ k, |(u ∘ φ) n - a| < ε
  obtain ⟨k, hk⟩ := ha ε hε
  -- k : ℕ
  -- hk : ∀ n ≥ k, |u n - a| < ε
  exact ⟨k, fun n hn ↦ hk (φ n) (le_trans hn hφ.le_apply)⟩

lemma not_seqConv_of_subseq_seqLim_ne -- del Reto 22
  (hb₁ : Subseq b₁ a)
  (hL₁ : SeqLim b₁ L₁)
  (hb₂ : Subseq b₂ a)
  (hL₂ : SeqLim b₂ L₂)
  (h : L₁ ≠ L₂)
  : ¬SeqConv a :=
by
  rintro ⟨L, hL⟩
  -- L : ℝ
  -- hL : SeqLim a L
  -- ⊢ False
  exact h ((seqLim_unique hL₁ (seqLim_of_subseq hb₁ hL)).trans
           (seqLim_unique (seqLim_of_subseq hb₂ hL) hL₂))

lemma seqLim_const -- del Reto 23
  (h : ∀ n, a n = L)
  : SeqLim a L :=
by
  intro ε hε
  -- ε : ℝ
  -- hε : ε > 0
  -- ⊢ ∃ k, ∀ n ≥ k, |a n - L| < ε
  use 0
  -- ⊢ ∀ n ≥ 0, |a n - L| < ε
  rintro n -
  -- n : ℕ
  -- ⊢ |a n - L| < ε
  calc |a n - L|
     = |L - L|    := congrArg (|· - L|) (h n)
   _ = |0|        := congrArg abs (sub_self L)
   _ = 0          := abs_zero
   _ < ε          := hε

-- Soluciones del ejercicio
-- ========================

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

lemma isExtraction_even : IsExtraction (fun n => 2 * n) :=
by
  intro i j hij
  -- i j : ℕ
  -- hij : i < j
  -- ⊢ (fun n => 2 * n) i < (fun n => 2 * n) j
  dsimp
  -- ⊢ 2 * i < 2 * j
  omega

lemma isExtraction_odd : IsExtraction (fun n => 2 * n + 1) :=
by
  intro i j hij
  -- i j : ℕ
  -- hij : i < j
  -- ⊢ (fun n => 2 * n + 1) i < (fun n => 2 * n + 1) j
  dsimp
  -- ⊢ 2 * i + 1 < 2 * j + 1
  omega

lemma seq_even
  (ha : ∀ n, a n = (-1)^n)
  (n : ℕ)
  : a (2 * n) = 1 :=
by
  calc a (2 * n)
         = (-1) ^ (2 * n) := ha (2 * n)
       _ = 1              := by simp

lemma seq_odd
  (ha : ∀ n, a n = (-1)^n)
  (n : ℕ)
  : a (2 * n + 1) = -1 :=
by
  calc a (2 * n + 1)
         = (-1) ^ (2 * n + 1) := ha (2 * n + 1)
       _ = -1                 := by simp [pow_succ]

example
  (ha : ∀ n, a n = (-1)^n)
  : ¬SeqConv a :=
by
  let φ₁ := fun n : ℕ => 2 * n
  let φ₂ := fun n : ℕ => 2 * n + 1
  have hb₁ : Subseq (a ∘ φ₁) a := ⟨φ₁, isExtraction_even, rfl⟩
  have hb₂ : Subseq (a ∘ φ₂) a  := ⟨φ₂, isExtraction_odd, rfl⟩
  have hL₁ : SeqLim (a ∘ φ₁) 1 :=
    seqLim_const (fun n => seq_even ha n)
  have hL₂ : SeqLim (a ∘ φ₂) (-1) :=
    seqLim_const (fun n => seq_odd ha n)
  have h : (1:ℝ) ≠ -1 := by norm_num
  exact not_seqConv_of_subseq_seqLim_ne hb₁ hL₁ hb₂ hL₂ h

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

example
  (ha : ∀ n, a n = (-1)^n)
  : ¬SeqConv a :=
by
  have h1 : IsExtraction (fun n => 2 * n) := isExtraction_even
  have hb₁ : Subseq (a ∘ fun n => 2 * n) a := ⟨_, h1, rfl⟩
  have hL₁ : SeqLim (a ∘ fun n => 2 * n) 1 :=
    seqLim_const (fun n => seq_even ha n)
  have h2 : IsExtraction (fun n => 2 * n + 1) := isExtraction_odd
  have hb₂ : Subseq (a ∘ fun n => 2 * n + 1) a := ⟨_, h2, rfl⟩
  have hL₂ : SeqLim (a ∘ fun n => 2 * n + 1) (-1) :=
    seqLim_const (fun n => seq_odd ha n)
  exact not_seqConv_of_subseq_seqLim_ne hb₁ hL₁ hb₂ hL₂ (by norm_num)

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

theorem not_seqConv_neg_one_pow
  (ha : ∀ n, a n = (-1)^n)
  : ¬SeqConv a :=
not_seqConv_of_subseq_seqLim_ne
  ⟨_, isExtraction_even, rfl⟩
  (seqLim_const (fun n => seq_even ha n))
  ⟨_, isExtraction_odd, rfl⟩
  (seqLim_const (fun n => seq_odd ha n))
  (by norm_num)

Es posible consultar, modificar y ejecutar el código de estas demostraciones de forma interactiva en Lean 4 Web.

3. Soluciones colaborativas

¿Has encontrado una demostración distinta de las publicadas? Puedes compartirla en los comentarios de abajo siguiendo estos pasos:

  • Escribe tu demostración en live.lean-lang.org y comprueba que se compila sin errores.
  • Copia el código y publícalo en los comentarios de esta entrada, dentro de un bloque de código de Lean:
```lean
   -- tu demostración
```

Comentarios