Аналіз I, Розділ 6, Епілог: Зв'язки з операціями границь у Mathlib
У цьому (технічному) епілозі ми показуємо, що різні операції та властивості, які ми визначили для
послідовностей «Розділу 6» Chapter6.Sequence, еквівалентні операціям у Mathlib. Зауважте, однак,
що операції Mathlib визначені в набагато більшій загальності, ніж випадок послідовностей дійсних чисел,
зокрема з використанням мови фільтрів.
open FilterЗпівставлення із підтримкою Коші-послідовностей у 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| < εε:ℝhε:ε > 0⊢ ∃ N, ∀ j ≥ N, ∀ k ≥ N, |a j - a k| ≤ ε a:ℕ → ℝh:∀ ε > 0, ∃ N, ∀ j ≥ N, ∀ k ≥ N, |a j - a k| ≤ εε:ℝhε:ε > 0⊢ ∃ i, ∀ j ≥ i, |a j - a i| < εa:ℕ → ℝh:∀ ε > 0, ∃ i, ∀ j ≥ i, |a j - a i| < εε:ℝhε:ε > 0⊢ ∃ N, ∀ j ≥ N, ∀ k ≥ N, |a j - a k| ≤ ε a:ℕ → ℝh✝:∀ ε > 0, ∃ i, ∀ j ≥ i, |a j - a i| < εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 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| < εε:ℝhε:ε > 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| < εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 0N:ℕh:∀ j ≥ N, ∀ k ≥ N, |a j - a k| ≤ ε / 2n:ℕhn:n ≥ N⊢ N ≥ N All goals completed! 🐙)]
a:ℕ → ℝh✝:∀ ε > 0, ∃ i, ∀ j ≥ i, |a j - a i| < εε:ℝhε:ε > 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| < εε:ℝhε:ε > 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| < εε:ℝhε:ε > 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| < εε:ℝhε:ε > 0N:ℕh:∀ j ≥ N, |a j - a N| < ε / 2n:ℕhn:n ≥ Nm:ℕhm:m ≥ N⊢ ε / 2 + ε / 2 = ε All goals completed! 🐙Зпівставлення із CauchySeq у 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! 🐙
Зпівставлення із Filter.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 < εε:ℝhε:ε > 0⊢ ∃ N, ∀ n ≥ N, |(↑a).seq n - L| ≤ ε
a:ℕ → ℝL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |(↑a).seq n - L| ≤ εε:ℝhε:ε > 0⊢ ∃ N, ∀ n ≥ N, dist (a n) L < ε a:ℕ → ℝL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |(↑a).seq n - L| ≤ εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 0N:ℤhN:∀ n ≥ N, |(↑a).seq n - L| ≤ ε / 2n:ℕhn:n ≥ N.toNat⊢ dist (a n) L < ε
a:ℕ → ℝL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |(↑a).seq n - L| ≤ εε:ℝhε:ε > 0N:ℤn:ℕhn:n ≥ N.toNathN:|(↑a).seq ↑n - L| ≤ ε / 2⊢ dist (a n) L < ε; a:ℕ → ℝL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |(↑a).seq n - L| ≤ εε:ℝhε:ε > 0N:ℤn:ℕhn:n ≥ N.toNathN:|a n - L| ≤ ε / 2⊢ dist (a n) L < ε
a:ℕ → ℝL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |(↑a).seq n - L| ≤ εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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 < εε:ℝhε:ε > 0⊢ ∃ N, ∀ n ≥ N, |a.seq n - L| ≤ ε
a:SequenceL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |a.seq n - L| ≤ εε:ℝhε:ε > 0⊢ ∃ N, ∀ n ≥ N, dist (a.seq n) L < ε a:SequenceL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |a.seq n - L| ≤ εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 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| ≤ εε:ℝhε:ε > 0N:ℤhN:∀ n ≥ N, |a.seq n - L| ≤ ε / 2n✝:ℤa✝:n✝ ≥ Nthis:|a.seq n✝ - L| ≤ ε / 2⊢ dist (a.seq n✝) L < ε; a:SequenceL:ℝh:∀ ε > 0, ∃ N, ∀ n ≥ N, |a.seq n - L| ≤ εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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 < εε:ℝhε:ε > 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:Sequence⊢ a.Convergent ↔ ∃ L, Tendsto a.seq atTop (nhds L) All goals completed! 🐙
Технічна деталь: CauSeq.IsComplete ℝ було встановлено для _root_.abs, але не для norm.
instance inst_real_complete : CauSeq.IsComplete ℝ norm := ⊢ CauSeq.IsComplete ℝ norm All goals completed! 🐙
Зпівставлення із 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).IsCauchy⊢ lim ↑a = CauSeq.lim ⟨a, ⋯⟩
a:ℕ → ℝha:(↑a).IsCauchyh1:?_mvar.37089 := CauSeq.tendsto_limit ⟨_fvar.37083, (Chapter6.Sequence.isCauchy_iff_isCauSeq _fvar.37083).mp _fvar.37084⟩⊢ lim ↑a = CauSeq.lim ⟨a, ⋯⟩
a:ℕ → ℝha:(↑a).IsCauchyh1:?_mvar.37089 := CauSeq.tendsto_limit ⟨_fvar.37083, (Chapter6.Sequence.isCauchy_iff_isCauSeq _fvar.37083).mp _fvar.37084⟩h2:?_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! 🐙
Зпівставлення із limUnder
theorem Chapter6.Sequence.lim_eq_limUnder (a:ℕ → ℝ) (ha: (a:Sequence).Convergent) :
Chapter6.lim (a:Sequence) = limUnder Filter.atTop a := a:ℕ → ℝha:(↑a).Convergent⊢ lim ↑a = limUnder atTop a
All goals completed! 🐙
Зпівставлення із Bornology.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) ≤ C⊢ C ≥ 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 ≥ 0⊢ 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⊢ |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 ≥ 0⊢ a 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 ≥ 0⊢ AddLeftMono ℝ; 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⊢ AddLeftMono ℝ; 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 ≥ 0⊢ dist (a n.toNat) (a 0) ≤ C; All goals completed! 🐙
All goals completed! 🐙theorem 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 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 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 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 Chapter6.Sequence.Monotone_iff (a:ℕ → ℝ): (a:Sequence).IsMonotone ↔ Monotone a := a:ℕ → ℝ⊢ (↑a).IsMonotone ↔ Monotone a All goals completed! 🐙theorem Chapter6.Sequence.Antitone_iff (a:ℕ → ℝ): (a:Sequence).IsAntitone ↔ Antitone a := a:ℕ → ℝ⊢ (↑a).IsAntitone ↔ Antitone a All goals completed! 🐙
Зпівставлення із MapClusterPt
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 ℝε:ℝhε:ε > 0hεs:Metric.ball L ε ⊆ sN:ℕ⊢ ∃ b ≥ N, a b ∈ s
have ⟨ n, hn1, hn2 ⟩ := h _ (half_pos hε) N (a:ℕ → ℝL:ℝh:∀ ε > 0, ∀ N ≥ 0, ∃ n ≥ N, |(if n ≥ 0 then a n.toNat else 0) - L| ≤ εs:Set ℝε:ℝhε:ε > 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 ℝε:ℝhε:ε > 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.87003⊢ n.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 ℝε:ℝhε:ε > 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.87003⊢ ↑N ≤ n, ?_ ⟩
a:ℕ → ℝL:ℝh:∀ ε > 0, ∀ N ≥ 0, ∃ n ≥ N, |(if n ≥ 0 then a n.toNat else 0) - L| ≤ εs:Set ℝε:ℝhε:ε > 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.89751⊢ a 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| ≤ εhε: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ε:ℝhε:ε > 0N:ℤa✝:N ≥ 0⊢ ∃ n ≥ N, |(if n ≥ 0 then a n.toNat else 0) - L| ≤ ε
have ⟨ n, hn1, hn2 ⟩ := h (Metric.ball L ε) ⟨ _, hε, a:ℕ → ℝL:ℝh:∀ (s : Set ℝ), (∃ ε > 0, Metric.ball L ε ⊆ s) → ∀ (a_2 : ℕ), ∃ b ≥ a_2, a b ∈ sε:ℝhε:ε > 0N:ℤa✝:N ≥ 0⊢ Metric.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ε:ℝhε:ε > 0N:ℤa✝:N ≥ 0n:ℕhn1:n ≥ N.toNathn2:a n ∈ Metric.ball L εhn:_fvar.116180 ≥ 0 := zero_le _fvar.116180⊢ ↑n ≥ 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ε:ℝhε:ε > 0N:ℤa✝:N ≥ 0n:ℕhn1:n ≥ N.toNathn2:a n ∈ Metric.ball L εhn:_fvar.116180 ≥ 0 := zero_le _fvar.116180⊢ N.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 ∈ shε:0 < εa✝:0 ≤ Nhn1:N ≤ ↑nhn2:|a n - L| < εhn:True⊢ |a n - L| ≤ ε; All goals completed! 🐙
Зпівставлення із Filter.limsup
theorem 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! 🐙
Зпівставлення із Filter.liminf
theorem 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! 🐙
Зпівставлення rpow та експоненціювання Mathlib
theorem Chapter6.Real.rpow_eq_rpow {x:ℝ} (hx: x > 0) (α:ℝ) : rpow x α = x^α := x:ℝhx:x > 0α:ℝ⊢ rpow x α = x ^ α
All goals completed! 🐙