Analysis I, Chapter 6 epilogue: Connections with Mathlib limits

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.

open Filter

Identification with the Cauchy sequence support in Mathlib/Algebra/Order/CauSeq/Basic

theorem Chapter6.Sequence.isCauchy_iff_isCauSeq (a: ) : (a:Sequence).IsCauchy IsCauSeq _root_.abs a := a: (↑a).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: (∀ ε > 0, i, j i, |a j - a i| < ε) ε > 0, N, j N, k N, |a j - a k| ε a: h: ε > 0, i, j i, |a j - a i| < εε::ε > 0 N, j N, k N, |a j - a k| ε a: h: ε > 0, N, j N, k N, |a j - a k| εε::ε > 0 i, j i, |a j - a i| < εa: h: ε > 0, i, j i, |a j - a i| < εε::ε > 0 N, j N, k N, |a j - a k| ε a: h✝: ε > 0, i, j i, |a j - a i| < εε::ε > 0N:h: j N, |a j - a N| < ε / 2 N, j N, k N, |a j - a k| ε a: h✝: ε > 0, N, j N, k N, |a j - a k| εε::ε > 0N:h: j N, k N, |a j - a k| ε / 2 i, j i, |a j - a i| < εa: h✝: ε > 0, i, j i, |a j - a i| < εε::ε > 0N:h: j N, |a j - a N| < ε / 2 N, j N, k N, |a j - a k| ε a: h✝: ε > 0, i, j i, |a j - a i| < εε::ε > 0N:h: j N, |a j - a N| < ε / 2 j N, k N, |a j - a k| ε a: h✝: ε > 0, N, j N, k N, |a j - a k| εε::ε > 0N:h: j N, k N, |a j - a k| ε / 2 j N, |a j - a N| < ε a: h✝: ε > 0, N, j N, k N, |a j - a k| εε::ε > 0N:h: j N, k N, |a j - a k| ε / 2n:hn:n N|a n - a N| < ε; linarith [h n hn N (a: h✝: ε > 0, N, j N, k N, |a j - a k| εε::ε > 0N:h: j N, k N, |a j - a k| ε / 2n:hn:n NN N All goals completed! 🐙)] a: h✝: ε > 0, i, j i, |a j - a i| < εε::ε > 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: h✝: ε > 0, i, j i, |a j - a i| < εε::ε > 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| All goals completed! 🐙 _ ε/2 + ε/2 := a: h✝: ε > 0, i, j i, |a j - a i| < εε::ε > 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 All goals completed! 🐙 _ = _ := a: h✝: ε > 0, i, j i, |a j - a i| < εε::ε > 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 Mathlib/Topology/UniformSpace/Cauchy

theorem Chapter6.Sequence.Cauchy_iff_CauchySeq (a: ) : (a:Sequence).IsCauchy CauchySeq a := a: (↑a).IsCauchy CauchySeq a a: IsCauSeq _root_.abs a CauchySeq a All goals completed! 🐙

