Аналіз I, Розділ 6, Епілог

In this (technical) epilogue, we show that various operations and properties we have defined for "Chapter 6" sequences Chapter6.Sequence : TypeChapter6.Sequence are equivalent to Mathlib operations. Note however that Mathlib's operations are defined in far greater generality than the setting of real-valued sequences, in particular using the language of filters.

Identification with the Cauchy sequence support in unknown identifier 'Mathlib.Algebra.Order.CauSeq.Basic'Mathlib.Algebra.Order.CauSeq.Basic

theorem Chapter6.Sequence.Cauchy_iff_CauSeq (a: ) : (a:Sequence).isCauchy IsCauSeq _root_.abs a := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchy IsCauSeq _root_.abs a a: (∀ ε > 0, N, j N, k N, |a j - a k| ε) ε > 0, i, j i, |a j - a i| < ε a: (∀ ε > 0, N, j N, k N, |a j - a k| ε) ε > 0, i, j i, |a j - a i| < εa: (∀ ε > 0, i, j i, |a j - a i| < ε) ε > 0, N, j N, k N, |a j - a k| ε a: (∀ ε > 0, N, j N, k N, |a j - a k| ε) ε > 0, i, j i, |a j - a i| < ε a: h: ε > 0, N, j N, k N, |a j - a k| εε::ε > 0 i, j i, |a j - a i| < ε a: ε::ε > 0h: N, j N, k N, |a j - a k| ε / 2 i, j i, |a j - a i| < ε a: ε::ε > 0N:h: j N, k N, |a j - a k| ε / 2 i, j i, |a j - a i| < ε a: ε::ε > 0N:h: j N, k N, |a j - a k| ε / 2 j N, |a j - a N| < ε a: ε::ε > 0N:h: j N, k N, |a j - a k| ε / 2n:hn:n N|a n - a N| < ε a: ε::ε > 0N:n:hn:n Nh:|a n - a N| ε / 2|a n - a N| < ε All goals completed! 🐙 a: h: ε > 0, i, j i, |a j - a i| < εε::ε > 0 N, j N, k N, |a j - a k| ε a: ε::ε > 0h: i, j i, |a j - a i| < ε / 2 N, j N, k N, |a j - a k| ε a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2 N, j N, k N, |a j - a k| ε a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2 j N, k N, |a j - a k| ε a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a n - a m| ε calc _ |a n - a N| + |a m - a N| := a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a n - a m| |a n - a N| + |a m - a N| a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a n - a m| |a n - a N| + |a N - a m|; All goals completed! 🐙 _ ε/2 + ε/2 := a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a n - a N| + |a m - a N| ε / 2 + ε / 2 a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a n - a N| + |a m - a N| < ε / 2 + ε / 2; a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a n - a N| < ε / 2a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a m - a N| < ε / 2; a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m N|a m - a N| < ε / 2; All goals completed! 🐙 _ = _ := a: ε::ε > 0N:h: j N, |a j - a N| < ε / 2n:hn:n Nm:hm:m Nε / 2 + ε / 2 = ε All goals completed! 🐙

Identification with the Cauchy sequence support in unknown identifier 'Mathlib.Topology.UniformSpace.Cauchy'Mathlib.Topology.UniformSpace.Cauchy

theorem Chapter6.Sequence.Cauchy_iff_CauchySeq (a: ) : (a:Sequence).isCauchy CauchySeq a := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchy CauchySeq a a: IsCauSeq _root_.abs a CauchySeq a All goals completed! 🐙

Identifiction with Filter.Tendsto.{u_1, u_2} {α : Type u_1} {β : Type u_2} (f : α → β) (l₁ : Filter α) (l₂ : Filter β) : PropFilter.Tendsto

