--- title: Pruebas de a+aq+aq²+···+aqⁿ = a(1-qⁿ⁺¹)/(1-q) date: 2024-09-09 06:00:00 UTC+02:00 category: Inducción has_math: true --- [mathjax] Demostrar que si \\(q ≠ 1\\), entonces la suma de los términos de la progresión geométrica \\[ a + aq + aq^2 + ··· + aq^n \\] es \\[ \\dfrac{a(1 - q^{n+1})}{1 - q} \\] Para ello, completar la siguiente teoría de Lean4:
import Mathlib.Data.Nat.Defs
import Mathlib.Tactic
open Nat
variable (n : ℕ)
variable (a q : ℝ)
def sumaPG : ℝ → ℝ → ℕ → ℝ
| a, _, 0 => a
| a, q, n + 1 => sumaPG a q n + (a * q^(n + 1))
example
(h : q ≠ 1)
: sumaPG a q n = a * (1 - q^(n + 1)) / (1 - q) :=
by sorry
import Mathlib.Data.Nat.Defs
import Mathlib.Tactic
open Nat
variable (n : ℕ)
variable (a q : ℝ)
set_option pp.fieldNotation false
@[simp]
def sumaPG : ℝ → ℝ → ℕ → ℝ
| a, _, 0 => a
| a, q, n + 1 => sumaPG a q n + (a * q^(n + 1))
-- 1ª demostración
-- ===============
example
(h : q ≠ 1)
: sumaPG a q n = a * (1 - q^(n + 1)) / (1 - q) :=
by
have h1 : 1 - q ≠ 0 := by exact sub_ne_zero_of_ne (id (Ne.symm h))
suffices h : (1 - q) * sumaPG a q n = a * (1 - q ^ (n + 1))
from by exact CancelDenoms.cancel_factors_eq_div h h1
induction n with
| zero =>
-- ⊢ (1 - q) * sumaPG a q 0 = a * (1 - q ^ (0 + 1))
calc (1 - q) * sumaPG a q 0
= (1 - q) * a := by simp only [sumaPG]
_ = a * (1 - q) := by simp only [mul_comm]
_ = a * (1 - q ^ 1) := by simp
_ = a * (1 - q ^ (0 + 1)) := by simp
| succ m HI =>
-- m : ℕ
-- HI : (1 - q) * sumaPG a q m = a * (1 - q ^ (m + 1))
-- ⊢ (1 - q) * sumaPG a q (m + 1) = a * (1 - q ^ (m + 1 + 1))
calc (1 - q) * sumaPG a q (m + 1)
= (1 - q) * (sumaPG a q m + (a * q^(m + 1)))
:= by simp only [sumaPG]
_ = (1 - q) * sumaPG a q m + (1 - q) * (a * q ^ (m + 1))
:= by rw [left_distrib]
_ = a * (1 - q ^ (m + 1)) + (1 - q) * (a * q ^ (m + 1))
:= congrArg (. + (1 - q) * (a * q ^ (m + 1))) HI
_ = a * (1 - q ^ (m + 1 + 1))
:= by ring_nf
-- 2ª demostración
-- ===============
example
(h : q ≠ 1)
: sumaPG a q n = a * (1 - q^(n + 1)) / (1 - q) :=
by
have h1 : 1 - q ≠ 0 := by exact sub_ne_zero_of_ne (id (Ne.symm h))
suffices h : (1 - q) * sumaPG a q n = a * (1 - q ^ (n + 1))
from by exact CancelDenoms.cancel_factors_eq_div h h1
induction n with
| zero =>
-- ⊢ (1 - q) * sumaPG a q 0 = a * (1 - q ^ (0 + 1))
simp
-- ⊢ (1 - q) * a = a * (1 - q)
ring_nf
| succ m HI =>
-- m : ℕ
-- HI : (1 - q) * sumaPG a q m = a * (1 - q ^ (m + 1))
-- ⊢ (1 - q) * sumaPG a q (m + 1) = a * (1 - q ^ (m + 1 + 1))
calc (1 - q) * sumaPG a q (m + 1)
= (1 - q) * (sumaPG a q m + (a * q ^ (m + 1)))
:= rfl
_ = (1 - q) * sumaPG a q m + (1 - q) * (a * q ^ (m + 1))
:= by ring_nf
_ = a * (1 - q ^ (m + 1)) + (1 - q) * (a * q ^ (m + 1))
:= congrArg (. + (1 - q) * (a * q ^ (m + 1))) HI
_ = a * (1 - q ^ (m + 1 + 1))
:= by ring_nf
Se puede interactuar con las demostraciones anteriores en [Lean 4 Web](https://live.lean-lang.org/#url=https://raw.githubusercontent.com/jaalonso/Calculemus2_es/main/src/Suma_de_progresion_geometrica.lean).
theory Suma_de_progresion_geometrica
imports Main HOL.Real
begin
fun sumaPG :: "real ⇒ real ⇒ nat ⇒ real" where
"sumaPG a q 0 = a"
| "sumaPG a q (Suc n) = sumaPG a q n + (a * q^(n + 1))"
(* 1ª demostración *)
lemma
"(1 - q) * sumaPG a q n = a * (1 - q^(n + 1))"
proof (induct n)
show "(1 - q) * sumaPG a q 0 = a * (1 - q ^ (0 + 1))"
by simp
next
fix n
assume HI : "(1 - q) * sumaPG a q n = a * (1 - q ^ (n + 1))"
have "(1 - q) * sumaPG a q (Suc n) =
(1 - q) * (sumaPG a q n + (a * q^(n + 1)))"
by simp
also have "… = (1 - q) * sumaPG a q n + (1 - q) * a * q^(n + 1)"
by (simp add: algebra_simps)
also have "… = a * (1 - q ^ (n + 1)) + (1 - q) * a * q^(n + 1)"
using HI by simp
also have "… = a * (1 - q ^ (n + 1) + (1 - q) * q^(n + 1))"
by (simp add: algebra_simps)
also have "… = a * (1 - q ^ (n + 1) + q^(n + 1) - q^(n + 2))"
by (simp add: algebra_simps)
also have "… = a * (1 - q^(n + 2))"
by simp
also have "… = a * (1 - q ^ (Suc n + 1))"
by simp
finally show "(1 - q) * sumaPG a q (Suc n) = a * (1 - q ^ (Suc n + 1))"
by this
qed
(* 2ª demostración *)
lemma
"(1 - q) * sumaPG a q n = a * (1 - q^(n + 1))"
proof (induct n)
show "(1 - q) * sumaPG a q 0 = a * (1 - q ^ (0 + 1))"
by simp
next
fix n
assume HI : "(1 - q) * sumaPG a q n = a * (1 - q ^ (n + 1))"
have "(1 - q) * sumaPG a q (Suc n) =
(1 - q) * sumaPG a q n + (1 - q) * a * q^(n + 1)"
by (simp add: algebra_simps)
also have "… = a * (1 - q ^ (n + 1)) + (1 - q) * a * q^(n + 1)"
using HI by simp
also have "… = a * (1 - q ^ (n + 1) + q^(n + 1) - q^(n + 2))"
by (simp add: algebra_simps)
finally show "(1 - q) * sumaPG a q (Suc n) = a * (1 - q ^ (Suc n + 1))"
by simp
qed
(* 3ª demostración *)
lemma
"(1 - q) * sumaPG a q n = a * (1 - q^(n + 1))"
using power_add
by (induct n) (auto simp: algebra_simps)
end