Identification 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 atTop.Tendsto a (nhds L) := a: L:(↑a).TendsTo L Tendsto a atTop (nhds L) a: L:(∀ ε > 0, N, n N, |(↑a).seq n - L| ε) ε > 0, N, n N, dist (a n) L < ε a: L:(∀ ε > 0, N, n N, |(↑a).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, |(↑a).seq n - L| ε a: L:(∀ ε > 0, N, n N, |(↑a).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, |(↑a).seq n - L| ε a: L:h: ε > 0, N, n N, dist (a n) L < εε::ε > 0 N, n N, |(↑a).seq n - L| ε a: L:h: ε > 0, N, n N, |(↑a).seq n - L| εε::ε > 0 N, n N, dist (a n) L < ε a: L:h: ε > 0, N, n N, |(↑a).seq n - L| εε::ε > 0N:hN: n N, |(↑a).seq n - L| ε / 2 N, n N, dist (a n) L < ε; a: L:h: ε > 0, N, n N, |(↑a).seq n - L| εε::ε > 0N:hN: n N, |(↑a).seq n - L| ε / 2 n N.toNat, dist (a n) L < ε; a: L:h: ε > 0, N, n N, |(↑a).seq n - L| εε::ε > 0N:hN: n N, |(↑a).seq n - L| ε / 2n:hn:n N.toNatdist (a n) L < ε a: L:h: ε > 0, N, n N, |(↑a).seq n - L| εε::ε > 0N:n:hn:n N.toNathN:|(↑a).seq n - L| ε / 2dist (a n) L < ε; a: L:h: ε > 0, N, n N, |(↑a).seq n - L| εε::ε > 0N:n:hn:n N.toNathN:|a n - L| ε / 2dist (a n) L < ε a: L:h: ε > 0, N, n N, |(↑a).seq n - 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 < εε::ε > 0N:hN: n N, dist (a n) L < ε N, n N, |(↑a).seq n - L| ε; a: L:h: ε > 0, N, n N, dist (a n) L < εε::ε > 0N:hN: n N, dist (a n) L < ε n N, |(↑a).seq n - L| ε; a: L:h: ε > 0, N, n N, dist (a n) L < εε::ε > 0N:hN: n N, dist (a n) L < εn:hn:n N|(↑a).seq n - L| ε have hpos : n 0 := a: L:(↑a).TendsTo L Tendsto a atTop (nhds L) All goals completed! 🐙 a: L:h: ε > 0, N, n N, dist (a n) L < εε::ε > 0N:hN: n N, dist (a n) L < εn:hn:N n.toNathpos:n 0|(↑a).seq n - L| ε All goals completed! 🐙
theorem Chapter6.Sequence.tendsto_iff_Tendsto' (a: Sequence) (L:) : a.TendsTo L atTop.Tendsto a.seq (nhds L) := a:SequenceL:a.TendsTo L Tendsto a.seq 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:(∀ ε > 0, N, n N, dist (a.seq n) L < ε) ε > 0, N, n N, |a.seq n - L| ε a:SequenceL:h: ε > 0, N, n N, dist (a.seq n) L < εε::ε > 0 N, n N, |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:h: ε > 0, N, n N, |a.seq n - L| εε::ε > 0N:hN: n N, |a.seq n - L| ε / 2 N, n N, dist (a.seq n) L < ε; a:SequenceL:h: ε > 0, N, n N, |a.seq n - L| εε::ε > 0N:hN: n N, |a.seq n - L| ε / 2 n N, dist (a.seq n) L < ε; a:SequenceL:h: ε > 0, N, n N, |a.seq n - L| εε::ε > 0N:hN: n N, |a.seq n - L| ε / 2n✝:a✝:n✝ Nthis:|a.seq n✝ - L| ε / 2dist (a.seq n✝) L < ε; a:SequenceL:h: ε > 0, N, n N, |a.seq n - L| εε::ε > 0N:hN: n N, |a.seq n - L| ε / 2n✝:a✝:n✝ Nthis:|a.seq n✝ - L| ε / 2|a.seq n✝ - L| < ε; All goals completed! 🐙 a:SequenceL:h: ε > 0, N, n N, dist (a.seq n) L < εε::ε > 0N:hN: n N, dist (a.seq n) L < ε N, n N, |a.seq n - L| ε; a:SequenceL:h: ε > 0, N, n N, dist (a.seq n) L < εε::ε > 0N:hN: n N, dist (a.seq n) L < ε n N, |a.seq n - L| ε; a:SequenceL:h: ε > 0, N, n N, dist (a.seq n) L < εε::ε > 0N:hN: n N, dist (a.seq n) L < εn✝:a✝:n✝ Nthis:dist (a.seq n✝) L < ε|a.seq n✝ - L| ε; a:SequenceL:h: ε > 0, N, n N, dist (a.seq n) L < εε::ε > 0N:hN: n N, dist (a.seq n) L < εn✝:a✝:n✝ Nthis:dist (a.seq n✝) L < εdist (a.seq n✝) L ε; All goals completed! 🐙theorem Chapter6.Sequence.converges_iff_Tendsto (a: ) : (a:Sequence).Convergent L, atTop.Tendsto a (nhds L) := a: (↑a).Convergent L, Tendsto a atTop (nhds L) All goals completed! 🐙theorem Chapter6.Sequence.converges_iff_Tendsto' (a: Sequence) : a.Convergent L, atTop.Tendsto a.seq (nhds L) := a:Sequencea.Convergent L, Tendsto a.seq atTop (nhds L) All goals completed! 🐙

A technicality: CauSeq.IsComplete : (abv : ?m.1) [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, (isCauchy_iff_isCauSeq a).mp ha := a: ha:(↑a).IsCauchylim a = CauSeq.lim a, a: ha:(↑a).IsCauchyh1:?_mvar.37089 := CauSeq.tendsto_limit _fvar.37083, (Chapter6.Sequence.isCauchy_iff_isCauSeq _fvar.37083).mp _fvar.37084lim a = CauSeq.lim a, a: ha:(↑a).IsCauchyh1:?_mvar.37089 := CauSeq.tendsto_limit _fvar.37083, (Chapter6.Sequence.isCauchy_iff_isCauSeq _fvar.37083).mp _fvar.37084h2:?_mvar.37497 := Chapter6.Sequence.lim_def ((Chapter6.Sequence.Cauchy_iff_convergent _fvar.37083).mp _fvar.37084)lim a = CauSeq.lim a, a: ha:(↑a).IsCauchyh1:(↑a, ).TendsTo (CauSeq.lim a, )h2:(↑a).TendsTo (lim a)lim a = CauSeq.lim a, a: ha:(↑a).IsCauchyh1:(↑a, ).TendsTo (CauSeq.lim a, )h2:(↑a).TendsTo (lim a)h:lim a CauSeq.lim a, False; a: ha:(↑a).IsCauchyh1:(↑a, ).TendsTo (CauSeq.lim a, )h2:(↑a).TendsTo (lim a)h:¬((↑a).TendsTo (lim a) (↑a).TendsTo (CauSeq.lim a, ))False; All goals completed! 🐙

Identification with limUnder.{u_1, u_3} {X : Type u_1} [TopologicalSpace X] {α : Type u_3} [Nonempty X] (f : Filter α) (g : α X) : XlimUnder

theorem declaration uses 'sorry'Chapter6.Sequence.lim_eq_limUnder (a: ) (ha: (a:Sequence).Convergent) : Chapter6.lim (a:Sequence) = limUnder Filter.atTop a := a: ha:(↑a).Convergentlim a = limUnder atTop a 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: (↑a).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: 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: 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: (↑a).IsBounded Bornology.IsBounded (Set.range a) a: C:h:dist (a 0) (a 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:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))0 C + |a 0| All goals completed! 🐙, ?_ a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:_fvar.61970 0 := ?_mvar.62136n:|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:_fvar.61970 0 := ?_mvar.62136n: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:_fvar.61970 0 := ?_mvar.62136n: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:_fvar.61970 0 := ?_mvar.62136n: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:_fvar.61970 0 := ?_mvar.62136n: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:_fvar.61970 0 := ?_mvar.62136n:hn:¬n 00 C + |a 0| a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:_fvar.61970 0 := ?_mvar.62136n: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:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))n: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:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))n: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:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))n:hn:n 0AddLeftMono ; a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))n:hn:n 0AddLeftMono ; All goals completed! 🐙 _ C + |a 0| := a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))n: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:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))n:hn:n 0|a n.toNat - a 0| C; a: C:h: (a_1 a_2 : ), dist (a a_1) (a a_2) Cthis:_fvar.61970 0 := Eq.mpr (id ge_iff_le._simp_1) (Eq.mp (congrArg (fun x => x _fvar.61970) (dist_self (@_fvar.40435 0))) (@_fvar.61971 0 0))n: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: (↑a).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: (↑a).inf = sInf (Set.range fun n => (a n)) All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.bddAbove_iff (a: ): (a:Sequence).BddAbove _root_.BddAbove (Set.range a) := a: (↑a).BddAbove _root_.BddAbove (Set.range a) All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.bddBelow_iff (a: ): (a:Sequence).BddBelow _root_.BddBelow (Set.range a) := a: (↑a).BddBelow _root_.BddBelow (Set.range a) All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.Monotone_iff (a: ): (a:Sequence).IsMonotone Monotone a := a: (↑a).IsMonotone Monotone a All goals completed! 🐙theorem declaration uses 'sorry'Chapter6.Sequence.Antitone_iff (a: ): (a:Sequence).IsAntitone Antitone a := a: (↑a).IsAntitone Antitone a All goals completed! 🐙

