Imports
import Mathlib.Tactic
import Analysis.Section_7_2
import Analysis.Section_7_3
import Analysis.Section_7_4
import Analysis.Section_8_1Analysis I, Section 8.2: Summation on infinite sets
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:
-
Absolute convergence and summation on countably infinite or general sets.
-
Connections with Mathlib's
Summableandtsum. -
The Riemann rearrangement theorem.
Some non-trivial API is provided beyond what is given in the textbook in order connect these notions with existing summation notions.
After this section, the summation notation developed here will be deprecated in favor of Mathlib's API for Summable and tsum.
namespace Chapter8open Chapter7 Chapter7.Series Finset Function Filter
Definition 8.2.1 (Series on countable sets). Note that with this definition, functions defined
on finite sets will not be absolutely convergent; one should use AbsConvergent' instead for such
cases.
abbrev AbsConvergent {X:Type} (f: X → ℝ) : Prop := ∃ g: ℕ → X, Bijective g ∧ (f ∘ g: Series).absConvergestheorem AbsConvergent.mk {X: Type} {f:X → ℝ} {g:ℕ → X} (h: Bijective g) (hfg: (f ∘ g:Series).absConverges) : AbsConvergent f := X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ AbsConvergent f All goals completed! 🐙
The definition has been chosen to give a sensible value when X is finite, even though
AbsConvergent is by definition false in this context.
open Classical innoncomputable abbrev Sum {X:Type} (f: X → ℝ) : ℝ := if h: AbsConvergent f then (f ∘ h.choose:Series).sum else
if _hX: Finite X then (∑ x ∈ @univ X (Fintype.ofFinite X), f x) else 0theorem Sum.of_finite {X:Type} [hX:Finite X] (f:X → ℝ) : Sum f = ∑ x ∈ @Finset.univ X (Fintype.ofFinite X), f x := X:TypehX:Finite Xf:X → ℝ⊢ Sum f = ∑ x, f x
have : ¬ AbsConvergent f := X:TypehX:Finite Xf:X → ℝ⊢ Sum f = ∑ x, f x
X:TypehX:Finite Xf:X → ℝthis:AbsConvergent f⊢ False; X:TypehX:Finite Xf:X → ℝg:ℕ → Xhg:Bijective ga✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ False
X:TypehX:¬Infinite ℕf:X → ℝg:ℕ → Xhg:Bijective ga✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ False; X:TypehX:¬Infinite ℕf:X → ℝg:ℕ → Xhg:Bijective ga✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ Infinite ℕ; All goals completed! 🐙
All goals completed! 🐙theorem AbsConvergent.comp {X: Type} {f:X → ℝ} {g:ℕ → X} (h: Bijective g) (hf: AbsConvergent f) : (f ∘ g:Series).absConverges := X:Typef:X → ℝg:ℕ → Xh:Bijective ghf:AbsConvergent f⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges
X:Typef:X → ℝg:ℕ → Xh:Bijective gg':ℕ → Xhbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConverges⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges
X:Typef:X → ℝg:ℕ → Xh:Bijective gg':ℕ → Xhbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges
X:Typef:X → ℝg:ℕ → Xh:Bijective gg':ℕ → Xhbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges
X:Typef:X → ℝg:ℕ → Xh:Bijective gg':ℕ → Xhbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)n:ℤa✝:n ≥ 0⊢ (f ∘ g) n.toNat = (fun n ↦ (f ∘ g') ((g'_inv ∘ g) n)) n.toNat
All goals completed! 🐙theorem Sum.eq {X: Type} {f:X → ℝ} {g:ℕ → X} (h: Bijective g) (hfg: (f ∘ g:Series).absConverges) : (f ∘ g:Series).convergesTo (Sum f) := X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent f⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent f⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (g n.toNat) else 0, vanish := ⋯ }.convergesTo
{ m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.sum
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fhbij:Bijective (Exists.choose this)hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ Exists.choose this) n.toNat else 0, vanish := ⋯ }.absConverges⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (g n.toNat) else 0, vanish := ⋯ }.convergesTo
{ m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.sum
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConverges⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (g n.toNat) else 0, vanish := ⋯ }.convergesTo
{ m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.sum
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (g n.toNat) else 0, vanish := ⋯ }.convergesTo
{ m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.sum
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.sum =
{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.sum
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.sum =
{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.sum
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)n:ℤ⊢ (if n ≥ 0 then (f ∘ g) n.toNat else 0) = if n ≥ 0 then (fun n ↦ (f ∘ g') ((g'_inv ∘ g) n)) n.toNat else 0
X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)n:ℤhn:n ≥ 0⊢ (if n ≥ 0 then (f ∘ g) n.toNat else 0) = if n ≥ 0 then (fun n ↦ (f ∘ g') ((g'_inv ∘ g) n)) n.toNat else 0X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)n:ℤhn:¬n ≥ 0⊢ (if n ≥ 0 then (f ∘ g) n.toNat else 0) = if n ≥ 0 then (fun n ↦ (f ∘ g') ((g'_inv ∘ g) n)) n.toNat else 0 X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)n:ℤhn:n ≥ 0⊢ (if n ≥ 0 then (f ∘ g) n.toNat else 0) = if n ≥ 0 then (fun n ↦ (f ∘ g') ((g'_inv ∘ g) n)) n.toNat else 0X:Typef:X → ℝg:ℕ → Xh:Bijective ghfg:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesthis:AbsConvergent fg':ℕ → X := Exists.choose thishbij:Bijective g'hconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg'_inv:X → ℕhleft:LeftInverse g'_inv g'hright:RightInverse g'_inv g'hG:Bijective (g'_inv ∘ g)n:ℤhn:¬n ≥ 0⊢ (if n ≥ 0 then (f ∘ g) n.toNat else 0) = if n ≥ 0 then (fun n ↦ (f ∘ g') ((g'_inv ∘ g) n)) n.toNat else 0 All goals completed! 🐙theorem Sum.of_comp {X Y:Type} {f:X → ℝ} (h: AbsConvergent f) {g: Y → X} (hbij: Bijective g) : AbsConvergent (f ∘ g) ∧ Sum f = Sum (f ∘ g) := X:TypeY:Typef:X → ℝh:AbsConvergent fg:Y → Xhbij:Bijective g⊢ AbsConvergent (f ∘ g) ∧ Sum f = Sum (f ∘ g)
X:TypeY:Typef:X → ℝg:Y → Xhbij:Bijective gg':ℕ → Xhbij':Bijective g'hconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConverges⊢ AbsConvergent (f ∘ g) ∧ Sum f = Sum (f ∘ g)
X:TypeY:Typef:X → ℝg:Y → Xhbij:Bijective gg':ℕ → Xhbij':Bijective g'hconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg_inv:X → Yhleft:LeftInverse g_inv ghright:RightInverse g_inv g⊢ AbsConvergent (f ∘ g) ∧ Sum f = Sum (f ∘ g)
X:TypeY:Typef:X → ℝg:Y → Xhbij:Bijective gg':ℕ → Xhbij':Bijective g'hconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg_inv:X → Yhleft:LeftInverse g_inv ghright:RightInverse g_inv ghbij_g_inv_g':Bijective (g_inv ∘ g')⊢ AbsConvergent (f ∘ g) ∧ Sum f = Sum (f ∘ g)
have hident : (f ∘ g) ∘ g_inv ∘ g' = f ∘ g' := X:TypeY:Typef:X → ℝh:AbsConvergent fg:Y → Xhbij:Bijective g⊢ AbsConvergent (f ∘ g) ∧ Sum f = Sum (f ∘ g) X:TypeY:Typef:X → ℝg:Y → Xhbij:Bijective gg':ℕ → Xhbij':Bijective g'hconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg_inv:X → Yhleft:LeftInverse g_inv ghright:RightInverse g_inv ghbij_g_inv_g':Bijective (g_inv ∘ g')n:ℕ⊢ ((f ∘ g) ∘ g_inv ∘ g') n = (f ∘ g') n; All goals completed! 🐙
refine ⟨ ⟨ g_inv ∘ g', ⟨ hbij_g_inv_g', X:TypeY:Typef:X → ℝg:Y → Xhbij:Bijective gg':ℕ → Xhbij':Bijective g'hconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg_inv:X → Yhleft:LeftInverse g_inv ghright:RightInverse g_inv ghbij_g_inv_g':Bijective (g_inv ∘ g')hident:(f ∘ g) ∘ g_inv ∘ g' = f ∘ g'⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ g) ∘ g_inv ∘ g') n.toNat else 0, vanish := ⋯ }.absConverges All goals completed! 🐙 ⟩ ⟩, ?_ ⟩
have h := eq (f := f ∘ g) hbij_g_inv_g' (X:TypeY:Typef:X → ℝg:Y → Xhbij:Bijective gg':ℕ → Xhbij':Bijective g'hconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg_inv:X → Yhleft:LeftInverse g_inv ghright:RightInverse g_inv ghbij_g_inv_g':Bijective (g_inv ∘ g')hident:(f ∘ g) ∘ g_inv ∘ g' = f ∘ g'⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ g) ∘ g_inv ∘ g') n.toNat else 0, vanish := ⋯ }.absConverges All goals completed! 🐙)
X:TypeY:Typef:X → ℝg:Y → Xhbij:Bijective gg':ℕ → Xhbij':Bijective g'hconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.absConvergesg_inv:X → Yhleft:LeftInverse g_inv ghright:RightInverse g_inv ghbij_g_inv_g':Bijective (g_inv ∘ g')hident:(f ∘ g) ∘ g_inv ∘ g' = f ∘ g'h:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g') n.toNat else 0, vanish := ⋯ }.convergesTo (Sum (f ∘ g))⊢ Sum f = Sum (f ∘ g)
All goals completed! 🐙@[simp]
theorem Finset.Icc_eq_cast (N:ℕ) : Icc 0 (N:ℤ) = map Nat.castEmbedding (.Icc 0 N) := N:ℕ⊢ Icc 0 ↑N = Finset.map Nat.castEmbedding (Icc 0 N)
N:ℕn:ℤ⊢ n ∈ Icc 0 ↑N ↔ n ∈ Finset.map Nat.castEmbedding (Icc 0 N); N:ℕn:ℤ⊢ 0 ≤ n ∧ n ≤ ↑N ↔ ∃ a ≤ N, ↑a = n; N:ℕn:ℤ⊢ 0 ≤ n ∧ n ≤ ↑N → ∃ a ≤ N, ↑a = nN:ℕn:ℤ⊢ (∃ a ≤ N, ↑a = n) → 0 ≤ n ∧ n ≤ ↑N
N:ℕn:ℤ⊢ 0 ≤ n ∧ n ≤ ↑N → ∃ a ≤ N, ↑a = n N:ℕn:ℤhn:0 ≤ nright✝:n ≤ ↑N⊢ ∃ a ≤ N, ↑a = n; N:ℕn:ℕright✝:↑n ≤ ↑N⊢ ∃ a ≤ N, ↑a = ↑n; N:ℕn:ℕright✝:↑n ≤ ↑N⊢ n ≤ N ∧ ↑n = ↑n; All goals completed! 🐙
N:ℕw✝:ℕleft✝:w✝ ≤ N⊢ 0 ≤ ↑w✝ ∧ ↑w✝ ≤ ↑N; All goals completed! 🐙theorem Finset.Icc_empty {N:ℤ} (h: ¬ N ≥ 0) : Icc 0 N = ∅ := N:ℤh:¬N ≥ 0⊢ Icc 0 N = ∅
N:ℤh:¬N ≥ 0a✝:ℤ⊢ a✝ ∈ Icc 0 N ↔ a✝ ∈ ∅; N:ℤh:¬N ≥ 0a✝:ℤ⊢ 0 ≤ a✝ → N < a✝; N:ℤh:¬N ≥ 0a✝¹:ℤa✝:0 ≤ a✝¹⊢ N < a✝¹; N:ℤa✝¹:ℤa✝:0 ≤ a✝¹h:a✝¹ ≤ N⊢ N ≥ 0; All goals completed! 🐙Theorem 8.2.2, preliminary version. The arguments here are rearranged slightly from the text.
theorem sum_of_sum_of_AbsConvergent_nonneg {f:ℕ × ℕ → ℝ} (hf:AbsConvergent f) (hpos: ∀ n m, 0 ≤ f (n, m)) :
(∀ n, ((fun m ↦ f (n, m)):Series).converges) ∧
(fun n ↦ ((fun m ↦ f (n, m)):Series).sum:Series).convergesTo (Sum f) := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum f⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
L
have hLpos : 0 ≤ L := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }⊢ 0 ≤ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.sum; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.nonneg; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }n:ℤ⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.seq n ≥ 0; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }n:ℤh:n ≥ 0⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.seq n ≥ 0f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }n:ℤh:¬n ≥ 0⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.seq n ≥ 0 f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }n:ℤh:n ≥ 0⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.seq n ≥ 0f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }n:ℤh:¬n ≥ 0⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (⋯.choose n.toNat) else 0, vanish := ⋯ }.seq n ≥ 0 All goals completed! 🐙; All goals completed! 🐙
have hfinsum (X: Finset (ℕ × ℕ)) : ∑ p ∈ X, f p ≤ L := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f) All goals completed! 🐙
have hfinsum' (n M:ℕ) : (a n).partial M ≤ L := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Ln:ℕM:ℕ⊢ ∑ x ∈ Icc 0 M, f (n, x) ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Ln:ℕM:ℕ⊢ ∑ x ∈ Icc 0 M, f (n, x) = ∑ x ∈ Finset.map (Embedding.sectR n ℕ) (Icc 0 M), f xf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Ln:ℕM:ℕ⊢ ∑ x ∈ Finset.map (Embedding.sectR n ℕ) (Icc 0 M), f x ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Ln:ℕM:ℕ⊢ ∑ x ∈ Icc 0 M, f (n, x) = ∑ x ∈ Finset.map (Embedding.sectR n ℕ) (Icc 0 M), f x All goals completed! 🐙
All goals completed! 🐙
have hnon (n:ℕ) : (a n).nonneg := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Ln:ℕ⊢ ∀ (n_1 : ℤ), 0 ≤ if 0 ≤ n_1 then f (n, n_1.toNat) else 0; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Ln:ℕm:ℤ⊢ 0 ≤ if 0 ≤ m then f (n, m.toNat) else 0; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Ln:ℕm:ℤh✝:0 ≤ m⊢ 0 ≤ f (n, m.toNat)f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Ln:ℕm:ℤh✝:¬0 ≤ m⊢ 0 ≤ 0 f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Ln:ℕm:ℤh✝:0 ≤ m⊢ 0 ≤ f (n, m.toNat)f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Ln:ℕm:ℤh✝:¬0 ≤ m⊢ 0 ≤ 0 All goals completed! 🐙
have hconv (n:ℕ) : (a n).converges := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕ⊢ ∃ M, ∀ (N : ℤ), (a n).partial N ≤ M
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕ⊢ ∀ (N : ℤ), (a n).partial N ≤ L; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕN:ℤ⊢ (a n).partial N ≤ L; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕN:ℤh:N ≥ 0⊢ (a n).partial N ≤ Lf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕN:ℤh:¬N ≥ 0⊢ (a n).partial N ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕN:ℤh:N ≥ 0⊢ (a n).partial N ≤ L f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕN:ℕ⊢ (a n).partial ↑N ≤ L; All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonnegn:ℕN:ℤh:¬N ≥ 0⊢ 0 ≤ L; All goals completed! 🐙
have (N M:ℤ) : ∑ n ∈ Icc 0 N, (a n.toNat).partial M ≤ L := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℤM:ℤhN:N ≥ 0⊢ ∑ n ∈ Icc 0 N, (a n.toNat).partial M ≤ Lf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℤM:ℤhN:¬N ≥ 0⊢ ∑ n ∈ Icc 0 N, (a n.toNat).partial M ≤ L; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℤM:ℤhN:¬N ≥ 0⊢ ∑ n ∈ Icc 0 N, (a n.toNat).partial M ≤ Lf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℤM:ℤhN:N ≥ 0⊢ ∑ n ∈ Icc 0 N, (a n.toNat).partial M ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℤM:ℤhN:¬N ≥ 0⊢ ∑ n ∈ Icc 0 N, (a n.toNat).partial M ≤ L All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕ⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial M ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:M ≥ 0⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial M ≤ Lf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:¬M ≥ 0⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial M ≤ L; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:¬M ≥ 0⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial M ≤ Lf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:M ≥ 0⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial M ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:¬M ≥ 0⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial M ≤ L f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:¬M ≥ 0⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial M = 0; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:¬M ≥ 0⊢ ∑ n ∈ Icc 0 ↑N, ∑ n_1 ∈ Icc (a n.toNat).m M, (a n.toNat).seq n_1 = 0
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:¬M ≥ 0⊢ ∀ x ∈ Icc 0 ↑N, ∑ n ∈ Icc (a x.toNat).m M, (a x.toNat).seq n = 0; intro n f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesM:ℤN:ℕhM:¬M ≥ 0n:ℤa✝:n ∈ Icc 0 ↑N⊢ ∑ n_1 ∈ Icc (a n.toNat).m M, (a n.toNat).seq n_1 = 0
All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℕM:ℕ⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial ↑M ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℕM:ℕ⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial ↑M = ∑ x ∈ Icc 0 N ×ˢ Icc 0 M, f xf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℕM:ℕ⊢ ∑ x ∈ Icc 0 N ×ˢ Icc 0 M, f x ≤ L
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesN:ℕM:ℕ⊢ ∑ n ∈ Icc 0 ↑N, (a n.toNat).partial ↑M = ∑ x ∈ Icc 0 N ×ˢ Icc 0 M, f x All goals completed! 🐙
All goals completed! 🐙
replace (N:ℤ) : ∑ n ∈ Icc 0 N, (a n.toNat).sum ≤ L := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N M : ℤ), ∑ n ∈ Icc 0 N, (a n.toNat).partial M ≤ LN:ℤ⊢ ∀ i ∈ Icc 0 N, Tendsto (a i.toNat).partial atTop (nhds (a i.toNat).sum)
All goals completed! 🐙
replace (N:ℤ) : (fun n ↦ (a n).sum:Series).partial N ≤ L := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N : ℤ), ∑ n ∈ Icc 0 N, (a n.toNat).sum ≤ LN:ℤn:ℤhn:n ∈ Icc 0 N⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.seq n = (a n.toNat).sum; All goals completed! 🐙
have hnon' : (fun n ↦ (a n).sum:Series).nonneg := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial N ≤ Ln:ℤ⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.seq n ≥ 0; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial N ≤ Ln:ℤ⊢ 0 ≤ if 0 ≤ n then (a n.toNat).sum else 0; f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial N ≤ Ln:ℤh✝:0 ≤ n⊢ 0 ≤ (a n.toNat).sumf:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial N ≤ Ln:ℤh✝:¬0 ≤ n⊢ 0 ≤ 0
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial N ≤ Ln:ℤh✝:0 ≤ n⊢ 0 ≤ (a n.toNat).sum All goals completed! 🐙
All goals completed! 🐙
have hconv' : (fun n ↦ (a n).sum:Series).converges := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergesthis:∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial N ≤ Lhnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneg⊢ ∃ M, ∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial N ≤ M; All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.sum ≤ L⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
L
replace : (fun n ↦ (a n).sum:Series).sum = L := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.sum ≤ L⊢ ∀ ε > 0, L - ε ≤ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.sum; intro ε f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.sum ≤ Lε:ℝhε:ε > 0⊢ L - ε ≤ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.sum
replace : ∃ X, ∑ p ∈ X, f p ≥ L - ε := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - ε⊢ L - ε ≤ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.sum
have : ∃ N, ∃ M, X ⊆ (Icc 0 N) ×ˢ (Icc 0 M) := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)⊢ (∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.converges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - εN:ℕM:ℕhX':X ⊆ Icc 0 N ×ˢ Icc 0 M⊢ L - ε ≤ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.sum
calc
_ ≤ ∑ p ∈ X, f p := hX
_ ≤ ∑ p ∈ (Icc 0 N) ×ˢ (Icc 0 M), f p := sum_le_sum_of_subset_of_nonneg hX' (f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - εN:ℕM:ℕhX':X ⊆ Icc 0 N ×ˢ Icc 0 M⊢ ∀ i ∈ Icc 0 N ×ˢ Icc 0 M, i ∉ X → 0 ≤ f i All goals completed! 🐙)
_ = ∑ n ∈ Icc 0 N, ∑ m ∈ Icc 0 M, f (n, m) := sum_product _ _ _
_ ≤ ∑ n ∈ Icc 0 N, (a n).sum := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - εN:ℕM:ℕhX':X ⊆ Icc 0 N ×ˢ Icc 0 M⊢ ∑ n ∈ Icc 0 N, ∑ m ∈ Icc 0 M, f (n, m) ≤ ∑ n ∈ Icc 0 N, (a n).sum
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - εN:ℕM:ℕhX':X ⊆ Icc 0 N ×ˢ Icc 0 M⊢ ∀ i ∈ Icc 0 N, ∑ m ∈ Icc 0 M, f (i, m) ≤ (a i).sum; intro n f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - εN:ℕM:ℕhX':X ⊆ Icc 0 N ×ˢ Icc 0 Mn:ℕa✝:n ∈ Icc 0 N⊢ ∑ m ∈ Icc 0 M, f (n, m) ≤ (a n).sum
f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - εN:ℕM:ℕhX':X ⊆ Icc 0 N ×ˢ Icc 0 Mn:ℕa✝:n ∈ Icc 0 N⊢ ∑ m ∈ Icc 0 M, f (n, m) = (a n).partial ↑M
All goals completed! 🐙
_ = (fun n ↦ (a n).sum:Series).partial N := f:ℕ × ℕ → ℝhf:AbsConvergent fhpos:∀ (n m : ℕ), 0 ≤ f (n, m)L:ℝ := Sum fa:ℕ → Series := fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }hLpos:0 ≤ Lhfinsum:∀ (X : Finset (ℕ × ℕ)), ∑ p ∈ X, f p ≤ Lhfinsum':∀ (n M : ℕ), (a n).partial ↑M ≤ Lhnon:∀ (n : ℕ), (a n).nonneghconv:∀ (n : ℕ), (a n).convergeshnon':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.nonneghconv':{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.convergesε:ℝhε:ε > 0X:Finset (ℕ × ℕ)hX:∑ p ∈ X, f p ≥ L - εN:ℕM:ℕhX':X ⊆ Icc 0 N ×ˢ Icc 0 M⊢ ∑ n ∈ Icc 0 N, (a n).sum =
{ m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ (a n).sum) n.toNat else 0, vanish := ⋯ }.partial ↑N All goals completed! 🐙
_ ≤ _ := partial_le_sum_of_nonneg hnon' hconv' _
All goals completed! 🐙Theorem 8.2.2, second version
theorem sum_of_sum_of_AbsConvergent {f:ℕ × ℕ → ℝ} (hf:AbsConvergent f) :
(∀ n, ((fun m ↦ f (n, m)):Series).absConverges) ∧
(fun n ↦ ((fun m ↦ f (n, m)):Series).sum:Series).convergesTo (Sum f) := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
have hfplus_nonneg : ∀ n m, 0 ≤ fplus (n, m) := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f) intro n f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0n:ℕm:ℕ⊢ 0 ≤ fplus (n, m); All goals completed! 🐙
have hfminus_nonneg : ∀ n m, 0 ≤ fminus (n, m) := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f) intro n f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)n:ℕm:ℕ⊢ 0 ≤ fminus (n, m); All goals completed! 🐙
have hdiff : f = fplus - fminus := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f) All goals completed! 🐙
have hfplus_conv : AbsConvergent fplus := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f) All goals completed! 🐙
have hfminus_conv : AbsConvergent fminus := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f) All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ (∀ (n : ℕ),
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ ∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConvergesf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ ∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)n:ℕ⊢ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.absConverges
All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } =
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } -
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ Sum f = Sum fplus - Sum fminus
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } =
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } -
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } -- encountered surprising difficulty with definitional equivalence here
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if 0 ≤ n then
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) - fminus (n.toNat, n_1.toNat) else 0,
vanish := ⋯ }.sum
else 0,
vanish := ⋯ } =
{ m := 0,
seq := fun n ↦
if 0 ≤ n then { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.sum
else 0,
vanish := ⋯ } -
{ m := 0,
seq := fun n ↦
if 0 ≤ n then { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.sum
else 0,
vanish := ⋯ }
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ (fplus - fminus) (n, m)) n_1.toNat else 0,
vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } =
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } -
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } -
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } =
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
((fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum) -
fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ (fplus - fminus) (n, m)) n_1.toNat else 0,
vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } =
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
((fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum) -
fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } -
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } =
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
((fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum) -
fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ } All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ (fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ (fplus - fminus) (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat =
((fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum) -
fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat; f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) - fminus (n.toNat, n_1.toNat) else 0,
vanish := ⋯ }.sum =
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.sum -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.sum
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ 0 =
({ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ } -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }).mf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤm:ℤ⊢ (if 0 ≤ m then fplus (n.toNat, m.toNat) - fminus (n.toNat, m.toNat) else 0) =
({ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ } -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }).seq
mf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.convergesf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.converges; f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤm:ℤ⊢ (if 0 ≤ m then fplus (n.toNat, m.toNat) - fminus (n.toNat, m.toNat) else 0) =
({ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ } -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }).seq
mf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.convergesf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.converges
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤm:ℤh:0 ≤ m⊢ fplus (n.toNat, m.toNat) - fminus (n.toNat, m.toNat) =
({ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ } -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }).seq
mf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤm:ℤh:¬0 ≤ m⊢ 0 =
({ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ } -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }).seq
m f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤm:ℤh:0 ≤ m⊢ fplus (n.toNat, m.toNat) - fminus (n.toNat, m.toNat) =
({ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ } -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }).seq
mf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤm:ℤh:¬0 ≤ m⊢ 0 =
({ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ } -
{ m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fminus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }).seq
m All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)x✝:ℤn:ℤ⊢ { m := 0, seq := fun n_1 ↦ if 0 ≤ n_1 then fplus (n.toNat, n_1.toNat) else 0, vanish := ⋯ }.converges All goals completed! 🐙
All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ Sum f = Sum fplus - Sum fminus
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)⊢ Sum f = Sum fplus - Sum fminus
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)⊢ Sum f = Sum fplus - Sum fminus
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)hminus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fminus)⊢ Sum f = Sum fplus - Sum fminus
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)hminus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fminus)⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus - Sum fminus)
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)hminus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fminus)n:ℤ⊢ (if n ≥ 0 then (f ∘ g) n.toNat else 0) =
({ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ } -
{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }).seq
n
f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)hminus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fminus)n:ℤh:n ≥ 0⊢ (f ∘ g) n.toNat =
({ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ } -
{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }).seq
nf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)hminus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fminus)n:ℤh:¬n ≥ 0⊢ 0 =
({ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ } -
{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }).seq
n f:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)hminus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fminus)n:ℤh:n ≥ 0⊢ (f ∘ g) n.toNat =
({ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ } -
{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }).seq
nf:ℕ × ℕ → ℝhf:AbsConvergent ffplus:ℕ × ℕ → ℝ := f ⊔ 0fminus:ℕ × ℕ → ℝ := -f ⊔ 0hfplus_nonneg:∀ (n m : ℕ), 0 ≤ fplus (n, m)hfminus_nonneg:∀ (n m : ℕ), 0 ≤ fminus (n, m)hdiff:f = fplus - fminushfplus_conv:AbsConvergent fplushfminus_conv:AbsConvergent fminushfplus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfplus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fplus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fplus)hfminus_conv':∀ (n : ℕ), { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.convergeshfminus_sum:{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦
{ m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ fminus (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum fminus)g:ℕ → ℕ × ℕhg:Bijective gright✝:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConvergesh1:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum f)hplus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fplus)hminus:{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fminus)n:ℤh:¬n ≥ 0⊢ 0 =
({ m := 0, seq := fun n ↦ if n ≥ 0 then (fplus ∘ g) n.toNat else 0, vanish := ⋯ } -
{ m := 0, seq := fun n ↦ if n ≥ 0 then (fminus ∘ g) n.toNat else 0, vanish := ⋯ }).seq
n All goals completed! 🐙Theorem 8.2.2, third version
theorem sum_of_sum_of_AbsConvergent' {f:ℕ × ℕ → ℝ} (hf:AbsConvergent f) :
(∀ m, ((fun n ↦ f (n, m)):Series).absConverges) ∧
(fun m ↦ ((fun n ↦ f (n, m)):Series).sum:Series).convergesTo (Sum f) := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ (∀ (m : ℕ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun m ↦ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fπ:ℕ × ℕ → ℕ × ℕ := fun p ↦ (p.2, p.1)⊢ (∀ (m : ℕ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun m ↦ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fπ:ℕ × ℕ → ℕ × ℕ := fun p ↦ (p.2, p.1)hπ:Bijective π⊢ (∀ (m : ℕ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun m ↦ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fπ:ℕ × ℕ → ℕ × ℕ := fun p ↦ (p.2, p.1)hπ:Bijective πg:ℕ → ℕ × ℕhg:Bijective ghconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ (∀ (m : ℕ), { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.absConverges) ∧
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun m ↦ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.convergesTo
(Sum f)
f:ℕ × ℕ → ℝhf:AbsConvergent fπ:ℕ × ℕ → ℕ × ℕ := fun p ↦ (p.2, p.1)hπ:Bijective πg:ℕ → ℕ × ℕhg:Bijective ghconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ Sum f = Sum (f ∘ π)f:ℕ × ℕ → ℝhf:AbsConvergent fπ:ℕ × ℕ → ℕ × ℕ := fun p ↦ (p.2, p.1)hπ:Bijective πg:ℕ → ℕ × ℕhg:Bijective ghconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ AbsConvergent (f ∘ π)
f:ℕ × ℕ → ℝhf:AbsConvergent fπ:ℕ × ℕ → ℕ × ℕ := fun p ↦ (p.2, p.1)hπ:Bijective πg:ℕ → ℕ × ℕhg:Bijective ghconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ Sum f = Sum (f ∘ π) All goals completed! 🐙
f:ℕ × ℕ → ℝhf:AbsConvergent fπ:ℕ × ℕ → ℕ × ℕ := fun p ↦ (p.2, p.1)hπ:Bijective πg:ℕ → ℕ × ℕhg:Bijective ghconv:{ m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ π) ∘ π ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges
All goals completed! 🐙Theorem 8.2.2, fourth version
theorem sum_comm {f:ℕ × ℕ → ℝ} (hf:AbsConvergent f) :
(fun n ↦ ((fun m ↦ f (n, m)):Series).sum:Series).sum = (fun m ↦ ((fun n ↦ f (n, m)):Series).sum:Series).sum := f:ℕ × ℕ → ℝhf:AbsConvergent f⊢ { m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun n ↦ { m := 0, seq := fun n_1 ↦ if n_1 ≥ 0 then (fun m ↦ f (n, m)) n_1.toNat else 0, vanish := ⋯ }.sum)
n.toNat
else 0,
vanish := ⋯ }.sum =
{ m := 0,
seq := fun n ↦
if n ≥ 0 then
(fun m ↦ { m := 0, seq := fun n ↦ if n ≥ 0 then (fun n ↦ f (n, m)) n.toNat else 0, vanish := ⋯ }.sum) n.toNat
else 0,
vanish := ⋯ }.sum
All goals completed! 🐙Lemma 8.2.3 / Exercise 8.2.1
theorem AbsConvergent.iff {X:Type} (hX:CountablyInfinite X) (f : X → ℝ) :
AbsConvergent f ↔ BddAbove ( (fun A ↦ ∑ x ∈ A, |f x|) '' .univ ) := X:TypehX:CountablyInfinite Xf:X → ℝ⊢ AbsConvergent f ↔ BddAbove ((fun A ↦ ∑ x ∈ A, |f x|) '' Set.univ)
All goals completed! 🐙abbrev AbsConvergent' {X:Type} (f: X → ℝ) : Prop := BddAbove ( (fun A ↦ ∑ x ∈ A, |f x|) '' .univ )theorem AbsConvergent'.of_finite {X:Type} [Finite X] (f:X → ℝ) : AbsConvergent' f := X:Typeinst✝:Finite Xf:X → ℝ⊢ AbsConvergent' f
X:Typeinst✝:Finite Xf:X → ℝx✝:Fintype X⊢ AbsConvergent' f
X:Typeinst✝:Finite Xf:X → ℝx✝:Fintype X⊢ ∃ x, ∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ x; X:Typeinst✝:Finite Xf:X → ℝx✝:Fintype X⊢ ∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ ∑ x, |f x|; X:Typeinst✝:Finite Xf:X → ℝx✝:Fintype XA:Finset X⊢ ∑ x ∈ A, |f x| ≤ ∑ x, |f x|; X:Typeinst✝:Finite Xf:X → ℝx✝:Fintype XA:Finset X⊢ ∀ (x : X), 0 ≤ |f x|; All goals completed! 🐙Not in textbook, but should have been included.
theorem AbsConvergent'.of_countable {X:Type} (hX:CountablyInfinite X) {f:X → ℝ} :
AbsConvergent' f ↔ AbsConvergent f := X:TypehX:CountablyInfinite Xf:X → ℝ⊢ AbsConvergent' f ↔ AbsConvergent f
X:TypehX:CountablyInfinite Xf:X → ℝ⊢ AbsConvergent' f → AbsConvergent fX:TypehX:CountablyInfinite Xf:X → ℝ⊢ AbsConvergent f → AbsConvergent' f
X:TypehX:CountablyInfinite Xf:X → ℝ⊢ AbsConvergent' f → AbsConvergent f X:TypehX:CountablyInfinite Xf:X → ℝhf:AbsConvergent' f⊢ AbsConvergent f; X:TypehX:CountablyInfinite Xf:X → ℝhf:∃ x, ∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ x⊢ AbsConvergent f; X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ L⊢ AbsConvergent f
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ AbsConvergent f; X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.absConverges
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.converges; X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ ∃ M, ∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N ≤ MX:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.nonneg
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ ∃ M, ∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N ≤ M X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ ∀ (N : ℤ), { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N ≤ L; X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℤ⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N ≤ L; X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℤhN:N ≥ 0⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N ≤ LX:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℤhN:¬N ≥ 0⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N ≤ L
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℤhN:N ≥ 0⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N ≤ L X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℕ⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial ↑N ≤ L
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℕg':ℕ ↪ X := { toFun := g, inj' := ⋯ }⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial ↑N ≤ L
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℕg':ℕ ↪ X := { toFun := g, inj' := ⋯ }⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial ↑N =
∑ x ∈ Finset.map g' (Icc 0 N), |f x|
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℕg':ℕ ↪ X := { toFun := g, inj' := ⋯ }⊢ ∑ x ∈ Icc 0 N, |f (g x)| = ∑ x ∈ Icc 0 N, |f (g' x)|; All goals completed! 🐙
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℤhN:¬N ≥ 0⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (f ∘ g) n.toNat else 0, vanish := ⋯ }.abs.partial N = ∑ x ∈ ∅, |f x|
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℤhN:¬N ≥ 0⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f (g n.toNat) else 0, vanish := ⋯ }.abs.partial N = 0; X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gN:ℤhN:¬N ≥ 0⊢ N < { m := 0, seq := fun n ↦ if 0 ≤ n then f (g n.toNat) else 0, vanish := ⋯ }.abs.m; All goals completed! 🐙
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective g⊢ ∀ (n : ℤ), 0 ≤ if 0 ≤ n then |if 0 ≤ n then f (g n.toNat) else 0| else 0
X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gn:ℤ⊢ 0 ≤ if 0 ≤ n then |if 0 ≤ n then f (g n.toNat) else 0| else 0; X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gn:ℤh:n ≥ 0⊢ 0 ≤ if 0 ≤ n then |if 0 ≤ n then f (g n.toNat) else 0| else 0X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gn:ℤh:¬n ≥ 0⊢ 0 ≤ if 0 ≤ n then |if 0 ≤ n then f (g n.toNat) else 0| else 0 X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gn:ℤh:n ≥ 0⊢ 0 ≤ if 0 ≤ n then |if 0 ≤ n then f (g n.toNat) else 0| else 0X:TypehX:CountablyInfinite Xf:X → ℝL:ℝhL:∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ Lg:ℕ → Xhg:Bijective gn:ℤh:¬n ≥ 0⊢ 0 ≤ if 0 ≤ n then |if 0 ≤ n then f (g n.toNat) else 0| else 0 All goals completed! 🐙
X:TypehX:CountablyInfinite Xf:X → ℝhf:AbsConvergent f⊢ AbsConvergent' f; rwa [AbsConvergent.iff hX fX:TypehX:CountablyInfinite Xf:X → ℝhf:BddAbove ((fun A ↦ ∑ x ∈ A, |f x|) '' Set.univ)⊢ AbsConvergent' f at hfLemma 8.2.5 / Exercise 8.2.2
theorem AbsConvergent'.countable_supp {X:Type} {f:X → ℝ} (hf: AbsConvergent' f) :
AtMostCountable { x | f x ≠ 0 } := X:Typef:X → ℝhf:AbsConvergent' f⊢ AtMostCountable ↑{x | f x ≠ 0}
All goals completed! 🐙
Compare with Mathlib's Summable.subtype
theorem AbsConvergent'.subtype {X:Type} {f:X → ℝ} (hf: AbsConvergent' f) (A: Set X) :
AbsConvergent' (fun x:A ↦ f x) := X:Typef:X → ℝhf:AbsConvergent' fA:Set X⊢ AbsConvergent' fun x ↦ f ↑x
X:Typef:X → ℝhf:AbsConvergent' fA:Set X⊢ (fun A_1 ↦ ∑ x ∈ A_1, |(fun x ↦ f ↑x) x|) '' Set.univ ⊆ (fun A ↦ ∑ x ∈ A, |f x|) '' Set.univ
intro z X:Typef:X → ℝhf:AbsConvergent' fA:Set Xz:ℝhz:z ∈ (fun A_1 ↦ ∑ x ∈ A_1, |(fun x ↦ f ↑x) x|) '' Set.univ⊢ z ∈ (fun A ↦ ∑ x ∈ A, |f x|) '' Set.univ; X:Typef:X → ℝhf:AbsConvergent' fA:Set Xz:ℝhz:∃ y, ∑ x ∈ y, |f ↑x| = z⊢ ∃ y, ∑ x ∈ y, |f x| = z; X:Typef:X → ℝhf:AbsConvergent' fA✝:Set Xz:ℝA:Finset ↑A✝hA:∑ x ∈ A, |f ↑x| = z⊢ ∃ y, ∑ x ∈ y, |f x| = z
X:Typef:X → ℝhf:AbsConvergent' fA✝:Set Xz:ℝA:Finset ↑A✝hA:∑ x ∈ A, |f ↑x| = z⊢ ∑ x ∈ Finset.map (Embedding.subtype fun x ↦ x ∈ A✝) A, |f x| = z; All goals completed! 🐙
A generalized sum. Note that this will give junk values if f is not AbsConvergent'.
noncomputable abbrev Sum' {X:Type} (f: X → ℝ) : ℝ := Sum (fun x : { x | f x ≠ 0 } ↦ f x)Not in textbook, but should have been included (the series laws are significantly harder to establish without this)
theorem Sum'.of_finsupp {X:Type} {f:X → ℝ} {A: Finset X} (h: ∀ x ∉ A, f x = 0) : Sum' f = ∑ x ∈ A, f x := X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0⊢ Sum' f = ∑ x ∈ A, f x
X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0⊢ (Sum fun x ↦ f ↑x) = ∑ x ∈ A, f x
X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0E:Set X := {x | f x ≠ 0}⊢ (Sum fun x ↦ f ↑x) = ∑ x ∈ A, f x
have hE : E ⊆ A := X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0⊢ Sum' f = ∑ x ∈ A, f x X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0E:Set X := {x | f x ≠ 0}a✝:X⊢ a✝ ∈ E → a✝ ∈ ↑A; X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0E:Set X := {x | f x ≠ 0}a✝:X⊢ ¬f a✝ = 0 → a✝ ∈ A; All goals completed! 🐙
X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0E:Set X := {x | f x ≠ 0}hE:E ⊆ ↑Ahfin:Finite ↑E⊢ (Sum fun x ↦ f ↑x) = ∑ x ∈ A, f x
X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0E:Set X := {x | f x ≠ 0}hE:E ⊆ ↑Ahfin:Finite ↑EE':Finset X := ⋯.toFinset⊢ (Sum fun x ↦ f ↑x) = ∑ x ∈ A, f x
X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0E:Set X := {x | f x ≠ 0}hE:E ⊆ ↑Ahfin:Finite ↑EE':Finset X := ⋯.toFinset⊢ ∑ a ∈ E', f a = ∑ x ∈ A, f x
replace hE : E' ⊆ A := X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0⊢ Sum' f = ∑ x ∈ A, f x All goals completed! 🐙
X:Typef:X → ℝA:Finset Xh:∀ x ∉ A, f x = 0E:Set X := {x | f x ≠ 0}hfin:Finite ↑EE':Finset X := ⋯.toFinsethE:E' ⊆ A⊢ ∀ x ∈ A, x ∉ E' → f x = 0; All goals completed! 🐙Not in textbook, but should have been included (the series laws are significantly harder to establish without this)
theorem Sum'.of_countable_supp {X:Type} {f:X → ℝ} {A: Set X} (hA: CountablyInfinite A)
(hfA : ∀ x ∉ A, f x = 0) (hconv: AbsConvergent' f):
AbsConvergent' (fun x:A ↦ f x) ∧ Sum' f = Sum (fun x:A ↦ f x) := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' f⊢ (AbsConvergent' fun x ↦ f ↑x) ∧ Sum' f = Sum fun x ↦ f ↑x
-- We can adapt the proof of `AbsConvergent'.of_countable` to establish absolute convergence on A.
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑x⊢ (AbsConvergent' fun x ↦ f ↑x) ∧ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑x⊢ (AbsConvergent fun x ↦ f ↑x) ∧ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑x⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}⊢ Sum' f = Sum fun x ↦ f ↑x
-- The main challenge here is to relate a sum on E with a sum on A. First, we show containment.
have hE : E ⊆ A := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' f⊢ (AbsConvergent' fun x ↦ f ↑x) ∧ Sum' f = Sum fun x ↦ f ↑x X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}a✝:X⊢ a✝ ∈ E → a✝ ∈ A; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}a✝:X⊢ ¬f a✝ = 0 → a✝ ∈ A; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}a✝:Xthis:f a✝ ≠ 0 ∧ a✝ ∉ A⊢ False; All goals completed! 🐙
-- Now, we map A back to the natural numbers, thus identifying E with a subset E' of ℕ.
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective g⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}⊢ Sum' f = Sum fun x ↦ f ↑x
set ι : E' → E := fun ⟨ n, hn ⟩ ↦ ⟨ g n, X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}x✝:↑E'n:ℕhn:n ∈ E'⊢ ↑(g n) ∈ E All goals completed! 🐙 ⟩
have hι: Bijective ι := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' f⊢ (AbsConvergent' fun x ↦ f ↑x) ∧ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩⊢ Injective ιX:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩⊢ Surjective ι
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩⊢ Injective ι intro ⟨ _, _ ⟩ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩val✝¹:ℕproperty✝¹:val✝¹ ∈ E'val✝:ℕproperty✝:val✝ ∈ E'⊢ ι ⟨val✝¹, property✝¹⟩ = ι ⟨val✝, property✝⟩ → ⟨val✝¹, property✝¹⟩ = ⟨val✝, property✝⟩ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩val✝¹:ℕproperty✝¹:val✝¹ ∈ E'val✝:ℕproperty✝:val✝ ∈ E'h:ι ⟨val✝¹, property✝¹⟩ = ι ⟨val✝, property✝⟩⊢ ⟨val✝¹, property✝¹⟩ = ⟨val✝, property✝⟩; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective gE':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩val✝¹:ℕproperty✝¹:val✝¹ ∈ E'val✝:ℕproperty✝:val✝ ∈ E'hsum:{ m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)h:g val✝¹ = g val✝⊢ val✝¹ = val✝; All goals completed! 🐙
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩⊢ Surjective ι X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩x:Xhx:x ∈ E⊢ ∃ a, ι a = ⟨x, hx⟩; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩x:Xhx:x ∈ En:ℕhn:g n = ⟨x, ⋯⟩⊢ ∃ a, ι a = ⟨x, hx⟩; use ⟨ n, X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩x:Xhx:x ∈ En:ℕhn:g n = ⟨x, ⋯⟩⊢ n ∈ E' All goals completed! 🐙 ⟩; All goals completed! 🐙
-- The cases of infinite and finite E' are handled separately.
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'⊢ Sum' f = Sum fun x ↦ f ↑xX:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'⊢ Sum' f = Sum fun x ↦ f ↑x -- use Nat.monotone_enum_of_infinite to enumerate E'
-- show the partial sums of E' are a subsequence of the partial sums of A
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono a⊢ Sum' f = Sum fun x ↦ f ↑x
have : atTop.Tendsto (Nat.cast ∘ Subtype.val ∘ a: ℕ → ℤ) atTop := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' f⊢ (AbsConvergent' fun x ↦ f ↑x) ∧ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono a⊢ StrictMono (Subtype.val ∘ a)
intro _ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono aa✝:ℕb✝:ℕ⊢ a✝ < b✝ → (Subtype.val ∘ a) a✝ < (Subtype.val ∘ a) b✝ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono aa✝:ℕb✝:ℕhnm:a✝ < b✝⊢ (Subtype.val ∘ a) a✝ < (Subtype.val ∘ a) b✝; All goals completed! 🐙
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono athis:Tendsto (Nat.cast ∘ Subtype.val ∘ a) atTop atTop⊢ Tendsto
({ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘
Nat.cast ∘ Subtype.val ∘ a)
atTop (nhds (Sum' f))
have hconv'' : AbsConvergent (fun x:E ↦ f x) := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' f⊢ (AbsConvergent' fun x ↦ f ↑x) ∧ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono athis:Tendsto (Nat.cast ∘ Subtype.val ∘ a) atTop atTop⊢ AbsConvergent' fun x ↦ f ↑xX:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono athis:Tendsto (Nat.cast ∘ Subtype.val ∘ a) atTop atTop⊢ CountablyInfinite ↑E
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono athis:Tendsto (Nat.cast ∘ Subtype.val ∘ a) atTop atTop⊢ AbsConvergent' fun x ↦ f ↑x All goals completed! 🐙
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono athis:Tendsto (Nat.cast ∘ Subtype.val ∘ a) atTop atTop⊢ EqualCard ↑E' ↑E; All goals completed! 🐙
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)⊢ Tendsto
({ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘
Nat.cast ∘ Subtype.val ∘ a)
atTop (nhds (Sum' f))
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘
Nat.cast ∘ Subtype.val ∘ a =
{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.partial ∘ Nat.cast; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ ({ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘
Nat.cast ∘ Subtype.val ∘ a)
N =
({ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.partial ∘ Nat.cast) N
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ ∑ x ∈ Icc 0 ↑(a N), f ↑(g x) = ∑ x ∈ Icc 0 N, f ↑(g ↑(a x))
calc
_ = ∑ x ∈ .image (Subtype.val ∘ a) (.Icc 0 N), f ↑(g x) := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ ∑ x ∈ Icc 0 ↑(a N), f ↑(g x) = ∑ x ∈ image (Subtype.val ∘ a) (Icc 0 N), f ↑(g x)
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ ∑ x ∈ image (Subtype.val ∘ a) (Icc 0 N), f ↑(g x) = ∑ x ∈ Icc 0 ↑(a N), f ↑(g x); X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ image (Subtype.val ∘ a) (Icc 0 N) ⊆ Icc 0 ↑(a N)X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ ∀ x ∈ Icc 0 ↑(a N), x ∉ image (Subtype.val ∘ a) (Icc 0 N) → f ↑(g x) = 0
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ image (Subtype.val ∘ a) (Icc 0 N) ⊆ Icc 0 ↑(a N) intro m X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕm:ℕhm:m ∈ image (Subtype.val ∘ a) (Icc 0 N)⊢ m ∈ Icc 0 ↑(a N); X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕm:ℕhm:∃ a_1 ≤ N, ↑(a a_1) = m⊢ m ≤ ↑(a N); X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕn:ℕhn:n ≤ N⊢ ↑(a n) ≤ ↑(a N)
All goals completed! 🐙
intro x X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx:ℕhx:x ∈ Icc 0 ↑(a N)⊢ x ∉ image (Subtype.val ∘ a) (Icc 0 N) → f ↑(g x) = 0 X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx:ℕhx:x ∈ Icc 0 ↑(a N)hx':x ∉ image (Subtype.val ∘ a) (Icc 0 N)⊢ f ↑(g x) = 0; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx:ℕhx:x ≤ ↑(a N)hx':∀ x_1 ≤ N, ¬↑(a x_1) = x⊢ f ↑(g x) = 0; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx:ℕhx:x ≤ ↑(a N)hx':f ↑(g x) ≠ 0⊢ ∃ x_1 ≤ N, ↑(a x_1) = x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx:ℕhx:x ≤ ↑(a N)hx':f ↑(g x) ≠ 0n:ℕhn:(ι ∘ a) n = ⟨↑(g x), hx'⟩⊢ ∃ x_1 ≤ N, ↑(a x_1) = x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx:ℕhx:x ≤ ↑(a N)hx':f ↑(g x) ≠ 0n:ℕhn:g ↑(a n) = g x⊢ ∃ x_1 ≤ N, ↑(a x_1) = x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx:ℕhx:x ≤ ↑(a N)hx':f ↑(g x) ≠ 0n:ℕhn:↑(a n) = x⊢ ∃ x_1 ≤ N, ↑(a x_1) = x; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕn:ℕhx:↑(a n) ≤ ↑(a N)hx':f ↑(g ↑(a n)) ≠ 0⊢ ∃ x ≤ N, ↑(a x) = ↑(a n)
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕn:ℕhx:↑(a n) ≤ ↑(a N)hx':f ↑(g ↑(a n)) ≠ 0⊢ n ≤ N ∧ ↑(a n) = ↑(a n); All goals completed! 🐙
_ = _ := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ ∑ x ∈ image (Subtype.val ∘ a) (Icc 0 N), f ↑(g x) = ∑ x ∈ Icc 0 N, f ↑(g ↑(a x))
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕ⊢ Set.InjOn (Subtype.val ∘ a) ↑(Icc 0 N)
intro _ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx₁✝:ℕa✝:x₁✝ ∈ ↑(Icc 0 N)⊢ ∀ ⦃x₂ : ℕ⦄, x₂ ∈ ↑(Icc 0 N) → (Subtype.val ∘ a) x₁✝ = (Subtype.val ∘ a) x₂ → x₁✝ = x₂ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx₁✝:ℕa✝:x₁✝ ∈ ↑(Icc 0 N)x₂✝:ℕ⊢ x₂✝ ∈ ↑(Icc 0 N) → (Subtype.val ∘ a) x₁✝ = (Subtype.val ∘ a) x₂✝ → x₁✝ = x₂✝ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx₁✝:ℕa✝¹:x₁✝ ∈ ↑(Icc 0 N)x₂✝:ℕa✝:x₂✝ ∈ ↑(Icc 0 N)⊢ (Subtype.val ∘ a) x₁✝ = (Subtype.val ∘ a) x₂✝ → x₁✝ = x₂✝ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx₁✝:ℕa✝¹:x₁✝ ∈ ↑(Icc 0 N)x₂✝:ℕa✝:x₂✝ ∈ ↑(Icc 0 N)h:(Subtype.val ∘ a) x₁✝ = (Subtype.val ∘ a) x₂✝⊢ x₁✝ = x₂✝; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':CountablyInfinite ↑E'hinf:Infinite ↑E' := ···a:ℕ → ↑E'ha_bij:Bijective aha_mono:StrictMono ahconv'':AbsConvergent fun x ↦ f ↑xthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ ι ∘ a) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum fun x ↦ f ↑x)N:ℕx₁✝:ℕa✝¹:x₁✝ ∈ ↑(Icc 0 N)x₂✝:ℕa✝:x₂✝ ∈ ↑(Icc 0 N)h:a x₁✝ = a x₂✝⊢ x₁✝ = x₂✝; All goals completed! 🐙
-- When E' is finite, we show that all sufficiently large partial sums of A are equal to
-- the sum of E'.
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑E⊢ Sum' f = Sum fun x ↦ f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑E⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum' f)
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑E⊢ Tendsto { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial atTop (nhds (∑ x, f ↑x))
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑E⊢ ∀ᶠ (x' : ℤ) in atTop, { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial x' = ∑ x, f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EhE'bound:BddAbove E'⊢ ∀ᶠ (x' : ℤ) in atTop, { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial x' = ∑ x, f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EhE'bound:∃ x, ∀ y ∈ E', y ≤ x⊢ ∀ᶠ (x' : ℤ) in atTop, { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial x' = ∑ x, f ↑x; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ N⊢ ∀ᶠ (x' : ℤ) in atTop, { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial x' = ∑ x, f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ N⊢ ∃ a, ∀ b ≥ a, { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial b = ∑ x, f ↑x
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ N⊢ ∀ b ≥ ↑N, { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial b = ∑ x, f ↑x; intro N' X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℤhN':N' ≥ ↑N⊢ { m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.partial N' = ∑ x, f ↑x
lift N' to ℕ using (LE.le.trans (X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℤhN':N' ≥ ↑N⊢ 0 ≤ ↑N All goals completed! 🐙) hN')
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ ∑ x ∈ Icc 0 N', f ↑(g x) = ∑ x, f ↑x
calc
_ = ∑ n ∈ E', f (g n) := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ ∑ x ∈ Icc 0 N', f ↑(g x) = ∑ n ∈ E'.toFinset, f ↑(g n)
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ ∑ n ∈ E'.toFinset, f ↑(g n) = ∑ x ∈ Icc 0 N', f ↑(g x); X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ E'.toFinset ⊆ Icc 0 N'X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ ∀ x ∈ Icc 0 N', x ∉ E'.toFinset → f ↑(g x) = 0
X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ E'.toFinset ⊆ Icc 0 N' intro x X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'x:ℕhx:x ∈ E'.toFinset⊢ x ∈ Icc 0 N'; X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective gE':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'x:ℕhsum:{ m := 0, seq := fun n ↦ if 0 ≤ n then f ↑(g n.toNat) else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)hx:x ∈ E'⊢ x ≤ N'; All goals completed! 🐙
intro _ X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'x✝:ℕa✝:x✝ ∈ Icc 0 N'⊢ x✝ ∉ E'.toFinset → f ↑(g x✝) = 0 X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'x✝:ℕa✝:x✝ ∈ Icc 0 N'hx':x✝ ∉ E'.toFinset⊢ f ↑(g x✝) = 0; All goals completed! 🐙
_ = ∑ n:E', f (g n) := X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ ∑ n ∈ E'.toFinset, f ↑(g n) = ∑ n, f ↑(g ↑n) All goals completed! 🐙
_ = ∑ n, f (ι n) := sum_congr rfl (X:Typef:X → ℝA:Set XhA:CountablyInfinite ↑AhfA:∀ x ∉ A, f x = 0hconv:AbsConvergent' fhconv':AbsConvergent fun x ↦ f ↑xE:Set X := {x | f x ≠ 0}hE:E ⊆ Ag:ℕ → ↑Ahg:Bijective ghsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((fun x ↦ f ↑x) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo (Sum fun x ↦ f ↑x)E':Set ℕ := {n | ↑(g n) ∈ E}ι:↑E' → ↑E :=
fun x ↦
match x with
| ⟨n, hn⟩ => ⟨↑(g n), ⋯⟩hι:Bijective ιhE':Finite ↑E'hEfin:Finite ↑E := ···hE'fintype:Fintype ↑E' := Fintype.ofFinite ↑E'hEfintype:Fintype ↑E := Fintype.ofFinite ↑EN:ℕhN:∀ y ∈ E', y ≤ NN':ℕhN':N ≤ N'⊢ ∀ x ∈ univ, f ↑(g ↑x) = f ↑(ι x) All goals completed! 🐙)
_ = _ := hι.sum_comp (g := fun x ↦ f x)
Connection with Mathlib's Summable property. Some version of this might be suitable
for Mathlib?
theorem AbsConvergent'.iff_Summable {X:Type} (f:X → ℝ) : AbsConvergent' f ↔ Summable f := X:Typef:X → ℝ⊢ AbsConvergent' f ↔ Summable f
X:Typef:X → ℝ⊢ BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|) ↔ Summable fun x ↦ |(|f x|)|
X:Typef:X → ℝ⊢ BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|) ↔
∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε
classical
X:Typef:X → ℝ⊢ BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|) →
∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εX:Typef:X → ℝ⊢ (∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε) →
BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|)
X:Typef:X → ℝ⊢ BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|) →
∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε intro h X:Typef:X → ℝh:BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|)ε:ℝ⊢ 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε X:Typef:X → ℝh:BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|)ε:ℝhε:0 < ε⊢ ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε
X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove s⊢ ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε
have hnon : s.Nonempty := X:Typef:X → ℝ⊢ AbsConvergent' f ↔ Summable f X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove s⊢ (Set.range fun A ↦ ∑ x ∈ A, |f x|).Nonempty; X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove s⊢ (fun A ↦ ∑ x ∈ A, |f x|) ∅ = 0; All goals completed! 🐙
have : (sSup s)-ε < sSup s := X:Typef:X → ℝ⊢ AbsConvergent' f ↔ Summable f All goals completed! 🐙
X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove shnon:s.Nonemptythis:∃ a, sSup (Set.range fun A ↦ ∑ x ∈ A, |f x|) - ε < ∑ x ∈ a, |f x|⊢ ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε; X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove shnon:s.NonemptyS:Finset XhS:sSup (Set.range fun A ↦ ∑ x ∈ A, |f x|) - ε < ∑ x ∈ S, |f x|⊢ ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε
X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove shnon:s.NonemptyS:Finset XhS:sSup (Set.range fun A ↦ ∑ x ∈ A, |f x|) - ε < ∑ x ∈ S, |f x|⊢ ∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < ε; intro T X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove shnon:s.NonemptyS:Finset XhS:sSup (Set.range fun A ↦ ∑ x ∈ A, |f x|) - ε < ∑ x ∈ S, |f x|T:Finset XhT:Disjoint T S⊢ |∑ x ∈ T, |f x|| < ε
X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove shnon:s.NonemptyS:Finset XhS:sSup (Set.range fun A ↦ ∑ x ∈ A, |f x|) - ε < ∑ x ∈ S, |f x|T:Finset XhT:Disjoint T S⊢ ∑ x ∈ T, |f x| < ε
have : ∑ x ∈ T, |f x| + ∑ x ∈ S, |f x| ≤ sSup s := X:Typef:X → ℝ⊢ AbsConvergent' f ↔ Summable f
X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove shnon:s.NonemptyS:Finset XhS:sSup (Set.range fun A ↦ ∑ x ∈ A, |f x|) - ε < ∑ x ∈ S, |f x|T:Finset XhT:Disjoint T S⊢ ∑ x ∈ T, |f x| + ∑ x ∈ S, |f x| ∈ s
X:Typef:X → ℝε:ℝhε:0 < εs:Set ℝ := Set.range fun A ↦ ∑ x ∈ A, |f x|h:BddAbove shnon:s.NonemptyS:Finset XhS:sSup (Set.range fun A ↦ ∑ x ∈ A, |f x|) - ε < ∑ x ∈ S, |f x|T:Finset XhT:Disjoint T S⊢ ∃ y, ∑ x ∈ y, |f x| = ∑ x ∈ T, |f x| + ∑ x ∈ S, |f x|; All goals completed! 🐙
All goals completed! 🐙
X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε⊢ BddAbove (Set.range fun A ↦ ∑ x ∈ A, |f x|); choose S hS using h 1 (X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < ε⊢ 0 < 1 All goals completed! 🐙)
X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1⊢ ∃ x, ∀ y ∈ Set.range fun A ↦ ∑ x ∈ A, |f x|, y ≤ x
X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1⊢ ∀ y ∈ Set.range fun A ↦ ∑ x ∈ A, |f x|, y ≤ ∑ x ∈ S, |f x| + 1; X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1⊢ ∀ (a : Finset X), ∑ x ∈ a, |f x| ≤ ∑ x ∈ S, |f x| + 1; X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1T:Finset X⊢ ∑ x ∈ T, |f x| ≤ ∑ x ∈ S, |f x| + 1
calc
_ = ∑ x ∈ (T ∩ S), |f x| + ∑ x ∈ (T \ S), |f x| := (sum_inter_add_sum_diff _ _ _).symm
_ ≤ _ := X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1T:Finset X⊢ ∑ x ∈ T ∩ S, |f x| + ∑ x ∈ T \ S, |f x| ≤ ∑ x ∈ S, |f x| + 1
X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1T:Finset X⊢ T ∩ S ⊆ SX:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1T:Finset X⊢ ∑ x ∈ T \ S, |f x| ≤ 1
X:Typef:X → ℝh:∀ (ε : ℝ), 0 < ε → ∃ s, ∀ (t : Finset X), Disjoint t s → |∑ x ∈ t, |f x|| < εS:Finset XhS:∀ (t : Finset X), Disjoint t S → |∑ x ∈ t, |f x|| < 1T:Finset X⊢ T ∩ S ⊆ S All goals completed! 🐙
All goals completed! 🐙Maybe suitable for porting to Mathlib?
theorem Filter.Eventually.int_natCast_atTop (p: ℤ → Prop) :
(∀ᶠ n in .atTop, p n) ↔ ∀ᶠ n:ℕ in .atTop, p ↑n := p:ℤ → Prop⊢ (∀ᶠ (n : ℤ) in atTop, p n) ↔ ∀ᶠ (n : ℕ) in atTop, p ↑n
p:ℤ → Prop⊢ (∀ᶠ (n : ℕ) in atTop, p ↑n) → ∀ᶠ (n : ℤ) in atTop, p n
p:ℤ → Prop⊢ ∀ (x : ℕ), (∀ (b : ℕ), x ≤ b → p ↑b) → ∃ a, ∀ (b : ℤ), a ≤ b → p b
intro N p:ℤ → PropN:ℕhN:∀ (b : ℕ), N ≤ b → p ↑b⊢ ∃ a, ∀ (b : ℤ), a ≤ b → p b; p:ℤ → PropN:ℕhN:∀ (b : ℕ), N ≤ b → p ↑b⊢ ∀ (b : ℤ), ↑N ≤ b → p b; intro n p:ℤ → PropN:ℕhN:∀ (b : ℕ), N ≤ b → p ↑bn:ℤhn:↑N ≤ n⊢ p n
lift n to ℕ using (p:ℤ → PropN:ℕhN:∀ (b : ℕ), N ≤ b → p ↑bn:ℤhn:↑N ≤ n⊢ 0 ≤ n All goals completed! 🐙)
p:ℤ → PropN:ℕhN:∀ (b : ℕ), N ≤ b → p ↑bn:ℕhn:N ≤ n⊢ p ↑n; All goals completed! 🐙theorem Filter.Tendsto.int_natCast_atTop {R:Type} (f: ℤ → R) (l: Filter R) :
atTop.Tendsto f l ↔ atTop.Tendsto (f ∘ Nat.cast) l := R:Typef:ℤ → Rl:Filter R⊢ Tendsto f atTop l ↔ Tendsto (f ∘ Nat.cast) atTop l
R:Typef:ℤ → Rl:Filter R⊢ (∀ ⦃p : R → Prop⦄, (∀ᶠ (y : R) in l, p y) → ∃ a, ∀ (b : ℤ), a ≤ b → p (f b)) ↔
∀ ⦃p : R → Prop⦄, (∀ᶠ (y : R) in l, p y) → ∃ a, ∀ (b : ℕ), a ≤ b → p (f ↑b)
R:Typef:ℤ → Rl:Filter Rp:R → Proph:∀ᶠ (y : R) in l, p y⊢ (∃ a, ∀ (b : ℤ), a ≤ b → p (f b)) ↔ ∃ a, ∀ (b : ℕ), a ≤ b → p (f ↑b)
R:Typef:ℤ → Rl:Filter Rp:R → Proph:∀ᶠ (y : R) in l, p y⊢ (∀ᶠ (x : ℤ) in atTop, p (f x)) ↔ ∀ᶠ (x : ℕ) in atTop, p (f ↑x)
All goals completed! 🐙
Connection with Mathlib's tsum (or Σ') operation
theorem Sum'.eq_tsum {X:Type} (f:X → ℝ) (h: AbsConvergent' f) :
Sum' f = ∑' x, f x := X:Typef:X → ℝh:AbsConvergent' f⊢ Sum' f = ∑' (x : X), f x
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}⊢ Sum' f = ∑' (x : X), f x
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}⊢ Sum' f = ∑' (x : X), f xX:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:Finite ↑{x | f x ≠ 0}⊢ Sum' f = ∑' (x : X), f x
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}⊢ Sum' f = ∑' (x : X), f x X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}⊢ (Sum fun x ↦ f ↑x) = ∑' (x : X), f x
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective g⊢ (Sum fun x ↦ f ↑x) = ∑' (x : X), f x
have : ((f ∘ Subtype.val) ∘ g:Series).absConverges := X:Typef:X → ℝh:AbsConvergent' f⊢ Sum' f = ∑' (x : X), f x
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective g⊢ AbsConvergent (f ∘ Subtype.val)
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective g⊢ AbsConvergent' (f ∘ Subtype.val)
All goals completed! 🐙
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum (f ∘ Subtype.val))⊢ (Sum fun x ↦ f ↑x) = ∑' (x : X), f x
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum (f ∘ Subtype.val))⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo
(∑' (x : X), f x)
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum (f ∘ Subtype.val))⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo
(∑' (x : X), f x) replace : ∑' x, f x = ∑' n, f (g n) := calc
_ = ∑' x:E, f x := X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:{ m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo
(Sum (f ∘ Subtype.val))⊢ ∑' (x : X), f x = ∑' (x : ↑E), f ↑x
All goals completed! 🐙
_ = _ := (Equiv.tsum_eq (Equiv.ofBijective _ hg) _).symm
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.convergesTo
(∑' (n : ℕ), f ↑(g n))
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)⊢ Tendsto { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.partial atTop
(nhds (∑' (n : ℕ), f ↑(g n))); X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)⊢ Tendsto
({ m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘ Nat.cast)
atTop (nhds (∑' (n : ℕ), f ↑(g n)))
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘ Nat.cast =
(fun n ↦ ∑ i ∈ range n, f ↑(g i)) ∘ fun a ↦ a + 1X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)⊢ Summable fun n ↦ f ↑(g n)
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘ Nat.cast =
(fun n ↦ ∑ i ∈ range n, f ↑(g i)) ∘ fun a ↦ a + 1 X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)N:ℕ⊢ ({ m := 0, seq := fun n ↦ if n ≥ 0 then ((f ∘ Subtype.val) ∘ g) n.toNat else 0, vanish := ⋯ }.partial ∘ Nat.cast) N =
((fun n ↦ ∑ i ∈ range n, f ↑(g i)) ∘ fun a ↦ a + 1) N; All goals completed! 🐙
X:Typef:X → ℝh:Summable fE:Set X := {x | f x ≠ 0}hE:CountablyInfinite ↑{x | f x ≠ 0}g:ℕ → ↑{x | f x ≠ 0}hg:Bijective gthis:∑' (x : X), f x = ∑' (n : ℕ), f ↑(g n)⊢ Summable fun n ↦ f ↑(g n)
All goals completed! 🐙
X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:Finite ↑{x | f x ≠ 0}⊢ ∑ x ∈ ⋯.toFinset, f x = ∑' (x : X), f xX:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:Finite ↑{x | f x ≠ 0}⊢ ∀ x ∉ ⋯.toFinset, f x = 0; X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:Finite ↑{x | f x ≠ 0}⊢ ∑' (x : X), f x = ∑ x ∈ ⋯.toFinset, f xX:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:Finite ↑{x | f x ≠ 0}⊢ ∀ x ∉ ⋯.toFinset, f x = 0; X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:Finite ↑{x | f x ≠ 0}⊢ ∀ b ∉ ⋯.toFinset, f b = 0X:Typef:X → ℝh:AbsConvergent' fE:Set X := {x | f x ≠ 0}hE:Finite ↑{x | f x ≠ 0}⊢ ∀ x ∉ ⋯.toFinset, f x = 0
all_goals All goals completed! 🐙Proposition 8.2.6 (a) (Absolutely convergent series laws) / Exercise 8.2.3
theorem Sum'.add {X:Type} {f g:X → ℝ} (hf: AbsConvergent' f) (hg: AbsConvergent' g) :
AbsConvergent' (f+g) ∧ Sum' (f + g) = Sum' f + Sum' g := X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ AbsConvergent' (f + g) ∧ Sum' (f + g) = Sum' f + Sum' g
All goals completed! 🐙Proposition 8.2.6 (b) (Absolutely convergent series laws) / Exercise 8.2.3
theorem Sum'.smul {X:Type} {f:X → ℝ} (hf: AbsConvergent' f) (c: ℝ) :
AbsConvergent' (c • f) ∧ Sum' (c • f) = c * Sum' f := X:Typef:X → ℝhf:AbsConvergent' fc:ℝ⊢ AbsConvergent' (c • f) ∧ Sum' (c • f) = c * Sum' f
All goals completed! 🐙This law is not explicitly stated in Proposition 8.2.6, but follows easily from parts (a) and (b).
theorem Sum'.sub {X:Type} {f g:X → ℝ} (hf: AbsConvergent' f) (hg: AbsConvergent' g) :
AbsConvergent' (f-g) ∧ Sum' (f - g) = Sum' f - Sum' g := X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ AbsConvergent' (f - g) ∧ Sum' (f - g) = Sum' f - Sum' g
X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ f - g = f + -1 • gX:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ Sum' (f - g) = Sum' (f + -1 • g)X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ Sum' f - Sum' g = Sum' f + Sum' (-1 • g)
X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ f - g = f + -1 • g X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ f - g = f + -g; All goals completed! 🐙
X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ Sum' (f - g) = Sum' (f + -1 • g) X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ f - g = f + -1 • g; X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ f - g = f + -g; All goals completed! 🐙
X:Typef:X → ℝg:X → ℝhf:AbsConvergent' fhg:AbsConvergent' g⊢ Sum' f - Sum' g = Sum' f + -1 * Sum' g; All goals completed! 🐙
Proposition 8.2.6 (c) (Absolutely convergent series laws) / Exercise 8.2.3. The first
part of this proposition has been moved to AbsConvergent'.subtype.
theorem Sum'.of_disjoint_union {X:Type} {f:X → ℝ} (hf: AbsConvergent' f) {X₁ X₂ : Set X} (hdisj: Disjoint X₁ X₂):
Sum' (fun x: (X₁ ∪ X₂: Set X) ↦ f x) = Sum' (fun x : X₁ ↦ f x) + Sum' (fun x : X₂ ↦ f x) := X:Typef:X → ℝhf:AbsConvergent' fX₁:Set XX₂:Set Xhdisj:Disjoint X₁ X₂⊢ (Sum' fun x ↦ f ↑x) = (Sum' fun x ↦ f ↑x) + Sum' fun x ↦ f ↑x
All goals completed! 🐙
This technical claim, the analogue of tsum_univ, is required due to the way Mathlib handles
sets.
theorem Sum'.of_univ {X:Type} {f:X → ℝ} (hf: AbsConvergent' f) :
Sum' (fun x: (.univ : Set X) ↦ f x) = Sum' f := X:Typef:X → ℝhf:AbsConvergent' f⊢ (Sum' fun x ↦ f ↑x) = Sum' f
All goals completed! 🐙theorem Sum'.of_comp {X Y:Type} {f:X → ℝ} (hf: AbsConvergent' f) {φ: Y → X}
(hφ: Function.Bijective φ) :
AbsConvergent' (f ∘ φ) ∧ Sum' f = Sum' (f ∘ φ) := X:TypeY:Typef:X → ℝhf:AbsConvergent' fφ:Y → Xhφ:Bijective φ⊢ AbsConvergent' (f ∘ φ) ∧ Sum' f = Sum' (f ∘ φ)
All goals completed! 🐙Lemma 8.2.7 / Exercise 8.2.4
theorem divergent_parts_of_divergent {a: ℕ → ℝ} (ha: (a:Series).converges)
(ha': ¬ (a:Series).absConverges) :
¬ AbsConvergent (fun n : {n | a n ≥ 0} ↦ a n) ∧ ¬ AbsConvergent (fun n : {n | a n < 0} ↦ a n)
:= a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConverges⊢ (¬AbsConvergent fun n ↦ a ↑n) ∧ ¬AbsConvergent fun n ↦ a ↑n
All goals completed! 🐙Theorem 8.2.8 (Riemann rearrangement theorem) / Exercise 8.2.5
theorem permute_convergesTo_of_divergent {a: ℕ → ℝ} (ha: (a:Series).converges)
(ha': ¬ (a:Series).absConverges) (L:ℝ) :
∃ f : ℕ → ℕ, Bijective f ∧ (a ∘ f:Series).convergesTo L
:= a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
-- This proof is written to follow the structure of the original text.
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝh1:¬AbsConvergent fun n ↦ a ↑nh2:¬AbsConvergent fun n ↦ a ↑n⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝh2:¬AbsConvergent fun n ↦ a ↑nA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑n⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑n⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
have hdisj : Disjoint A_plus A_minus := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑n⊢ A_plus ∩ A_minus = ∅; a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nx✝:ℕ⊢ x✝ ∈ A_plus ∩ A_minus ↔ x✝ ∈ ∅; All goals completed! 🐙
have hunion : A_plus ∪ A_minus = .univ := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minusx✝:ℕ⊢ x✝ ∈ A_plus ∪ A_minus ↔ x✝ ∈ Set.univ; a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minusx✝:ℕ⊢ 0 ≤ a x✝ ∨ a x✝ < 0; All goals completed! 🐙
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plus⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minus⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plus⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minus⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
let F : (n : ℕ) → ((m : ℕ) → m < n → ℕ) → ℕ :=
fun j n' ↦ if ∑ i:Fin j, a (n' i (a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minusj:ℕn':(m : ℕ) → m < j → ℕi:Fin j⊢ ↑i < j All goals completed! 🐙)) < L then
Nat.min { n ∈ A_plus | ∀ i:Fin j, n ≠ n' i (a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minusj:ℕn':(m : ℕ) → m < j → ℕn:ℕi:Fin j⊢ ↑i < j All goals completed! 🐙) }
else
Nat.min { n ∈ A_minus | ∀ i:Fin j, n ≠ n' i (a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minusj:ℕn':(m : ℕ) → m < j → ℕn:ℕi:Fin j⊢ ↑i < j All goals completed! 🐙) }
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minusF:(n : ℕ) → ((m : ℕ) → m < n → ℕ) → ℕ :=
fun j n' ↦
if ∑ i, a (n' ↑i ⋯) < L then Nat.min {n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}
else Nat.min {n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}n':ℕ → ℕ := fun t ↦ Nat.strongRec F t⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minusF:(n : ℕ) → ((m : ℕ) → m < n → ℕ) → ℕ :=
fun j n' ↦
if ∑ i, a (n' ↑i ⋯) < L then Nat.min {n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}
else Nat.min {n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}n':ℕ → ℕ := fun t ↦ Nat.strongRec F thn':∀ (j : ℕ),
n' j =
if ∑ i, a (n' ↑i) < L then Nat.min {n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i}
else Nat.min {n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i}⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L
have hn'_plus_inf (j:ℕ) : Infinite { n ∈ A_plus | ∀ i:Fin j, n ≠ n' i } := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
have hn'_minus_inf (j:ℕ) : Infinite { n ∈ A_minus | ∀ i:Fin j, n ≠ n' i } := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
have hn'_inj : Injective n' := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
have h_case_I : Infinite { j | ∑ i:Fin j, a (n' i) < L } := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
have h_case_II : Infinite { j | ∑ i:Fin j, a (n' i) ≥ L } := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
have hn'_surj : Surjective n' := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
have hconv : atTop.Tendsto (a ∘ n') (nhds 0) := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
have hsum : (a ∘ n':Series).convergesTo L := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝ⊢ ∃ f, Bijective f ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.convergesTo L All goals completed! 🐙
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minusF:(n : ℕ) → ((m : ℕ) → m < n → ℕ) → ℕ :=
fun j n' ↦
if ∑ i, a (n' ↑i ⋯) < L then Nat.min {n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}
else Nat.min {n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}n':ℕ → ℕ := fun t ↦ Nat.strongRec F thn':∀ (j : ℕ),
n' j =
if ∑ i, a (n' ↑i) < L then Nat.min {n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i}
else Nat.min {n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i}hn'_plus_inf:∀ (j : ℕ), Infinite ↑{n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i}hn'_minus_inf:∀ (j : ℕ), Infinite ↑{n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i}hn'_inj:Injective n'h_case_I:Infinite ↑{j | ∑ i, a (n' ↑i) < L}h_case_II:Infinite ↑{j | ∑ i, a (n' ↑i) ≥ L}hn'_surj:Surjective n'hconv:Tendsto (a ∘ n') atTop (nhds 0)hsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ n') n.toNat else 0, vanish := ⋯ }.convergesTo L⊢ Bijective n' ∧ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ n') n.toNat else 0, vanish := ⋯ }.convergesTo L
a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConvergesL:ℝA_plus:Set ℕ := {n | a n ≥ 0}h1:¬AbsConvergent fun n ↦ a ↑nA_minus:Set ℕ := {n | a n < 0}h2:¬AbsConvergent fun n ↦ a ↑nhdisj:Disjoint A_plus A_minushunion:A_plus ∪ A_minus = Set.univhA_plus_inf:Infinite ↑A_plushA_minus_inf:Infinite ↑A_minusa_plus:ℕ → ↑A_plusha_plus_bij:Bijective a_plusha_plus_mono:StrictMono a_plusa_minus:ℕ → ↑A_minusha_minus_bij:Bijective a_minusha_minus_mono:StrictMono a_minusF:(n : ℕ) → ((m : ℕ) → m < n → ℕ) → ℕ :=
fun j n' ↦
if ∑ i, a (n' ↑i ⋯) < L then Nat.min {n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}
else Nat.min {n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i ⋯}n':ℕ → ℕ := fun t ↦ Nat.strongRec F thn':∀ (j : ℕ),
n' j =
if ∑ i, a (n' ↑i) < L then Nat.min {n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i}
else Nat.min {n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i}hn'_plus_inf:∀ (j : ℕ), Infinite ↑{n | n ∈ A_plus ∧ ∀ (i : Fin j), n ≠ n' ↑i}hn'_minus_inf:∀ (j : ℕ), Infinite ↑{n | n ∈ A_minus ∧ ∀ (i : Fin j), n ≠ n' ↑i}hn'_inj:Injective n'h_case_I:Infinite ↑{j | ∑ i, a (n' ↑i) < L}h_case_II:Infinite ↑{j | ∑ i, a (n' ↑i) ≥ L}hn'_surj:Surjective n'hconv:Tendsto (a ∘ n') atTop (nhds 0)hsum:{ m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ n') n.toNat else 0, vanish := ⋯ }.convergesTo L⊢ { m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ n') n.toNat else 0, vanish := ⋯ }.convergesTo L; All goals completed! 🐙Exercise 8.2.6
theorem permute_diverges_of_divergent {a: ℕ → ℝ} (ha: (a:Series).converges)
(ha': ¬ (a:Series).absConverges) :
∃ f : ℕ → ℕ, Bijective f ∧ atTop.Tendsto (fun N ↦ ((a ∘ f:Series).partial N : EReal)) (nhds ⊤) := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConverges⊢ ∃ f,
Bijective f ∧
Tendsto (fun N ↦ ↑({ m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.partial N)) atTop
(nhds ⊤)
All goals completed! 🐙theorem permute_diverges_of_divergent' {a: ℕ → ℝ} (ha: (a:Series).converges)
(ha': ¬ (a:Series).absConverges) :
∃ f : ℕ → ℕ, Bijective f ∧ atTop.Tendsto (fun N ↦ ((a ∘ f:Series).partial N : EReal)) (nhds ⊥) := a:ℕ → ℝha:{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.convergesha':¬{ m := 0, seq := fun n ↦ if n ≥ 0 then a n.toNat else 0, vanish := ⋯ }.absConverges⊢ ∃ f,
Bijective f ∧
Tendsto (fun N ↦ ↑({ m := 0, seq := fun n ↦ if n ≥ 0 then (a ∘ f) n.toNat else 0, vanish := ⋯ }.partial N)) atTop
(nhds ⊥)
All goals completed! 🐙end Chapter8