theorem Chapter6.Sequence.tendsto_iff_Tendsto (a: ) (L:) : (a:Sequence).tendsTo L Filter.Tendsto a Filter.atTop (nhds L) := a: L:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.tendsTo L Filter.Tendsto a Filter.atTop (nhds L) a: L:(∀ ε > 0, N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε) ε > 0, N, n N, dist (a n) L < ε a: L:(∀ ε > 0, N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε) ε > 0, N, n N, dist (a n) L < εa: L:(∀ ε > 0, N, n N, dist (a n) L < ε) ε > 0, N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε a: L:(∀ ε > 0, N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε) ε > 0, N, n N, dist (a n) L < ε a: L:h: ε > 0, N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| εε::ε > 0 N, n N, dist (a n) L < ε a: L:ε::ε > 0h: N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε / 2 N, n N, dist (a n) L < ε a: L:ε::ε > 0N:hN: n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε / 2 N, n N, dist (a n) L < ε a: L:ε::ε > 0N:hN: n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε / 2 n N.toNat, dist (a n) L < ε a: L:ε::ε > 0N:hN: n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε / 2n:hn:n N.toNatdist (a n) L < ε a: L:ε::ε > 0N:n:hn:n N.toNathN:|{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε / 2dist (a n) L < ε a: L:ε::ε > 0N:n:hn:n N.toNathN:|a n - L| ε / 2dist (a n) L < ε a: L:ε::ε > 0N:n:hn:n N.toNathN:|a n - L| ε / 2|a n - L| < ε All goals completed! 🐙 a: L:h: ε > 0, N, n N, dist (a n) L < εε::ε > 0 N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε a: L:ε::ε > 0h: N, n N, dist (a n) L < ε N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε a: L:ε::ε > 0N:hN: n N, dist (a n) L < ε N, n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε a: L:ε::ε > 0N:hN: n N, dist (a n) L < ε n N, |{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε a: L:ε::ε > 0N:hN: n N, dist (a n) L < εn:hn:n N|{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε have hpos : n 0 := LE.le.trans (a: L:ε::ε > 0N:hN: n N, dist (a n) L < εn:hn:n N0 N All goals completed! 🐙) hn a: L:ε::ε > 0N:hN: n N, dist (a n) L < εn:hn:N n.toNathpos:n 0|{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε a: L:ε::ε > 0N:n:hn:N n.toNathpos:n 0hN:dist (a n.toNat) L < ε|{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n - L| ε a: L:ε::ε > 0N:n:hn:N n.toNathpos:n 0hN:dist (a n.toNat) L < εdist (a n.toNat) L ε All goals completed! 🐙
theorem Chapter6.Sequence.tendsto_iff_Tendsto' (a: Sequence) (L:) : a.tendsTo L Filter.Tendsto a.seq Filter.atTop (nhds L) := a:SequenceL:a.tendsTo L Filter.Tendsto a.seq Filter.atTop (nhds L) a:SequenceL:(∀ ε > 0, N, n N, |a.seq n - L| ε) ε > 0, N, n N, dist (a.seq n) L < ε a:SequenceL:(∀ ε > 0, N, n N, |a.seq n - L| ε) ε > 0, N, n N, dist (a.seq n) L < εa:SequenceL:(∀ ε > 0, N, n N, dist (a.seq n) L < ε) ε > 0, N, n N, |a.seq n - L| ε a:SequenceL:(∀ ε > 0, N, n N, |a.seq n - L| ε) ε > 0, N, n N, dist (a.seq n) L < ε a:SequenceL:h: ε > 0, N, n N, |a.seq n - L| εε::ε > 0 N, n N, dist (a.seq n) L < ε a:SequenceL:ε::ε > 0h: N, n N, |a.seq n - L| ε / 2 N, n N, dist (a.seq n) L < ε a:SequenceL:ε::ε > 0N:hN: n N, |a.seq n - L| ε / 2 N, n N, dist (a.seq n) L < ε a:SequenceL:ε::ε > 0N:hN: n N, |a.seq n - L| ε / 2 n N, dist (a.seq n) L < ε a:SequenceL:ε::ε > 0N:hN: n N, |a.seq n - L| ε / 2n:hn:n Ndist (a.seq n) L < ε a:SequenceL:ε::ε > 0N:n:hn:n NhN:|a.seq n - L| ε / 2dist (a.seq n) L < ε a:SequenceL:ε::ε > 0N:n:hn:n NhN:|a.seq n - L| ε / 2|a.seq n - L| < ε All goals completed! 🐙 a:SequenceL:h: ε > 0, N, n N, dist (a.seq n) L < εε::ε > 0 N, n N, |a.seq n - L| ε a:SequenceL:ε::ε > 0h: N, n N, dist (a.seq n) L < ε N, n N, |a.seq n - L| ε a:SequenceL:ε::ε > 0N:hN: n N, dist (a.seq n) L < ε N, n N, |a.seq n - L| ε a:SequenceL:ε::ε > 0N:hN: n N, dist (a.seq n) L < ε n N, |a.seq n - L| ε a:SequenceL:ε::ε > 0N:hN: n N, dist (a.seq n) L < εn:hn:n N|a.seq n - L| ε a:SequenceL:ε::ε > 0N:hN: n N, dist (a.seq n) L < εn:hn:N n|a.seq n - L| ε a:SequenceL:ε::ε > 0N:n:hn:N nhN:dist (a.seq n) L < ε|a.seq n - L| ε a:SequenceL:ε::ε > 0N:n:hn:N nhN:dist (a.seq n) L < εdist (a.seq n) L ε All goals completed! 🐙theorem Chapter6.Sequence.converges_iff_Tendsto (a: ) : (a:Sequence).convergent L, Filter.Tendsto a Filter.atTop (nhds L) := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.convergent L, Filter.Tendsto a Filter.atTop (nhds L) All goals completed! 🐙theorem Chapter6.Sequence.converges_iff_Tendsto' (a: Sequence) : a.convergent L, Filter.Tendsto a.seq Filter.atTop (nhds L) := a:Sequencea.convergent L, Filter.Tendsto a.seq Filter.atTop (nhds L) All goals completed! 🐙

A technicality: CauSeq.IsComplete ℝ : (abv : ℝ → ?m.102647) → [IsAbsoluteValue abv] → PropCauSeq.IsComplete was established for abs.{u_1} {α : Type u_1} [Lattice α] [AddGroup α] (a : α) : α_root_.abs but not for Norm.norm.{u_8} {E : Type u_8} [self : Norm E] : E → ℝnorm.

instance inst_real_complete : CauSeq.IsComplete norm := CauSeq.IsComplete norm All goals completed! 🐙

Identification with CauSeq.lim.{u_1, u_2} {α : Type u_1} [Field α] [LinearOrder α] [IsStrictOrderedRing α] {β : Type u_2} [Ring β] {abv : β → α} [IsAbsoluteValue abv] [CauSeq.IsComplete β abv] (s : CauSeq β abv) : βCauSeq.lim

theorem Chapter6.Sequence.lim_eq_CauSeq_lim (a: ) (ha: (a:Sequence).isCauchy) : Chapter6.lim (a:Sequence) = CauSeq.lim a, (Cauchy_iff_CauSeq a).mp ha := a: ha:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchylim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } = CauSeq.lim a, a: ha:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchyh1:Filter.Tendsto (↑a, ) Filter.atTop (nhds (CauSeq.lim a, ))lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } = CauSeq.lim a, a: ha:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchyh1:Filter.Tendsto (↑a, ) Filter.atTop (nhds (CauSeq.lim a, ))h2:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.tendsTo (lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := })lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } = CauSeq.lim a, a: ha:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchyh1:{ m := 0, seq := fun n => if n 0 then a, n.toNat else 0, vanish := }.tendsTo (CauSeq.lim a, )h2:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.tendsTo (lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := })lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } = CauSeq.lim a, a: ha:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchyh1:{ m := 0, seq := fun n => if n 0 then a, n.toNat else 0, vanish := }.tendsTo (CauSeq.lim a, )h2:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.tendsTo (lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := })h:lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := } CauSeq.lim a, False a: ha:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isCauchyh1:{ m := 0, seq := fun n => if n 0 then a, n.toNat else 0, vanish := }.tendsTo (CauSeq.lim a, )h2:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.tendsTo (lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := })h:¬({ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.tendsTo (lim { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }) { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.tendsTo (CauSeq.lim a, ))False All goals completed! 🐙

Identification with Bornology.IsBounded.{u_2} {α : Type u_2} [Bornology α] (s : Set α) : PropBornology.IsBounded

theorem Chapter6.Sequence.isBounded_iff_isBounded_range (a: ): (a:Sequence).isBounded Bornology.IsBounded (Set.range a) := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isBounded Bornology.IsBounded (Set.range a) a: (∃ M, 0 M (n : ), |if 0 n then a n.toNat else 0| M) C, (a_1 a_2 : ), dist (a a_1) (a a_2) C a: (∃ M, 0 M (n : ), |if 0 n then a n.toNat else 0| M) C, (a_2 a_3 : ), dist (a a_2) (a a_3) Ca: (∃ C, (a_1 a_2 : ), dist (a a_1) (a a_2) C) M, 0 M (n : ), |if 0 n then a n.toNat else 0| M a: (∃ M, 0 M (n : ), |if 0 n then a n.toNat else 0| M) C, (a_2 a_3 : ), dist (a a_2) (a a_3) C a: h: M, 0 M (n : ), |if 0 n then a n.toNat else 0| M C, (a_1 a_2 : ), dist (a a_1) (a a_2) C a: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| M C, (a_1 a_2 : ), dist (a a_1) (a a_2) C a: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| M (a_1 a_2 : ), dist (a a_1) (a a_2) 2 * M a: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| Mn:m:dist (a n) (a m) 2 * M calc _ = |a n - a m| := Real.dist_eq _ _ _ |a n| + |a m| := abs_sub _ _ _ M + M := a: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| Mn:m:|a n| + |a m| M + M a: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| Mn:m:|a n| Ma: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| Mn:m:|a m| M; a: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| Mn:m:|a m| M; All goals completed! 🐙 _ = _ := a: M:hM:0 Mh: (n : ), |if 0 n then a n.toNat else 0| Mn:m:M + M = 2 * M All goals completed! 🐙 a: h: C, (a_1 a_2 : ), dist (a a_1) (a a_2) C M, 0 M (n : ), |if 0 n then a n.toNat else 0| M a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) C M, 0 M (n : ), |if 0 n then a n.toNat else 0| M have : C 0 := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isBounded Bornology.IsBounded (Set.range a) a: C:h:dist (a 0) (a 0) CC 0 a: C:h:0 CC 0 All goals completed! 🐙 refine C + |a 0|, a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 00 C + |a 0| All goals completed! 🐙, ?_ a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:|if 0 n then a n.toNat else 0| C + |a 0| a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0|if 0 n then a n.toNat else 0| C + |a 0|a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:¬n 0|if 0 n then a n.toNat else 0| C + |a 0| all_goals a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:¬n 00 C + |a 0| a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0|a n.toNat| C + |a 0| calc _ |a n.toNat - a 0| + |a 0| := a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0|a n.toNat| |a n.toNat - a 0| + |a 0| a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0a n.toNat = a n.toNat - a 0 + a 0a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0AddLeftMono a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0a n.toNat = a n.toNat - a 0 + a 0 All goals completed! 🐙 All goals completed! 🐙 _ C + |a 0| := a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0|a n.toNat - a 0| + |a 0| C + |a 0| a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0|a n.toNat - a 0| C; a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:C 0n:hn:n 0dist (a n.toNat) (a 0) C; All goals completed! 🐙 All goals completed! 🐙
theorem declaration uses 'sorry'Chapter6.Sequence.sup_eq_sSup (a: ): (a:Sequence).sup = sSup (Set.range (fun n (a n:EReal))) := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.sup = sSup (Set.range fun n => (a n)) All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.inf_eq_sInf (a: ): (a:Sequence).inf = sInf (Set.range (fun n (a n:EReal))) := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.inf = sInf (Set.range fun n => (a n)) All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.bddAbove_iff (a: ): (a:Sequence).bddAbove BddAbove (Set.range a) := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.bddAbove BddAbove (Set.range a) All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.bddBelow_iff (a: ): (a:Sequence).bddBelow BddBelow (Set.range a) := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.bddBelow BddBelow (Set.range a) All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.Monotone_iff (a: ): (a:Sequence).isMonotone Monotone a := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isMonotone Monotone a All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.Antitone_iff (a: ): (a:Sequence).isAntitone Antitone a := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.isAntitone Antitone a All goals completed! 🐙

Identification with unknown constant 'Filter.MapClusterPt'Filter.MapClusterPt

theorem Chapter6.Sequence.limit_point_iff (a: ) (L:) : (a:Sequence).limit_point L MapClusterPt L Filter.atTop a := a: L:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.limit_point L MapClusterPt L Filter.atTop a a: L:(∀ ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| ε) (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_2 : ), b a_2, a b s a: L:(∀ ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| ε) (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_3 : ), b a_3, a b sa: L:(∀ (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_2 : ), b a_2, a b s) ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| ε a: L:(∀ ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| ε) (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_3 : ), b a_3, a b s a: L:h: ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| εs:Set hs: ε > 0, Metric.ball L ε sN: b N, a b s a: L:h: ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| εs:Set N:ε::ε > 0hεs:Metric.ball L ε s b N, a b s specialize h (ε/2) (half_pos ) N (a: L:h: ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| εs:Set N:ε::ε > 0hεs:Metric.ball L ε sN 0 All goals completed! 🐙) a: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2 b N, a b s have hn : n 0 := LE.le.trans (a: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 20 N All goals completed! 🐙) hn1 a: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:n 0n.toNat Na: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:n 0a n.toNat s a: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:n 0n.toNat N rwa [ge_iff_le, Int.le_toNat hna: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:n 0N n a: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:n 0a n.toNat Metric.ball L ε a: L:s:Set N:ε::ε > 0hεs:Metric.ball L ε sn:hn1:n Nhn:n 0hn2:|a n.toNat - L| ε / 2|a n.toNat - L| < ε All goals completed! 🐙 a: L:h: (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_2 : ), b a_2, a b sε::ε > 0N:hN:N 0 n N, |(if n 0 then a n.toNat else 0) - L| ε a: L:ε::ε > 0N:hN:N 0h: b N.toNat, a b Metric.ball L ε n N, |(if n 0 then a n.toNat else 0) - L| ε a: L:ε::ε > 0N:hN:N 0n:hn1:n N.toNathn2:a n Metric.ball L ε n N, |(if n 0 then a n.toNat else 0) - L| ε have hn : n 0 := a: L:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.limit_point L MapClusterPt L Filter.atTop a All goals completed! 🐙 a: L:ε::ε > 0N:hN:N 0n:hn1:n N.toNathn2:a n Metric.ball L εhn:n 0n Na: L:ε::ε > 0N:hN:N 0n:hn1:n N.toNathn2:a n Metric.ball L εhn:n 0|(if n 0 then a (↑n).toNat else 0) - L| ε a: L:ε::ε > 0N:hN:N 0n:hn1:n N.toNathn2:a n Metric.ball L εhn:n 0n N rwa [ge_iff_le, Int.toNat_lea: L:ε::ε > 0N:hN:N 0n:hn1:n N.toNathn2:a n Metric.ball L εhn:n 0N.toNat n a: L:ε::ε > 0N:hN:N 0n:hn1:n N.toNathn:n 0hn2:|a n - L| < ε|a n - L| ε All goals completed! 🐙

Identification with Filter.limsup.{u_1, u_2} {α : Type u_1} {β : Type u_2} [ConditionallyCompleteLattice α] (u : β → α) (f : Filter β) : αFilter.limsup

theorem declaration uses 'sorry'Chapter6.Sequence.limsup_eq (a: ) : (a:Sequence).limsup = Filter.limsup (fun n (a n:EReal)) Filter.atTop := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.limsup = Filter.limsup (fun n => (a n)) Filter.atTop a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.limsup = sInf {a_1 | a_2, b a_2, (a b) a_1} All goals completed! 🐙

Identification with Filter.liminf.{u_1, u_2} {α : Type u_1} {β : Type u_2} [ConditionallyCompleteLattice α] (u : β → α) (f : Filter β) : αFilter.liminf

theorem declaration uses 'sorry'Chapter6.Sequence.liminf_eq (a: ) : (a:Sequence).liminf = Filter.liminf (fun n (a n:EReal)) Filter.atTop := a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.liminf = Filter.liminf (fun n => (a n)) Filter.atTop a: { m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.liminf = sSup {a_1 | a_2, b a_2, a_1 (a b)} All goals completed! 🐙