Identification with MapClusterPt.{u_1, u_3} {X : Type u_1} [TopologicalSpace X] {ι : Type u_3} (x : X) (F : Filter ι) (u : ι X) : PropMapClusterPt

theorem Chapter6.Sequence.limit_point_iff (a: ) (L:) : (a:Sequence).LimitPoint L MapClusterPt L .atTop a := a: L:(↑a).LimitPoint L MapClusterPt L 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 ε::ε > 0hεs:Metric.ball L ε sN: b N, a b s have n, hn1, hn2 := h _ (half_pos ) N (a: L:h: ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| εs:Set ε::ε > 0hεs:Metric.ball L ε sN:N 0 All goals completed! 🐙) have hn : n 0 := a: L:(↑a).LimitPoint L MapClusterPt L atTop a All goals completed! 🐙 refine n.toNat, a: L:h: ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| εs:Set ε::ε > 0hεs:Metric.ball L ε sN:n:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:_fvar.87001 0 := Chapter6.Sequence.limit_point_iff._proof_5 _fvar.84983 _fvar.84984 _fvar.86552 _fvar.86555 _fvar.86606 _fvar.86607 _fvar.86608 _fvar.86702 _fvar.87001 _fvar.87002 _fvar.87003n.toNat N rwa [ge_iff_le, Int.le_toNat hna: L:h: ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| εs:Set ε::ε > 0hεs:Metric.ball L ε sN:n:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:_fvar.87001 0 := Chapter6.Sequence.limit_point_iff._proof_5 _fvar.84983 _fvar.84984 _fvar.86552 _fvar.86555 _fvar.86606 _fvar.86607 _fvar.86608 _fvar.86702 _fvar.87001 _fvar.87002 _fvar.87003N n, ?_ a: L:h: ε > 0, N 0, n N, |(if n 0 then a n.toNat else 0) - L| εs:Set ε::ε > 0hεs:Metric.ball L ε sN:n:hn1:n Nhn2:|(if n 0 then a n.toNat else 0) - L| ε / 2hn:_fvar.87001 0 := ?_mvar.89751a n.toNat Metric.ball L ε; a: L:s:Set ε:hεs:Metric.ball L ε sN:n:h: (ε : ), 0 < ε (N : ), 0 N n, N n |(if 0 n then a n.toNat else 0) - L| ε:0 < εhn1:N nhn2:|a n.toNat - L| ε / 2hn:True|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:a✝:N 0 n N, |(if n 0 then a n.toNat else 0) - L| ε have n, hn1, hn2 := h (Metric.ball L ε) _, , a: L:h: (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_2 : ), b a_2, a b sε::ε > 0N:a✝:N 0Metric.ball L ε Metric.ball L ε All goals completed! 🐙 N.toNat have hn : n 0 := a: L:(↑a).LimitPoint L MapClusterPt L atTop a All goals completed! 🐙 refine n, a: L:h: (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_2 : ), b a_2, a b sε::ε > 0N:a✝:N 0n:hn1:n N.toNathn2:a n Metric.ball L εhn:_fvar.116180 0 := zero_le _fvar.116180n N rwa [ge_iff_le, Int.toNat_lea: L:h: (s : Set ), (∃ ε > 0, Metric.ball L ε s) (a_2 : ), b a_2, a b sε::ε > 0N:a✝:N 0n:hn1:n N.toNathn2:a n Metric.ball L εhn:_fvar.116180 0 := zero_le _fvar.116180N.toNat n, ?_ a: L:ε:N:n:h: (s : Set ) (x : ), 0 < x Metric.ball L x s (a_3 : ), b, a_3 b a b s:0 < εa✝:0 Nhn1:N nhn2:|a n - L| < εhn:True|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 = atTop.limsup (fun n (a n:EReal)) := a: (↑a).limsup = Filter.limsup (fun n => (a n)) atTop a: (↑a).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 = atTop.liminf (fun n (a n:EReal)) := a: (↑a).liminf = Filter.liminf (fun n => (a n)) atTop a: (↑a).liminf = sSup {a_1 | a_2, b a_2, a_1 (a b)} All goals completed! 🐙

Identification of Unknown identifier `rpow`rpow and Mathlib exponentiation

theorem declaration uses 'sorry'Chapter6.Real.rpow_eq_rpow (x:) (α:) : rpow x α = x^α := x:α:rpow x α = x ^ α All goals completed! 🐙