-
Notifications
You must be signed in to change notification settings - Fork 0
/
Sum_of_geometric_progresion.thy
79 lines (72 loc) · 2.53 KB
/
Sum_of_geometric_progresion.thy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
(* Sum_of_geometric_progresion.lean
-- Proofs of a+aq+aq²+\<sqdot>\<sqdot>\<sqdot>+aqⁿ = a(1-qⁿ⁺¹)/(1-q)
-- José A. Alonso Jiménez <https://jaalonso.github.io>
-- Sevilla, 9-septiembre-2024
-- ------------------------------------------------------------------ *)
(* ---------------------------------------------------------------------
-- Prove that if q \<noteq> 1, then the sum of the terms of the
-- geometric progression
-- a + aq + aq² + \<sqdot>\<sqdot>\<sqdot> + aq\<^sup>nⁿ
-- is
-- a(1 - q\<^sup>n\<^sup>+\<^sup>1)
-- -------------
-- 1 - q
-- ------------------------------------------------------------------ *)
theory Sum_of_geometric_progresion
imports Main HOL.Real
begin
fun sumGP :: "real \<Rightarrow> real \<Rightarrow> nat \<Rightarrow> real" where
"sumGP a q 0 = a"
| "sumGP a q (Suc n) = sumGP a q n + (a * q^(n + 1))"
(* Proof 1 *)
lemma
"(1 - q) * sumGP a q n = a * (1 - q^(n + 1))"
proof (induct n)
show "(1 - q) * sumGP a q 0 = a * (1 - q ^ (0 + 1))"
by simp
next
fix n
assume IH : "(1 - q) * sumGP a q n = a * (1 - q ^ (n + 1))"
have "(1 - q) * sumGP a q (Suc n) =
(1 - q) * (sumGP a q n + (a * q^(n + 1)))"
by simp
also have "\<dots> = (1 - q) * sumGP a q n + (1 - q) * a * q^(n + 1)"
by (simp add: algebra_simps)
also have "\<dots> = a * (1 - q ^ (n + 1)) + (1 - q) * a * q^(n + 1)"
using IH by simp
also have "\<dots> = a * (1 - q ^ (n + 1) + (1 - q) * q^(n + 1))"
by (simp add: algebra_simps)
also have "\<dots> = a * (1 - q ^ (n + 1) + q^(n + 1) - q^(n + 2))"
by (simp add: algebra_simps)
also have "\<dots> = a * (1 - q^(n + 2))"
by simp
also have "\<dots> = a * (1 - q ^ (Suc n + 1))"
by simp
finally show "(1 - q) * sumGP a q (Suc n) = a * (1 - q ^ (Suc n + 1))"
by this
qed
(* Proof 2 *)
lemma
"(1 - q) * sumGP a q n = a * (1 - q^(n + 1))"
proof (induct n)
show "(1 - q) * sumGP a q 0 = a * (1 - q ^ (0 + 1))"
by simp
next
fix n
assume IH : "(1 - q) * sumGP a q n = a * (1 - q ^ (n + 1))"
have "(1 - q) * sumGP a q (Suc n) =
(1 - q) * sumGP a q n + (1 - q) * a * q^(n + 1)"
by (simp add: algebra_simps)
also have "\<dots> = a * (1 - q ^ (n + 1)) + (1 - q) * a * q^(n + 1)"
using IH by simp
also have "\<dots> = a * (1 - q ^ (n + 1) + q^(n + 1) - q^(n + 2))"
by (simp add: algebra_simps)
finally show "(1 - q) * sumGP a q (Suc n) = a * (1 - q ^ (Suc n + 1))"
by simp
qed
(* Proof 3 *)
lemma
"(1 - q) * sumGP a q n = a * (1 - q^(n + 1))"
using power_add
by (induct n) (auto simp: algebra_simps)
end