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

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:

abbrev Rat.close_seq (ε: ) (a b: Chapter5.Sequence) : Prop := n, n a.n₀ n b.n₀ ε.close (a n) (b n)abbrev Rat.eventually_close (ε: ) (a b: Chapter5.Sequence) : Prop := N, ε.close_seq (a.from N) (b.from N)namespace Chapter5

Визначення 5.2.1 ($ε$-close sequences)

lemma Rat.close_seq_def (ε: ) (a b: Sequence) : ε.close_seq a b n, n a.n₀ n b.n₀ ε.close (a n) (b n) := ε:a:Sequenceb:Sequenceε.close_seq a b n a.n₀, n b.n₀ ε.close (a.seq n) (b.seq n) All goals completed! 🐙

Приклад 5.2.2

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

Приклад 5.2.2

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

Приклад 5.2.2

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

Визначення 5.2.3 (Eventually ε-close sequences)

lemma Rat.eventually_close_def (ε: ) (a b: Sequence) : ε.eventually_close a b N, ε.close_seq (a.from N) (b.from N) := ε:a:Sequenceb:Sequenceε.eventually_close a b N, ε.close_seq (a.from N) (b.from N) All goals completed! 🐙

Визначення 5.2.3 (Eventually ε-close sequences)

lemma declaration uses 'sorry'Rat.eventually_close_iff (ε: ) (a b: ) : ε.eventually_close (a:Sequence) (b:Sequence) N, n N, |a n - b n| ε := ε:a: b: ε.eventually_close { n₀ := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } { n₀ := 0, seq := fun n => if n 0 then b n.toNat else 0, vanish := } N, n N, |a n - b n| ε All goals completed! 🐙

Приклад 5.2.5

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

Визначення 5.2.6 (Equivalent sequences)

abbrev Sequence.equiv (a b: ) : Prop := ε > (0:), ε.eventually_close (a:Sequence) (b:Sequence)

Визначення 5.2.6 (Equivalent sequences)

lemma Sequence.equiv_def (a b: ) : equiv a b (ε:), ε > 0 ε.eventually_close (a:Sequence) (b:Sequence) := a: b: equiv a b ε > 0, ε.eventually_close { n₀ := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } { n₀ := 0, seq := fun n => if n 0 then b n.toNat else 0, vanish := } All goals completed! 🐙

Визначення 5.2.6 (Equivalent sequences)

lemma declaration uses 'sorry'Sequence.equiv_iff (a b: ) : equiv a b ε > 0, N, n N, |a n - b n| ε := a: b: equiv a b ε > 0, N, n N, |a n - b n| ε All goals completed! 🐙

Твердження 5.2.8

