Аналіз I, Глава 5.1

I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.

Main constructions and results of this section:

namespace Chapter5

Визначення 5.1.1 (Sequence). To avoid some technicalities involving dependent types, we extend sequences by zero to the left of the starting point unknown identifier 'n₀'n₀.

@[ext] structure Sequence where n₀ : seq : vanish : n < n₀, seq n = 0

Sequences can be thought of as functions from ℤ to ℚ.

instance Sequence.instCoeFun : CoeFun Sequence (fun _ ) where coe := fun a a.seq

Functions from ℕ to ℚ can be thought of as sequences.

instance Sequence.instCoe : Coe ( ) Sequence where coe := fun a { n₀ := 0 seq := fun n if n 0 then a n.toNat else 0 vanish := a: n < 0, (if n 0 then a n.toNat else 0) = 0 a: n:hn:n < 0(if n 0 then a n.toNat else 0) = 0 All goals completed! 🐙 }
abbrev Sequence.mk' (n₀:) (a: { n // n n₀ } ) : Sequence where n₀ := n₀ seq := fun n if h : n n₀ then a n, h else 0 vanish := n₀:a:{ n // n n₀ } n < n₀, (if h : n n₀ then a n, h else 0) = 0 n₀:a:{ n // n n₀ } n:hn:n < n₀(if h : n n₀ then a n, h else 0) = 0 All goals completed! 🐙lemma Sequence.eval_mk {n n₀:} (a: { n // n n₀ } ) (h: n n₀) : (Sequence.mk' n₀ a) n = a n, h := n:n₀:a:{ n // n n₀ } h:n n₀(mk' n₀ a).seq n = a n, h All goals completed! 🐙@[simp] lemma Sequence.eval_coe (n:) (a: ) : (a:Sequence) n = a n := n:a: { n₀ := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n = a n All goals completed! 🐙

Приклад 5.1.2

abbrev Sequence.squares : Sequence := ((fun n: (n^2:)):Sequence)

Приклад 5.1.2

example (n:) : Sequence.squares n = n^2 := Sequence.eval_coe _ _

Приклад 5.1.2

abbrev Sequence.three : Sequence := ((fun (_:) (3:)):Sequence)

Приклад 5.1.2

example (n:) : Sequence.three n = 3 := Sequence.eval_coe _ (fun (_:) (3:))

Приклад 5.1.2

abbrev Sequence.squares_from_three : Sequence := mk' 3 (fun n n^2)

Приклад 5.1.2

example (n:) (hn: n 3) : Sequence.squares_from_three n = n^2 := Sequence.eval_mk _ hn
-- need to temporarily leave the `Chapter5` namespace to introduce the following notation end Chapter5abbrev Rat.steady (ε: ) (a: Chapter5.Sequence) : Prop := n a.n₀, m a.n₀, ε.close (a n) (a m)lemma Rat.steady_def (ε: ) (a: Chapter5.Sequence) : ε.steady a n a.n₀, m a.n₀, ε.close (a n) (a m) := ε:a:Chapter5.Sequenceε.steady a n a.n₀, m a.n₀, ε.close (a.seq n) (a.seq m) All goals completed! 🐙namespace Chapter5

Приклад 5.1.5

declaration uses 'sorry'example : (1:).steady ((fun n: if Even n then (1:) else (0:)):Sequence) := Rat.steady 1 { n₀ := 0, seq := fun n => if n 0 then (fun n => if Even n then 1 else 0) n.toNat else 0, vanish := } All goals completed! 🐙

Приклад 5.1.5

declaration uses 'sorry'example : ¬ (0.5:).steady ((fun n: if Even n then (1:) else (0:)):Sequence) := ¬Rat.steady 0.5 { n₀ := 0, seq := fun n => if n 0 then (fun n => if Even n then 1 else 0) n.toNat else 0, vanish := } All goals completed! 🐙

Приклад 5.1.5

declaration uses 'sorry'example : (0.1:).steady ((fun n: (10:) ^ (-(n:)-1) ):Sequence) := Rat.steady 0.1 { n₀ := 0, seq := fun n => if n 0 then (fun n => 10 ^ (-n - 1)) n.toNat else 0, vanish := } All goals completed! 🐙

Приклад 5.1.5

declaration uses 'sorry'example : ¬(0.01:).steady ((fun n: (10:) ^ (-(n:)-1) ):Sequence) := ¬Rat.steady 1e-2 { n₀ := 0, seq := fun n => if n 0 then (fun n => 10 ^ (-n - 1)) n.toNat else 0, vanish := } All goals completed! 🐙

Приклад 5.1.5

declaration uses 'sorry'example (ε:) : ¬ ε.steady ((fun n: (2 ^ (n+1):) ):Sequence) := ε:¬ε.steady { n₀ := 0, seq := fun n => if n 0 then (fun n => 2 ^ (n + 1)) n.toNat else 0, vanish := } All goals completed! 🐙

Приклад 5.1.5

declaration uses 'sorry'example (ε:) (: ε>0) : ε.steady ((fun _: (2:) ):Sequence) := ε::ε > 0ε.steady { n₀ := 0, seq := fun n => if n 0 then (fun x => 2) n.toNat else 0, vanish := } All goals completed! 🐙
declaration uses 'sorry'example : (10:).steady ((fun n: if n = 0 then (10:) else (0:)):Sequence) := Rat.steady 10 { n₀ := 0, seq := fun n => if n 0 then (fun n => if n = 0 then 10 else 0) n.toNat else 0, vanish := } All goals completed! 🐙declaration uses 'sorry'example (ε:) (:ε<10): ¬ ε.steady ((fun n: if n = 0 then (10:) else (0:)):Sequence) := ε::ε < 10¬ε.steady { n₀ := 0, seq := fun n => if n 0 then (fun n => if n = 0 then 10 else 0) n.toNat else 0, vanish := } All goals completed! 🐙

a.from n₁ starts from unknown identifier 'n₁'n₁. It is intended for use when unknown identifier 'n₁'sorry ≥ sorry : Propn₁ unknown identifier 'n₀'n₀, but returns the "junk" value of the original sequence unknown identifier 'a'a otherwise.

abbrev Sequence.from (a:Sequence) (n₁:) : Sequence := mk' (max a.n₀ n₁) (fun n a (n:))
lemma Sequence.from_eval (a:Sequence) {n₁ n:} (hn: n n₁) : (a.from n₁) n = a n := a:Sequencen₁:n:hn:n n₁(a.from n₁).seq n = a.seq n a:Sequencen₁:n:hn:n n₁n < a.n₀ 0 = a.seq n a:Sequencen₁:n:hn:n n₁h:n < a.n₀0 = a.seq n All goals completed! 🐙end Chapter5

Визначення 5.1.6 (Eventually ε-steady)

abbrev Rat.eventuallySteady (ε: ) (a: Chapter5.Sequence) : Prop := N a.n₀, ε.steady (a.from N)
lemma Rat.eventuallySteady_def (ε: ) (a: Chapter5.Sequence) : ε.eventuallySteady a N a.n₀, ε.steady (a.from N) := ε:a:Chapter5.Sequenceε.eventuallySteady a N a.n₀, ε.steady (a.from N) All goals completed! 🐙namespace Chapter5

Приклад 5.1.7

lemma declaration uses 'sorry'Sequence.ex_5_1_7_a : ¬ (0.1:).steady ((fun n: (n+1:)⁻¹ ):Sequence) := ¬Rat.steady 0.1 { n₀ := 0, seq := fun n => if n 0 then (fun n => (n + 1)⁻¹) n.toNat else 0, vanish := } All goals completed! 🐙
lemma declaration uses 'sorry'Sequence.ex_5_1_7_b : (0.1:).steady (((fun n: (n+1:)⁻¹ ):Sequence).from 10) := Rat.steady 0.1 ({ n₀ := 0, seq := fun n => if n 0 then (fun n => (n + 1)⁻¹) n.toNat else 0, vanish := }.from 10) All goals completed! 🐙lemma declaration uses 'sorry'Sequence.ex_5_1_7_c : (0.1:).eventuallySteady ((fun n: (n+1:)⁻¹ ):Sequence) := Rat.eventuallySteady 0.1 { n₀ := 0, seq := fun n => if n 0 then (fun n => (n + 1)⁻¹) n.toNat else 0, vanish := } All goals completed! 🐙lemma declaration uses 'sorry'Sequence.ex_5_1_7_d {ε:} (:ε>0) : ε.eventuallySteady ((fun n: if n=0 then (10:) else (0:) ):Sequence) := ε::ε > 0ε.eventuallySteady { n₀ := 0, seq := fun n => if n 0 then (fun n => if n = 0 then 10 else 0) n.toNat else 0, vanish := } All goals completed! 🐙abbrev Sequence.isCauchy (a:Sequence) : Prop := ε > (0:), ε.eventuallySteady alemma Sequence.isCauchy_def (a:Sequence) : a.isCauchy ε > (0:), ε.eventuallySteady a := a:Sequencea.isCauchy ε > 0, ε.eventuallySteady a All goals completed! 🐙lemma declaration uses 'sorry'Sequence.isCauchy_of_coe (a: ) : (a:Sequence).isCauchy ε > (0:), N, j N, k N, Section_4_3.dist (a j) (a k) ε := a: { n₀ := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchy ε > 0, N, j N, k N, Section_4_3.dist (a j) (a k) ε All goals completed! 🐙lemma declaration uses 'sorry'Sequence.isCauchy_of_mk {n₀:} (a: {n // n n₀} ) : (mk' n₀ a).isCauchy ε > (0:), N n₀, j N, k N, Section_4_3.dist (mk' n₀ a j) (mk' n₀ a k) ε := n₀:a:{ n // n n₀ } (mk' n₀ a).isCauchy ε > 0, N n₀, j N, k N, Section_4_3.dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε All goals completed! 🐙noncomputable def Sequence.sqrt_two : Sequence := (fun n: (( (Real.sqrt 2)*10^n / 10^n):))

Приклад 5.1.10. (This requires extensive familiarity with Mathlib's API for the real numbers.)

theorem declaration uses 'sorry'Sequence.ex_5_1_10_a : (1:).steady sqrt_two := Rat.steady 1 sqrt_two All goals completed! 🐙

Приклад 5.1.10. (This requires extensive familiarity with Mathlib's API for the real numbers.)

theorem declaration uses 'sorry'Sequence.ex_5_1_10_b : (0.1:).steady (sqrt_two.from 1) := Rat.steady 0.1 (sqrt_two.from 1) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.ex_5_1_10_c : (0.1:).eventuallySteady sqrt_two := Rat.eventuallySteady 0.1 sqrt_two All goals completed! 🐙

Твердження 5.1.11

theorem Sequence.harmonic_steady : (mk' 1 (fun n (1:)/n)).isCauchy := (mk' 1 fun n => 1 / n).isCauchy -- This is proof is probably longer than it needs to be; there should be a shorter proof that -- is still in the spirit of the proof in the book. ε > 0, N 1, j N, k N, Section_4_3.dist ((mk' 1 fun n => 1 / n).seq j) ((mk' 1 fun n => 1 / n).seq k) ε ε::ε > 0 N 1, j N, k N, Section_4_3.dist ((mk' 1 fun n => 1 / n).seq j) ((mk' 1 fun n => 1 / n).seq k) ε ε::ε > 0this: N, N > 1 / ε N 1, j N, k N, Section_4_3.dist ((mk' 1 fun n => 1 / n).seq j) ((mk' 1 fun n => 1 / n).seq k) ε ε::ε > 0N:hN:N > 1 / ε N 1, j N, k N, Section_4_3.dist ((mk' 1 fun n => 1 / n).seq j) ((mk' 1 fun n => 1 / n).seq k) ε ε::ε > 0N:hN:N > 1 / εN 1 j N, k N, Section_4_3.dist ((mk' 1 fun n => 1 / n).seq j) ((mk' 1 fun n => 1 / n).seq k) ε have hN' : (N:) > 0 := (mk' 1 fun n => 1 / n).isCauchy have : (1/ε) > 0 := (mk' 1 fun n => 1 / n).isCauchy All goals completed! 🐙 ε::ε > 0N:this:1 / ε > 0hN:0 < NN > 0 ε::ε > 0N:this:1 / ε > 0hN:0 < N0 < N; All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εhN':N > 0N 1ε::ε > 0N:hN:N > 1 / εhN':N > 0 j N, k N, Section_4_3.dist ((mk' 1 fun n => 1 / n).seq j) ((mk' 1 fun n => 1 / n).seq k) ε ε::ε > 0N:hN:N > 1 / εhN':N > 0N 1 ε::ε > 0N:hN:N > 1 / εhN':0 < N1 N; All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k NSection_4_3.dist ((mk' 1 fun n => 1 / n).seq j) ((mk' 1 fun n => 1 / n).seq k) ε have hj' : (j:) 0 := (mk' 1 fun n => 1 / n).isCauchy ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k N0 j; All goals completed! 🐙 have hj'' : (1:)/j (1:)/N := (mk' 1 fun n => 1 / n).isCauchy ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 00 < Nε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0N j ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 00 < N ε::ε > 0N:hN:N > 1 / εj:hj:j Nk:hk:k Nhj':j 0hN':0 < N0 < N; All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0N j ε::ε > 0N:hN:N > 1 / εhN':N > 0j:k:hk:k Nhj':j 0hj:N jN j; ε::ε > 0N:hN:N > 1 / εhN':N > 0j:k:hk:k Nhj':j 0hj:N jN j; All goals completed! 🐙 have hj''' : (1:)/j 0 := (mk' 1 fun n => 1 / n).isCauchy All goals completed! 🐙 have hj'''' : j 1 := (mk' 1 fun n => 1 / n).isCauchy ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj'':1 / j 1 / Nhj''':1 / j 0hj':0 jj 1; All goals completed! 🐙 have hk' : (k:) 0 := (mk' 1 fun n => 1 / n).isCauchy ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 10 k; All goals completed! 🐙 have hk'' : (1:)/k (1:)/N := (mk' 1 fun n => 1 / n).isCauchy ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 00 < Nε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0N k ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 00 < N ε::ε > 0N:hN:N > 1 / εj:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hN':0 < N0 < N; All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0N k ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk:N kN k; ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk:N kN k; All goals completed! 🐙 have hk''' : (1:)/k 0 := (mk' 1 fun n => 1 / n).isCauchy All goals completed! 🐙 have hk'''' : k 1 := (mk' 1 fun n => 1 / n).isCauchy ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk'':1 / k 1 / Nhk''':1 / k 0hk':0 kk 1; All goals completed! 🐙 have hdist : Section_4_3.dist ((1:)/j) ((1:)/k) (1:)/N := (mk' 1 fun n => 1 / n).isCauchy ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 11 / j - 1 / k 1 / N -(1 / j - 1 / k) 1 / N ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 11 / j - 1 / k 1 / Nε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1-(1 / j - 1 / k) 1 / N ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 11 / j - 1 / k 1 / Nε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1-(1 / j - 1 / k) 1 / N All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / NSection_4_3.dist (↑j)⁻¹ (↑k)⁻¹ ε ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N(↑j)⁻¹ = 1 / jε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N(↑k)⁻¹ = 1 / kε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N1 / N ε ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N(↑j)⁻¹ = 1 / j All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N(↑k)⁻¹ = 1 / k All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N1 / ε Nε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N0 < N ε::ε > 0N:hN:N > 1 / εhN':N > 0j:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / N1 / ε N All goals completed! 🐙 ε::ε > 0N:hN:N > 1 / εj:hj:j Nk:hk:k Nhj':j 0hj'':1 / j 1 / Nhj''':1 / j 0hj'''':j 1hk':k 0hk'':1 / k 1 / Nhk''':1 / k 0hk'''':k 1hdist:Section_4_3.dist (1 / j) (1 / k) 1 / NhN':0 < N0 < N; All goals completed! 🐙
abbrev BoundedBy {n:} (a: Fin n ) (M:) : Prop := i, |a i| M

Визначення 5.1.12 (bounded sequences). Here we start sequences from 0 rather than 1 to align better with Mathlib conventions.

lemma BoundedBy_def {n:} (a: Fin n ) (M:) : BoundedBy a M i, |a i| M := n:a:Fin n M:BoundedBy a M (i : Fin n), |a i| M All goals completed! 🐙
abbrev Sequence.BoundedBy (a:Sequence) (M:) : Prop := n, |a n| M

Визначення 5.1.12 (bounded sequences)

lemma Sequence.BoundedBy_def (a:Sequence) (M:) : a.BoundedBy M n, |a n| M := a:SequenceM:a.BoundedBy M (n : ), |a.seq n| M All goals completed! 🐙
abbrev Sequence.isBounded (a:Sequence) : Prop := M 0, a.BoundedBy M

Визначення 5.1.12 (bounded sequences)

lemma Sequence.isBounded_def (a:Sequence) : a.isBounded M 0, a.BoundedBy M := a:Sequencea.isBounded M 0, a.BoundedBy M All goals completed! 🐙

Приклад 5.1.13

declaration uses 'sorry'example : BoundedBy ![1,-2,3,-4] 4 := BoundedBy ![1, -2, 3, -4] 4 All goals completed! 🐙

Приклад 5.1.13

declaration uses 'sorry'example : ¬ ((fun n: (-1)^n * (n+1:)):Sequence).isBounded := ¬{ n₀ := 0, seq := fun n => if n 0 then (fun n => (-1) ^ n * (n + 1)) n.toNat else 0, vanish := }.isBounded All goals completed! 🐙

Приклад 5.1.13

declaration uses 'sorry'example : ((fun n: (-1:)^n):Sequence).isBounded := { n₀ := 0, seq := fun n => if n 0 then (fun n => (-1) ^ n) n.toNat else 0, vanish := }.isBounded All goals completed! 🐙

Приклад 5.1.13

declaration uses 'sorry'example : ¬ ((fun n: (-1:)^n):Sequence).isCauchy := ¬{ n₀ := 0, seq := fun n => if n 0 then (fun n => (-1) ^ n) n.toNat else 0, vanish := }.isCauchy All goals completed! 🐙

Лема 5.1.14

lemma bounded_of_finite {n:} (a: Fin n ) : M 0, BoundedBy a M := n:a:Fin n M 0, BoundedBy a M -- цей доказ написан так, щоб співпадати із структурою орігінального тексту. a:Fin 0 M 0, BoundedBy a Mn:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) M 0, BoundedBy a M a:Fin 0 M 0, BoundedBy a M a:Fin 0 0 0 BoundedBy a 0 All goals completed! 🐙 n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a m M 0, BoundedBy a M n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' M M 0, BoundedBy a M have h1 : BoundedBy a' (M + |a n|) := n:a:Fin n M 0, BoundedBy a M n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mm:Fin n|a' m| M + |a n| n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mm:Fin nM M + |a n| All goals completed! 🐙 have h2 : |a n| M + |a n| := n:a:Fin n M 0, BoundedBy a M All goals completed! 🐙 n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|M + |a n| 0 BoundedBy a (M + |a n|) n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|M + |a n| 0n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|BoundedBy a (M + |a n|) n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|M + |a n| 0 All goals completed! 🐙 n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|m:Fin (n + 1)|a m| M + |a n| n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|m:Fin (n + 1)hm: j, m = j.castSucc|a m| M + |a n|n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|m:Fin (n + 1)hm:m = Fin.last n|a m| M + |a n| n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|m:Fin (n + 1)hm: j, m = j.castSucc|a m| M + |a n| n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|m:Fin (n + 1)j:Fin nhj:m = j.castSucc|a m| M + |a n| n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|m:Fin (n + 1)j:Fin nhj:m = j.castSuccm = j All goals completed! 🐙 n:hn: (a : Fin n ), M 0, BoundedBy a Ma:Fin (n + 1) a':Fin n := fun m => a mM:hpos:M 0hM:BoundedBy a' Mh1:BoundedBy a' (M + |a n|)h2:|a n| M + |a n|m:Fin (n + 1)hm:m = Fin.last nm = n All goals completed! 🐙

Лема 5.1.15 (Cauchy sequences are bounded) / Вправа 5.1.1

lemma declaration uses 'sorry'Sequence.isBounded_of_isCauchy {a:Sequence} (h: a.isCauchy) : a.isBounded := a:Sequenceh:a.isCauchya.isBounded All goals completed! 🐙
end Chapter5