lemma Sequence.equiv_example : -- This proof is perhaps more complicated than it needs to be; a shorter version may be -- possible that is still faithful to the original text. equiv (fun n: (1:)+10^(-(n:)-1)) (fun n: (1:)-10^(-(n:)-1)) := equiv (fun n => 1 + 10 ^ (-n - 1)) fun n => 1 - 10 ^ (-n - 1) a: := fun n => 1 + 10 ^ (-n - 1)equiv a fun n => 1 - 10 ^ (-n - 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)equiv a b a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1) ε > 0, N, n N, |a n - b n| ε a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0 N, n N, |a n - b n| ε have hab (n:) : |a n - b n| = 2 * 10 ^ (-(n:)-1) := calc _ = |((1:) + (10:)^(-(n:)-1)) - ((1:) - (10:)^(-(n:)-1))| := a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0n:|a n - b n| = |1 + 10 ^ (-n - 1) - (1 - 10 ^ (-n - 1))| All goals completed! 🐙 _ = |2 * (10:)^(-(n:)-1)| := a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0n:|1 + 10 ^ (-n - 1) - (1 - 10 ^ (-n - 1))| = |2 * 10 ^ (-n - 1)| All goals completed! 🐙 _ = _ := a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0n:|2 * 10 ^ (-n - 1)| = 2 * 10 ^ (-n - 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0n:0 2 * 10 ^ (-n - 1); All goals completed! 🐙 have hab' (N:) : n N, |a n - b n| 2 * 10 ^(-(N:)-1) := equiv (fun n => 1 + 10 ^ (-n - 1)) fun n => 1 - 10 ^ (-n - 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)N:n:hn:n N|a n - b n| 2 * 10 ^ (-N - 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)N:n:hn:n N2 * 10 ^ (-n - 1) 2 * 10 ^ (-N - 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)N:n:hn:n N1 10 All goals completed! 🐙 have hN : N:, 2 * (10:) ^(-(N:)-1) ε := equiv (fun n => 1 + 10 ^ (-n - 1)) fun n => 1 - 10 ^ (-n - 1) have hN' (N:) : 2 * (10:)^(-(N:)-1) 2/(N+1) := calc _ = 2 / (10:)^(N+1) := a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 * 10 ^ (-N - 1) = 2 / 10 ^ (N + 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 * 10 ^ (-N - 1) * 10 ^ (N + 1) = 2 a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 * 10 ^ (-N - 1 + (N + 1)) = 2 All goals completed! 🐙 _ _ := a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 / 10 ^ (N + 1) 2 / (N + 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:N + 1 10 ^ (N + 1) apply le_trans _ (pow_le_pow_left₀ (show 0 (2:) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 / 10 ^ (N + 1) 2 / (N + 1) All goals completed! 🐙) (show (2:) 10 a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 / 10 ^ (N + 1) 2 / (N + 1) All goals completed! 🐙) _) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:N + 1 = (N + 1)a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 ^ (N + 1) = (2 ^ (N + 1))a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:AddMonoidWithOne a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:AddLeftMono a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:ZeroLEOneClass a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:CharZero a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:N + 1 = (N + 1) All goals completed! 🐙 a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:2 ^ (N + 1) = (2 ^ (N + 1)) All goals completed! 🐙 all_goals All goals completed! 🐙 a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)this: N, N > 2 / ε N, 2 * 10 ^ (-N - 1) ε a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:N > 2 / ε N, 2 * 10 ^ (-N - 1) ε a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:N > 2 / ε2 * 10 ^ (-N - 1) ε a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:N > 2 / ε2 / (N + 1) ε a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:N > 2 / ε2 ε * (N + 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:2 < N * ε2 ε * (N + 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:2 < N * εN * ε < ε * (N + 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:2 < N * εε * N < ε * (N + 1) a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)hN': (N : ), 2 * 10 ^ (-N - 1) 2 / (N + 1)N:hN:2 < N * εN < N + 1; All goals completed! 🐙 a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:hN:2 * 10 ^ (-N - 1) ε N, n N, |a n - b n| ε a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:hN:2 * 10 ^ (-N - 1) ε n N, |a n - b n| ε a: := fun n => 1 + 10 ^ (-n - 1)b: := fun n => 1 - 10 ^ (-n - 1)ε:εpos:ε > 0hab: (n : ), |a n - b n| = 2 * 10 ^ (-n - 1)hab': (N n : ), n N |a n - b n| 2 * 10 ^ (-N - 1)N:hN:2 * 10 ^ (-N - 1) εn:hn:n N|a n - b n| ε All goals completed! 🐙

Вправа 5.2.1

theorem declaration uses 'sorry'Sequence.equiv_of_cauchy {a b: } (hab: Sequence.equiv a b) : (a:Sequence).isCauchy (b:Sequence).isCauchy := a: b: hab:equiv a b{ n₀ := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchy { n₀ := 0, seq := fun n => if n 0 then b n.toNat else 0, vanish := }.isCauchy All goals completed! 🐙

Вправа 5.2.2

theorem declaration uses 'sorry'Sequence.close_of_bounded {ε:} {a b: } (hab: ε.eventually_close a b) : (a:Sequence).isBounded (b:Sequence).isBounded := ε:a: b: hab:ε.eventually_close { n₀ := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } { n₀ := 0, seq := fun n => if n 0 then b n.toNat else 0, vanish := }{ n₀ := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isBounded { n₀ := 0, seq := fun n => if n 0 then b n.toNat else 0, vanish := }.isBounded All goals completed! 🐙
end Chapter5