# mathlibdocumentation

topology.algebra.infinite_sum

# Infinite sum over a topological monoid #

This sum is known as unconditionally convergent, as it sums to the same value under all possible permutations. For Euclidean spaces (finite dimensional Banach spaces) this is equivalent to absolute convergence.

Note: There are summable sequences which are not unconditionally convergent! The other way holds generally, see `has_sum.tendsto_sum_nat`.

## References #

• Bourbaki: General Topology (1995), Chapter 3 §5 (Infinite sums in commutative groups)
def has_sum {α : Type u_1} {β : Type u_2} (f : β α) (a : α) :
Prop

Infinite sum on a topological monoid

The `at_top` filter on `finset β` is the limit of all finite sets towards the entire type. So we sum up bigger and bigger sets. This sum operation is invariant under reordering. In particular, the function `ℕ → ℝ` sending `n` to `(-1)^n / (n+1)` does not have a sum for this definition, but a series which is absolutely convergent will have the correct sum.

This is based on Mario Carneiro's infinite sum `df-tsms` in Metamath.

For the definition or many statements, `α` does not need to be a topological monoid. We only add this assumption later, for the lemmas where it is relevant.

Equations
def summable {α : Type u_1} {β : Type u_2} (f : β α) :
Prop

`summable f` means that `f` has some (infinite) sum. Use `tsum` to get the value.

Equations
@[irreducible]
noncomputable def tsum {α : Type u_1} {β : Type u_2} (f : β α) :
α

`∑' i, f i` is the sum of `f` it exists, or 0 otherwise

Equations
theorem summable.has_sum {α : Type u_1} {β : Type u_2} {f : β α} (ha : summable f) :
(∑' (b : β), f b)
theorem has_sum.summable {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (h : a) :
theorem has_sum_zero {α : Type u_1} {β : Type u_2}  :
has_sum (λ (b : β), 0) 0

Constant zero function has sum `0`

theorem has_sum_empty {α : Type u_1} {β : Type u_2} {f : β α} [is_empty β] :
0
theorem summable_zero {α : Type u_1} {β : Type u_2}  :
summable (λ (b : β), 0)
theorem summable_empty {α : Type u_1} {β : Type u_2} {f : β α} [is_empty β] :
theorem tsum_eq_zero_of_not_summable {α : Type u_1} {β : Type u_2} {f : β α} (h : ¬) :
∑' (b : β), f b = 0
theorem summable_congr {α : Type u_1} {β : Type u_2} {f g : β α} (hfg : (b : β), f b = g b) :
theorem summable.congr {α : Type u_1} {β : Type u_2} {f g : β α} (hf : summable f) (hfg : (b : β), f b = g b) :
theorem has_sum.has_sum_of_sum_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} {g : γ α} (h_eq : (u : finset γ), (v : finset β), (v' : finset β), v v' ( (u' : finset γ), u u' u'.sum (λ (x : γ), g x) = v'.sum (λ (b : β), f b))) (hf : a) :
a
theorem has_sum_iff_has_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} {g : γ α} (h₁ : (u : finset γ), (v : finset β), (v' : finset β), v v' ( (u' : finset γ), u u' u'.sum (λ (x : γ), g x) = v'.sum (λ (b : β), f b))) (h₂ : (v : finset β), (u : finset γ), (u' : finset γ), u u' ( (v' : finset β), v v' v'.sum (λ (b : β), f b) = u'.sum (λ (x : γ), g x))) :
a a
theorem function.injective.has_sum_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} {g : γ β} (hg : function.injective g) (hf : (x : β), x f x = 0) :
has_sum (f g) a a
theorem function.injective.summable_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {g : γ β} (hg : function.injective g) (hf : (x : β), x f x = 0) :
theorem has_sum_subtype_iff_of_support_subset {α : Type u_1} {β : Type u_2} {f : β α} {a : α} {s : set β} (hf : s) :
has_sum (f coe) a a
theorem has_sum_subtype_iff_indicator {α : Type u_1} {β : Type u_2} {f : β α} {a : α} {s : set β} :
theorem summable_subtype_iff_indicator {α : Type u_1} {β : Type u_2} {f : β α} {s : set β} :
@[simp]
theorem has_sum_subtype_support {α : Type u_1} {β : Type u_2} {f : β α} {a : α} :
has_sum (f coe) a a
theorem has_sum_fintype {α : Type u_1} {β : Type u_2} [fintype β] (f : β α) :
(finset.univ.sum (λ (b : β), f b))
@[protected]
theorem finset.has_sum {α : Type u_1} {β : Type u_2} (s : finset β) (f : β α) :
has_sum (f coe) (s.sum (λ (b : β), f b))
@[protected]
theorem finset.summable {α : Type u_1} {β : Type u_2} (s : finset β) (f : β α) :
@[protected]
theorem set.finite.summable {α : Type u_1} {β : Type u_2} {s : set β} (hs : s.finite) (f : β α) :
theorem has_sum_sum_of_ne_finset_zero {α : Type u_1} {β : Type u_2} {f : β α} {s : finset β} (hf : (b : β), b s f b = 0) :
(s.sum (λ (b : β), f b))

If a function `f` vanishes outside of a finite set `s`, then it `has_sum` `∑ b in s, f b`.

theorem summable_of_ne_finset_zero {α : Type u_1} {β : Type u_2} {f : β α} {s : finset β} (hf : (b : β), b s f b = 0) :
theorem has_sum_single {α : Type u_1} {β : Type u_2} {f : β α} (b : β) (hf : (b' : β), b' b f b' = 0) :
(f b)
theorem has_sum_ite_eq {α : Type u_1} {β : Type u_2} (b : β) [decidable_pred (λ (_x : β), _x = b)] (a : α) :
has_sum (λ (b' : β), ite (b' = b) a 0) a
theorem equiv.has_sum_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} (e : γ β) :
has_sum (f e) a a
theorem function.injective.has_sum_range_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} {g : γ β} (hg : function.injective g) :
has_sum (λ (x : (set.range g)), f x) a has_sum (f g) a
theorem equiv.summable_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} (e : γ β) :
theorem summable.prod_symm {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β × γ α} (hf : summable f) :
summable (λ (p : γ × β), f p.swap)
theorem equiv.has_sum_iff_of_support {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} {g : γ α} (e : ) (he : (x : (function.support f)), g (e x) = f x) :
a a
theorem has_sum_iff_has_sum_of_ne_zero_bij {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} {g : γ α} (i : β) (hi : ⦃x y : ⦄, i x = i y x = y) (hf : ) (hfg : (x : (function.support g)), f (i x) = g x) :
a a
theorem equiv.summable_iff_of_support {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {g : γ α} (e : ) (he : (x : (function.support f)), g (e x) = f x) :
@[protected]
theorem has_sum.map {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a : α} (hf : a) {G : Type u_4} [ γ] (g : G) (hg : continuous g) :
has_sum (g f) (g a)
@[protected]
theorem summable.map {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} (hf : summable f) {G : Type u_4} [ γ] (g : G) (hg : continuous g) :
@[protected]
theorem summable.map_iff_of_left_inverse {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {G : Type u_4} {G' : Type u_5} [ γ] [ α] (g : G) (g' : G') (hg : continuous g) (hg' : continuous g') (hinv : g) :
@[protected]
theorem summable.map_iff_of_equiv {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {G : Type u_4} [ γ] (g : G) (hg : continuous g) (hg' : continuous ) :

A special case of `summable.map_iff_of_left_inverse` for convenience

theorem has_sum.tendsto_sum_nat {α : Type u_1} {a : α} {f : α} (h : a) :
filter.tendsto (λ (n : ), (finset.range n).sum (λ (i : ), f i)) filter.at_top (nhds a)

If `f : ℕ → α` has sum `a`, then the partial sums `∑_{i=0}^{n-1} f i` converge to `a`.

theorem has_sum.unique {α : Type u_1} {β : Type u_2} {f : β α} {a₁ a₂ : α} [t2_space α] :
a₁ a₂ a₁ = a₂
theorem summable.has_sum_iff_tendsto_nat {α : Type u_1} [t2_space α] {f : α} {a : α} (hf : summable f) :
a filter.tendsto (λ (n : ), (finset.range n).sum (λ (i : ), f i)) filter.at_top (nhds a)
theorem function.surjective.summable_iff_of_has_sum_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} {α' : Type u_4} [add_comm_monoid α'] {e : α' α} (hes : function.surjective e) {f : β α} {g : γ α'} (he : {a : α'}, (e a) a) :
theorem has_sum.op {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (hf : a) :
has_sum (λ (a : β), mul_opposite.op (f a))
theorem summable.op {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) :
theorem has_sum.unop {α : Type u_1} {β : Type u_2} {f : β αᵐᵒᵖ} {a : αᵐᵒᵖ} (hf : a) :
has_sum (λ (a : β), mul_opposite.unop (f a))
theorem summable.unop {α : Type u_1} {β : Type u_2} {f : β αᵐᵒᵖ} (hf : summable f) :
@[simp]
theorem has_sum_op {α : Type u_1} {β : Type u_2} {f : β α} {a : α} :
has_sum (λ (a : β), mul_opposite.op (f a)) a
@[simp]
theorem has_sum_unop {α : Type u_1} {β : Type u_2} {f : β αᵐᵒᵖ} {a : αᵐᵒᵖ} :
has_sum (λ (a : β), mul_opposite.unop (f a)) a
@[simp]
theorem summable_op {α : Type u_1} {β : Type u_2} {f : β α} :
summable (λ (a : β), mul_opposite.op (f a))
@[simp]
theorem summable_unop {α : Type u_1} {β : Type u_2} {f : β αᵐᵒᵖ} :
summable (λ (a : β), mul_opposite.unop (f a))
theorem has_sum.star {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (h : a) :
has_sum (λ (b : β), has_star.star (f b))
theorem summable.star {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) :
summable (λ (b : β), has_star.star (f b))
theorem summable.of_star {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable (λ (b : β), has_star.star (f b))) :
@[simp]
theorem summable_star_iff {α : Type u_1} {β : Type u_2} {f : β α}  :
summable (λ (b : β), has_star.star (f b))
@[simp]
theorem summable_star_iff' {α : Type u_1} {β : Type u_2} {f : β α}  :
theorem has_sum.add {α : Type u_1} {β : Type u_2} {f g : β α} {a b : α} (hf : a) (hg : b) :
has_sum (λ (b : β), f b + g b) (a + b)
theorem summable.add {α : Type u_1} {β : Type u_2} {f g : β α} (hf : summable f) (hg : summable g) :
summable (λ (b : β), f b + g b)
theorem has_sum_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : γ β α} {a : γ α} {s : finset γ} :
( (i : γ), i s has_sum (f i) (a i)) has_sum (λ (b : β), s.sum (λ (i : γ), f i b)) (s.sum (λ (i : γ), a i))
theorem summable_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : γ β α} {s : finset γ} (hf : (i : γ), i s summable (f i)) :
summable (λ (b : β), s.sum (λ (i : γ), f i b))
theorem has_sum.add_disjoint {α : Type u_1} {β : Type u_2} {f : β α} {a b : α} {s t : set β} (hs : t) (ha : has_sum (f coe) a) (hb : has_sum (f coe) b) :
has_sum (f coe) (a + b)
theorem has_sum.add_is_compl {α : Type u_1} {β : Type u_2} {f : β α} {a b : α} {s t : set β} (hs : t) (ha : has_sum (f coe) a) (hb : has_sum (f coe) b) :
(a + b)
theorem has_sum.add_compl {α : Type u_1} {β : Type u_2} {f : β α} {a b : α} {s : set β} (ha : has_sum (f coe) a) (hb : has_sum (f coe) b) :
(a + b)
theorem summable.add_compl {α : Type u_1} {β : Type u_2} {f : β α} {s : set β} (hs : summable (f coe)) (hsc : summable (f coe)) :
theorem has_sum.compl_add {α : Type u_1} {β : Type u_2} {f : β α} {a b : α} {s : set β} (ha : has_sum (f coe) a) (hb : has_sum (f coe) b) :
(a + b)
theorem has_sum.even_add_odd {α : Type u_1} {a b : α} {f : α} (he : has_sum (λ (k : ), f (2 * k)) a) (ho : has_sum (λ (k : ), f (2 * k + 1)) b) :
(a + b)
theorem summable.compl_add {α : Type u_1} {β : Type u_2} {f : β α} {s : set β} (hs : summable (f coe)) (hsc : summable (f coe)) :
theorem summable.even_add_odd {α : Type u_1} {f : α} (he : summable (λ (k : ), f (2 * k))) (ho : summable (λ (k : ), f (2 * k + 1))) :
theorem has_sum.sigma {α : Type u_1} {β : Type u_2} {γ : β Type u_3} {f : (Σ (b : β), γ b) α} {g : β α} {a : α} (ha : a) (hf : (b : β), has_sum (λ (c : γ b), f b, c⟩) (g b)) :
a
theorem has_sum.prod_fiberwise {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β × γ α} {g : β α} {a : α} (ha : a) (hf : (b : β), has_sum (λ (c : γ), f (b, c)) (g b)) :
a

If a series `f` on `β × γ` has sum `a` and for each `b` the restriction of `f` to `{b} × γ` has sum `g b`, then the series `g` has sum `a`.

theorem summable.sigma' {α : Type u_1} {β : Type u_2} {γ : β Type u_3} {f : (Σ (b : β), γ b) α} (ha : summable f) (hf : (b : β), summable (λ (c : γ b), f b, c⟩)) :
summable (λ (b : β), ∑' (c : γ b), f b, c⟩)
theorem has_sum.sigma_of_has_sum {α : Type u_1} {β : Type u_2} [t3_space α] {γ : β Type u_3} {f : (Σ (b : β), γ b) α} {g : β α} {a : α} (ha : a) (hf : (b : β), has_sum (λ (c : γ b), f b, c⟩) (g b)) (hf' : summable f) :
a
theorem tsum_congr_subtype {α : Type u_1} {β : Type u_2} (f : β α) {s t : set β} (h : s = t) :
∑' (x : s), f x = ∑' (x : t), f x
theorem tsum_zero' {α : Type u_1} {β : Type u_2} (hz : is_closed {0}) :
∑' (b : β), 0 = 0
@[simp]
theorem tsum_zero {α : Type u_1} {β : Type u_2} [t1_space α] :
∑' (b : β), 0 = 0
theorem has_sum.tsum_eq {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {a : α} (ha : a) :
∑' (b : β), f b = a
theorem summable.has_sum_iff {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {a : α} (h : summable f) :
a ∑' (b : β), f b = a
@[simp]
theorem tsum_empty {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} [is_empty β] :
∑' (b : β), f b = 0
theorem tsum_eq_sum {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {s : finset β} (hf : (b : β), b s f b = 0) :
∑' (b : β), f b = s.sum (λ (b : β), f b)
theorem tsum_congr {α : Type u_1} {β : Type u_2} {f g : β α} (hfg : (b : β), f b = g b) :
∑' (b : β), f b = ∑' (b : β), g b
theorem tsum_fintype {α : Type u_1} {β : Type u_2} [t2_space α] [fintype β] (f : β α) :
∑' (b : β), f b = finset.univ.sum (λ (b : β), f b)
theorem tsum_bool {α : Type u_1} [t2_space α] (f : bool α) :
∑' (i : bool), f i =
theorem tsum_eq_single {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} (b : β) (hf : (b' : β), b' b f b' = 0) :
∑' (b : β), f b = f b
theorem tsum_tsum_eq_single {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] (f : β γ α) (b : β) (c : γ) (hfb : (b' : β), b' b f b' c = 0) (hfc : (b' : β) (c' : γ), c' c f b' c' = 0) :
∑' (b' : β) (c' : γ), f b' c' = f b c
@[simp]
theorem tsum_ite_eq {α : Type u_1} {β : Type u_2} [t2_space α] (b : β) [decidable_pred (λ (_x : β), _x = b)] (a : α) :
∑' (b' : β), ite (b' = b) a 0 = a
theorem tsum_dite_right {α : Type u_1} {β : Type u_2} [t2_space α] (P : Prop) [decidable P] (x : β ¬P α) :
∑' (b : β), dite P (λ (h : P), 0) (λ (h : ¬P), x b h) = dite P (λ (h : P), 0) (λ (h : ¬P), ∑' (b : β), x b h)
theorem tsum_dite_left {α : Type u_1} {β : Type u_2} [t2_space α] (P : Prop) [decidable P] (x : β P α) :
∑' (b : β), dite P (λ (h : P), x b h) (λ (h : ¬P), 0) = dite P (λ (h : P), ∑' (b : β), x b h) (λ (h : ¬P), 0)
theorem function.surjective.tsum_eq_tsum_of_has_sum_iff_has_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] {α' : Type u_4} [add_comm_monoid α'] {e : α' α} (hes : function.surjective e) (h0 : e 0 = 0) {f : β α} {g : γ α'} (h : {a : α'}, (e a) a) :
∑' (b : β), f b = e (∑' (c : γ), g c)
theorem tsum_eq_tsum_of_has_sum_iff_has_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] {f : β α} {g : γ α} (h : {a : α}, a a) :
∑' (b : β), f b = ∑' (c : γ), g c
theorem equiv.tsum_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] (j : γ β) (f : β α) :
∑' (c : γ), f (j c) = ∑' (b : β), f b
theorem equiv.tsum_eq_tsum_of_support {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] {f : β α} {g : γ α} (e : ) (he : (x : (function.support f)), g (e x) = f x) :
∑' (x : β), f x = ∑' (y : γ), g y
theorem tsum_eq_tsum_of_ne_zero_bij {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] {f : β α} {g : γ α} (i : β) (hi : ⦃x y : ⦄, i x = i y x = y) (hf : ) (hfg : (x : (function.support g)), f (i x) = g x) :
∑' (x : β), f x = ∑' (y : γ), g y
theorem tsum_op {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} :
∑' (x : β), mul_opposite.op (f x) = mul_opposite.op (∑' (x : β), f x)
theorem tsum_unop {α : Type u_1} {β : Type u_2} [t2_space α] {f : β αᵐᵒᵖ} :
∑' (x : β), mul_opposite.unop (f x) = mul_opposite.unop (∑' (x : β), f x)

### `tsum` on subsets #

@[simp]
theorem finset.tsum_subtype {α : Type u_1} {β : Type u_2} [t2_space α] (s : finset β) (f : β α) :
∑' (x : {x // x s}), f x = s.sum (λ (x : β), f x)
@[simp]
theorem finset.tsum_subtype' {α : Type u_1} {β : Type u_2} [t2_space α] (s : finset β) (f : β α) :
∑' (x : s), f x = s.sum (λ (x : β), f x)
theorem tsum_subtype {α : Type u_1} {β : Type u_2} [t2_space α] (s : set β) (f : β α) :
∑' (x : s), f x = ∑' (x : β), s.indicator f x
theorem tsum_subtype_eq_of_support_subset {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {s : set β} (hs : s) :
∑' (x : s), f x = ∑' (x : β), f x
@[simp]
theorem tsum_univ {α : Type u_1} {β : Type u_2} [t2_space α] (f : β α) :
∑' (x : set.univ), f x = ∑' (x : β), f x
@[simp]
theorem tsum_singleton {α : Type u_1} {β : Type u_2} [t2_space α] (b : β) (f : β α) :
∑' (x : {b}), f x = f b
theorem tsum_image {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] {g : γ β} (f : β α) {s : set γ} (hg : s) :
∑' (x : (g '' s)), f x = ∑' (x : s), f (g x)
theorem tsum_range {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] {g : γ β} (f : β α) (hg : function.injective g) :
∑' (x : (set.range g)), f x = ∑' (x : γ), f (g x)
theorem tsum_add {α : Type u_1} {β : Type u_2} [t2_space α] {f g : β α} (hf : summable f) (hg : summable g) :
∑' (b : β), (f b + g b) = ∑' (b : β), f b + ∑' (b : β), g b
theorem tsum_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] {f : γ β α} {s : finset γ} (hf : (i : γ), i s summable (f i)) :
∑' (b : β), s.sum (λ (i : γ), f i b) = s.sum (λ (i : γ), ∑' (b : β), f i b)
theorem tsum_sigma' {β : Type u_2} {δ : Type u_4} [t3_space δ] {γ : β Type u_1} {f : (Σ (b : β), γ b) δ} (h₁ : (b : β), summable (λ (c : γ b), f b, c⟩)) (h₂ : summable f) :
∑' (p : Σ (b : β), γ b), f p = ∑' (b : β) (c : γ b), f b, c⟩
theorem tsum_prod' {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [t3_space δ] {f : β × γ δ} (h : summable f) (h₁ : (b : β), summable (λ (c : γ), f (b, c))) :
∑' (p : β × γ), f p = ∑' (b : β) (c : γ), f (b, c)
theorem tsum_comm' {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [t3_space δ] {f : β γ δ} (h : summable ) (h₁ : (b : β), summable (f b)) (h₂ : (c : γ), summable (λ (b : β), f b c)) :
∑' (c : γ) (b : β), f b c = ∑' (b : β) (c : γ), f b c
theorem tsum_star {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α}  :
has_star.star (∑' (b : β), f b) = ∑' (b : β), has_star.star (f b)
theorem tsum_supr_decode₂ {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] [encodable γ] (m : β α) (m0 : m = 0) (s : γ β) :
∑' (i : ), m ( (b : γ) (H : b , s b) = ∑' (b : γ), m (s b)

You can compute a sum over an encodably type by summing over the natural numbers and taking a supremum. This is useful for outer measures.

theorem tsum_Union_decode₂ {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] [encodable γ] (m : set β α) (m0 : m = 0) (s : γ set β) :
∑' (i : ), m ( (b : γ) (H : b , s b) = ∑' (b : γ), m (s b)

`tsum_supr_decode₂` specialized to the complete lattice of sets.

Some properties about measure-like functions. These could also be functions defined on complete sublattices of sets, with the property that they are countably sub-additive. `R` will probably be instantiated with `(≤)` in all applications.

theorem rel_supr_tsum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t2_space α] [countable γ] (m : β α) (m0 : m = 0) (R : α α Prop) (m_supr : (s : β), R (m ( (i : ), s i)) (∑' (i : ), m (s i))) (s : γ β) :
R (m ( (b : γ), s b)) (∑' (b : γ), m (s b))

If a function is countably sub-additive then it is sub-additive on countable types

theorem rel_supr_sum {α : Type u_1} {β : Type u_2} {δ : Type u_4} [t2_space α] (m : β α) (m0 : m = 0) (R : α α Prop) (m_supr : (s : β), R (m ( (i : ), s i)) (∑' (i : ), m (s i))) (s : δ β) (t : finset δ) :
R (m ( (d : δ) (H : d t), s d)) (t.sum (λ (d : δ), m (s d)))

If a function is countably sub-additive then it is sub-additive on finite sets

theorem rel_sup_add {α : Type u_1} {β : Type u_2} [t2_space α] (m : β α) (m0 : m = 0) (R : α α Prop) (m_supr : (s : β), R (m ( (i : ), s i)) (∑' (i : ), m (s i))) (s₁ s₂ : β) :
R (m (s₁ s₂)) (m s₁ + m s₂)

theorem tsum_add_tsum_compl {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {s : set β} (hs : summable (f coe)) (hsc : summable (f coe)) :
∑' (x : s), f x + ∑' (x : s), f x = ∑' (x : β), f x
theorem tsum_union_disjoint {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {s t : set β} (hd : t) (hs : summable (f coe)) (ht : summable (f coe)) :
∑' (x : (s t)), f x = ∑' (x : s), f x + ∑' (x : t), f x
theorem tsum_even_add_odd {α : Type u_1} [t2_space α] {f : α} (he : summable (λ (k : ), f (2 * k))) (ho : summable (λ (k : ), f (2 * k + 1))) :
∑' (k : ), f (2 * k) + ∑' (k : ), f (2 * k + 1) = ∑' (k : ), f k
theorem has_sum.prod_mk {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {g : β γ} {a : α} {b : γ} (hf : a) (hg : b) :
has_sum (λ (x : β), (f x, g x)) (a, b)
theorem pi.has_sum {α : Type u_1} {ι : Type u_5} {π : α Type u_6} [Π (x : α), add_comm_monoid (π x)] [Π (x : α), topological_space (π x)] {f : ι Π (x : α), π x} {g : Π (x : α), π x} :
g (x : α), has_sum (λ (i : ι), f i x) (g x)
theorem pi.summable {α : Type u_1} {ι : Type u_5} {π : α Type u_6} [Π (x : α), add_comm_monoid (π x)] [Π (x : α), topological_space (π x)] {f : ι Π (x : α), π x} :
(x : α), summable (λ (i : ι), f i x)
theorem tsum_apply {α : Type u_1} {ι : Type u_5} {π : α Type u_6} [Π (x : α), add_comm_monoid (π x)] [Π (x : α), topological_space (π x)] [ (x : α), t2_space (π x)] {f : ι Π (x : α), π x} {x : α} (hf : summable f) :
(∑' (i : ι), f i) x = ∑' (i : ι), f i x
theorem has_sum.neg {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (h : a) :
has_sum (λ (b : β), -f b) (-a)
theorem summable.neg {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) :
summable (λ (b : β), -f b)
theorem summable.of_neg {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable (λ (b : β), -f b)) :
theorem summable_neg_iff {α : Type u_1} {β : Type u_2} {f : β α} :
summable (λ (b : β), -f b)
theorem has_sum.sub {α : Type u_1} {β : Type u_2} {f g : β α} {a₁ a₂ : α} (hf : a₁) (hg : a₂) :
has_sum (λ (b : β), f b - g b) (a₁ - a₂)
theorem summable.sub {α : Type u_1} {β : Type u_2} {f g : β α} (hf : summable f) (hg : summable g) :
summable (λ (b : β), f b - g b)
theorem summable.trans_sub {α : Type u_1} {β : Type u_2} {f g : β α} (hg : summable g) (hfg : summable (λ (b : β), f b - g b)) :
theorem summable_iff_of_summable_sub {α : Type u_1} {β : Type u_2} {f g : β α} (hfg : summable (λ (b : β), f b - g b)) :
theorem has_sum.update {α : Type u_1} {β : Type u_2} {f : β α} {a₁ : α} (hf : a₁) (b : β) [decidable_eq β] (a : α) :
has_sum b a) (a - f b + a₁)
theorem summable.update {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) (b : β) [decidable_eq β] (a : α) :
theorem has_sum.has_sum_compl_iff {α : Type u_1} {β : Type u_2} {f : β α} {a₁ a₂ : α} {s : set β} (hf : has_sum (f coe) a₁) :
has_sum (f coe) a₂ (a₁ + a₂)
theorem has_sum.has_sum_iff_compl {α : Type u_1} {β : Type u_2} {f : β α} {a₁ a₂ : α} {s : set β} (hf : has_sum (f coe) a₁) :
a₂ has_sum (f coe) (a₂ - a₁)
theorem summable.summable_compl_iff {α : Type u_1} {β : Type u_2} {f : β α} {s : set β} (hf : summable (f coe)) :
@[protected]
theorem finset.has_sum_compl_iff {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (s : finset β) :
has_sum (λ (x : {x // x s}), f x) a (a + s.sum (λ (i : β), f i))
@[protected]
theorem finset.has_sum_iff_compl {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (s : finset β) :
a has_sum (λ (x : {x // x s}), f x) (a - s.sum (λ (i : β), f i))
@[protected]
theorem finset.summable_compl_iff {α : Type u_1} {β : Type u_2} {f : β α} (s : finset β) :
summable (λ (x : {x // x s}), f x)
theorem set.finite.summable_compl_iff {α : Type u_1} {β : Type u_2} {f : β α} {s : set β} (hs : s.finite) :
theorem has_sum_ite_eq_extract {α : Type u_1} {β : Type u_2} {f : β α} {a : α} [decidable_eq β] (hf : a) (b : β) :
has_sum (λ (n : β), ite (n = b) 0 (f n)) (a - f b)
theorem tsum_neg {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] :
∑' (b : β), -f b = -∑' (b : β), f b
theorem tsum_sub {α : Type u_1} {β : Type u_2} {f g : β α} [t2_space α] (hf : summable f) (hg : summable g) :
∑' (b : β), (f b - g b) = ∑' (b : β), f b - ∑' (b : β), g b
theorem sum_add_tsum_compl {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] {s : finset β} (hf : summable f) :
s.sum (λ (x : β), f x) + ∑' (x : (s)), f x = ∑' (x : β), f x
theorem tsum_ite_eq_extract {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] [decidable_eq β] (hf : summable f) (b : β) :
∑' (n : β), f n = f b + ∑' (n : β), ite (n = b) 0 (f n)

Let `f : β → α` be a sequence with summable series and let `b ∈ β` be an index. Lemma `tsum_ite_eq_extract` writes `Σ f n` as the sum of `f b` plus the series of the remaining terms.

### Sums on subtypes #

If `s` is a finset of `α`, we show that the summability of `f` in the whole space and on the subtype `univ - s` are equivalent, and relate their sums. For a function defined on `ℕ`, we deduce the formula `(∑ i in range k, f i) + (∑' i, f (i + k)) = (∑' i, f i)`, in `sum_add_tsum_nat_add`.

theorem has_sum_nat_add_iff {α : Type u_1} {f : α} (k : ) {a : α} :
has_sum (λ (n : ), f (n + k)) a (a + (finset.range k).sum (λ (i : ), f i))
theorem summable_nat_add_iff {α : Type u_1} {f : α} (k : ) :
summable (λ (n : ), f (n + k))
theorem has_sum_nat_add_iff' {α : Type u_1} {f : α} (k : ) {a : α} :
has_sum (λ (n : ), f (n + k)) (a - (finset.range k).sum (λ (i : ), f i)) a
theorem sum_add_tsum_nat_add {α : Type u_1} [t2_space α] {f : α} (k : ) (h : summable f) :
(finset.range k).sum (λ (i : ), f i) + ∑' (i : ), f (i + k) = ∑' (i : ), f i
theorem tsum_eq_zero_add {α : Type u_1} [t2_space α] {f : α} (hf : summable f) :
∑' (b : ), f b = f 0 + ∑' (b : ), f (b + 1)
theorem tendsto_sum_nat_add {α : Type u_1} [t2_space α] (f : α) :
filter.tendsto (λ (i : ), ∑' (k : ), f (k + i)) filter.at_top (nhds 0)

For `f : ℕ → α`, then `∑' k, f (k + i)` tends to zero. This does not require a summability assumption on `f`, as otherwise all sums are zero.

theorem has_sum.int_rec {α : Type u_1} {a b : α} {f g : α} (hf : a) (hg : b) :
has_sum (int.rec f g) (a + b)

If `f₀, f₁, f₂, ...` and `g₀, g₁, g₂, ...` are both convergent then so is the `ℤ`-indexed sequence: `..., g₂, g₁, g₀, f₀, f₁, f₂, ...`.

theorem has_sum.nonneg_add_neg {α : Type u_1} {a b : α} {f : α} (hnonneg : has_sum (λ (n : ), f n) a) (hneg : has_sum (λ (n : ), f (-(n.succ))) b) :
(a + b)
theorem has_sum.pos_add_zero_add_neg {α : Type u_1} {a b : α} {f : α} (hpos : has_sum (λ (n : ), f (n + 1)) a) (hneg : has_sum (λ (n : ), f (-(n.succ))) b) :
(a + f 0 + b)
theorem has_sum.mul_left {α : Type u_1} {β : Type u_2} {f : β α} {a₁ : α} (a₂ : α) (h : a₁) :
has_sum (λ (b : β), a₂ * f b) (a₂ * a₁)
theorem has_sum.mul_right {α : Type u_1} {β : Type u_2} {f : β α} {a₁ : α} (a₂ : α) (hf : a₁) :
has_sum (λ (b : β), f b * a₂) (a₁ * a₂)
theorem summable.mul_left {α : Type u_1} {β : Type u_2} {f : β α} (a : α) (hf : summable f) :
summable (λ (b : β), a * f b)
theorem summable.mul_right {α : Type u_1} {β : Type u_2} {f : β α} (a : α) (hf : summable f) :
summable (λ (b : β), f b * a)
theorem summable.tsum_mul_left {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] (a : α) (hf : summable f) :
∑' (b : β), a * f b = a * ∑' (b : β), f b
theorem summable.tsum_mul_right {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] (a : α) (hf : summable f) :
∑' (b : β), f b * a = (∑' (b : β), f b) * a
theorem commute.tsum_right {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] (a : α) (h : (b : β), (f b)) :
(∑' (b : β), f b)
theorem commute.tsum_left {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] (a : α) (h : (b : β), commute (f b) a) :
commute (∑' (b : β), f b) a
theorem has_sum.const_smul {α : Type u_1} {β : Type u_2} {R : Type u_5} [monoid R] [ α] {f : β α} {a : α} {r : R} (hf : a) :
has_sum (λ (z : β), r f z) (r a)
theorem summable.const_smul {α : Type u_1} {β : Type u_2} {R : Type u_5} [monoid R] [ α] {f : β α} {r : R} (hf : summable f) :
summable (λ (z : β), r f z)
theorem tsum_const_smul {α : Type u_1} {β : Type u_2} {R : Type u_5} [monoid R] [ α] {f : β α} [t2_space α] {r : R} (hf : summable f) :
∑' (z : β), r f z = r ∑' (z : β), f z
theorem has_sum.smul_const {α : Type u_1} {β : Type u_2} {R : Type u_5} [semiring R] [ α] [ α] {f : β R} {a : α} {r : R} (hf : r) :
has_sum (λ (z : β), f z a) (r a)
theorem summable.smul_const {α : Type u_1} {β : Type u_2} {R : Type u_5} [semiring R] [ α] [ α] {f : β R} {a : α} (hf : summable f) :
summable (λ (z : β), f z a)
theorem tsum_smul_const {α : Type u_1} {β : Type u_2} {R : Type u_5} [semiring R] [ α] [ α] {f : β R} [t2_space α] {a : α} (hf : summable f) :
∑' (z : β), f z a = (∑' (z : β), f z) a
theorem has_sum.div_const {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (h : a) (b : α) :
has_sum (λ (x : β), f x / b) (a / b)
theorem summable.div_const {α : Type u_1} {β : Type u_2} {f : β α} (h : summable f) (b : α) :
summable (λ (x : β), f x / b)
theorem has_sum_mul_left_iff {α : Type u_1} {β : Type u_2} {f : β α} {a₁ a₂ : α} (h : a₂ 0) :
a₁ has_sum (λ (b : β), a₂ * f b) (a₂ * a₁)
theorem has_sum_mul_right_iff {α : Type u_1} {β : Type u_2} {f : β α} {a₁ a₂ : α} (h : a₂ 0) :
a₁ has_sum (λ (b : β), f b * a₂) (a₁ * a₂)
theorem summable_mul_left_iff {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (h : a 0) :
summable (λ (b : β), a * f b)
theorem summable_mul_right_iff {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (h : a 0) :
summable (λ (b : β), f b * a)
theorem tsum_mul_left {α : Type u_1} {β : Type u_2} {f : β α} {a : α} [t2_space α] :
∑' (x : β), a * f x = a * ∑' (x : β), f x
theorem tsum_mul_right {α : Type u_1} {β : Type u_2} {f : β α} {a : α} [t2_space α] :
∑' (x : β), f x * a = (∑' (x : β), f x) * a
theorem has_sum_le {α : Type u_1} {β : Type u_2} {f g : β α} {a₁ a₂ : α} (h : (b : β), f b g b) (hf : a₁) (hg : a₂) :
a₁ a₂
theorem has_sum_mono {α : Type u_1} {β : Type u_2} {f g : β α} {a₁ a₂ : α} (hf : a₁) (hg : a₂) (h : f g) :
a₁ a₂
theorem has_sum_le_of_sum_le {α : Type u_1} {β : Type u_2} {f : β α} {a a₂ : α} (hf : a) (h : (s : finset β), s.sum (λ (b : β), f b) a₂) :
a a₂
theorem le_has_sum_of_le_sum {α : Type u_1} {β : Type u_2} {f : β α} {a a₂ : α} (hf : a) (h : (s : finset β), a₂ s.sum (λ (b : β), f b)) :
a₂ a
theorem has_sum_le_inj {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {a₁ a₂ : α} {g : γ α} (i : β γ) (hi : function.injective i) (hs : (c : γ), c 0 g c) (h : (b : β), f b g (i b)) (hf : a₁) (hg : a₂) :
a₁ a₂
theorem tsum_le_tsum_of_inj {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {g : γ α} (i : β γ) (hi : function.injective i) (hs : (c : γ), c 0 g c) (h : (b : β), f b g (i b)) (hf : summable f) (hg : summable g) :
theorem sum_le_has_sum {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (s : finset β) (hs : (b : β), b s 0 f b) (hf : a) :
s.sum (λ (b : β), f b) a
theorem is_lub_has_sum {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (h : (b : β), 0 f b) (hf : a) :
is_lub (set.range (λ (s : finset β), s.sum (λ (b : β), f b))) a
theorem le_has_sum {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (hf : a) (b : β) (hb : (b' : β), b' b 0 f b') :
f b a
theorem sum_le_tsum {α : Type u_1} {β : Type u_2} {f : β α} (s : finset β) (hs : (b : β), b s 0 f b) (hf : summable f) :
s.sum (λ (b : β), f b) ∑' (b : β), f b
theorem le_tsum {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) (b : β) (hb : (b' : β), b' b 0 f b') :
f b ∑' (b : β), f b
theorem tsum_le_tsum {α : Type u_1} {β : Type u_2} {f g : β α} (h : (b : β), f b g b) (hf : summable f) (hg : summable g) :
∑' (b : β), f b ∑' (b : β), g b
theorem tsum_mono {α : Type u_1} {β : Type u_2} {f g : β α} (hf : summable f) (hg : summable g) (h : f g) :
∑' (n : β), f n ∑' (n : β), g n
theorem tsum_le_of_sum_le {α : Type u_1} {β : Type u_2} {f : β α} {a₂ : α} (hf : summable f) (h : (s : finset β), s.sum (λ (b : β), f b) a₂) :
∑' (b : β), f b a₂
theorem tsum_le_of_sum_le' {α : Type u_1} {β : Type u_2} {f : β α} {a₂ : α} (ha₂ : 0 a₂) (h : (s : finset β), s.sum (λ (b : β), f b) a₂) :
∑' (b : β), f b a₂
theorem has_sum.nonneg {α : Type u_1} {β : Type u_2} {g : β α} {a : α} (h : (b : β), 0 g b) (ha : a) :
0 a
theorem has_sum.nonpos {α : Type u_1} {β : Type u_2} {g : β α} {a : α} (h : (b : β), g b 0) (ha : a) :
a 0
theorem tsum_nonneg {α : Type u_1} {β : Type u_2} {g : β α} (h : (b : β), 0 g b) :
0 ∑' (b : β), g b
theorem tsum_nonpos {α : Type u_1} {β : Type u_2} {f : β α} (h : (b : β), f b 0) :
∑' (b : β), f b 0
theorem has_sum_lt {α : Type u_1} {β : Type u_2} {f g : β α} {a₁ a₂ : α} {i : β} (h : (b : β), f b g b) (hi : f i < g i) (hf : a₁) (hg : a₂) :
a₁ < a₂
theorem has_sum_strict_mono {α : Type u_1} {β : Type u_2} {f g : β α} {a₁ a₂ : α} (hf : a₁) (hg : a₂) (h : f < g) :
a₁ < a₂
theorem tsum_lt_tsum {α : Type u_1} {β : Type u_2} {f g : β α} {i : β} (h : (b : β), f b g b) (hi : f i < g i) (hf : summable f) (hg : summable g) :
∑' (n : β), f n < ∑' (n : β), g n
theorem tsum_strict_mono {α : Type u_1} {β : Type u_2} {f g : β α} (hf : summable f) (hg : summable g) (h : f < g) :
∑' (n : β), f n < ∑' (n : β), g n
theorem tsum_pos {α : Type u_1} {β : Type u_2} {g : β α} (hsum : summable g) (hg : (b : β), 0 g b) (i : β) (hi : 0 < g i) :
0 < ∑' (b : β), g b
theorem has_sum_zero_iff_of_nonneg {α : Type u_1} {β : Type u_2} {f : β α} (hf : (i : β), 0 f i) :
0 f = 0
theorem le_has_sum' {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (hf : a) (b : β) :
f b a
theorem le_tsum' {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) (b : β) :
f b ∑' (b : β), f b
theorem has_sum_zero_iff {α : Type u_1} {β : Type u_2} {f : β α} :
0 (x : β), f x = 0
theorem tsum_eq_zero_iff {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) :
∑' (i : β), f i = 0 (x : β), f x = 0
theorem tsum_ne_zero_iff {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) :
∑' (i : β), f i 0 (x : β), f x 0
theorem is_lub_has_sum' {α : Type u_1} {β : Type u_2} {f : β α} {a : α} (hf : a) :
is_lub (set.range (λ (s : finset β), s.sum (λ (b : β), f b))) a
theorem summable_iff_cauchy_seq_finset {α : Type u_1} {β : Type u_2} {f : β α} :
cauchy_seq (λ (s : finset β), s.sum (λ (b : β), f b))

The Cauchy criterion for infinite sums, also known as the Cauchy convergence test

theorem cauchy_seq_finset_iff_vanishing {α : Type u_1} {β : Type u_2} {f : β α} :
cauchy_seq (λ (s : finset β), s.sum (λ (b : β), f b)) (e : set α), e nhds 0 ( (s : finset β), (t : finset β), s t.sum (λ (b : β), f b) e)
theorem tendsto_tsum_compl_at_top_zero {α : Type u_1} {β : Type u_2} (f : β α) :
filter.tendsto (λ (s : finset β), ∑' (b : {x // x s}), f b) filter.at_top (nhds 0)

The sum over the complement of a finset tends to `0` when the finset grows to cover the whole space. This does not need a summability assumption, as otherwise all sums are zero.

theorem summable_iff_vanishing {α : Type u_1} {β : Type u_2} {f : β α}  :
(e : set α), e nhds 0 ( (s : finset β), (t : finset β), s t.sum (λ (b : β), f b) e)
theorem summable.summable_of_eq_zero_or_self {α : Type u_1} {β : Type u_2} {f g : β α} (hf : summable f) (h : (b : β), g b = 0 g b = f b) :
@[protected]
theorem summable.indicator {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) (s : set β) :
theorem summable.comp_injective {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β α} {i : γ β} (hf : summable f) (hi : function.injective i) :
theorem summable.subtype {α : Type u_1} {β : Type u_2} {f : β α} (hf : summable f) (s : set β) :
theorem summable_subtype_and_compl {α : Type u_1} {β : Type u_2} {f : β α} {s : set β} :
summable (λ (x : s), f x) summable (λ (x : s), f x)
theorem summable.sigma_factor {α : Type u_1} {β : Type u_2} {γ : β Type u_3} {f : (Σ (b : β), γ b) α} (ha : summable f) (b : β) :
summable (λ (c : γ b), f b, c⟩)
theorem summable.sigma {α : Type u_1} {β : Type u_2} {γ : β Type u_3} {f : (Σ (b : β), γ b) α} (ha : summable f) :
summable (λ (b : β), ∑' (c : γ b), f b, c⟩)
theorem summable.prod_factor {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β × γ α} (h : summable f) (b : β) :
summable (λ (c : γ), f (b, c))
theorem tsum_sigma {α : Type u_1} {β : Type u_2} [t1_space α] {γ : β Type u_3} {f : (Σ (b : β), γ b) α} (ha : summable f) :
∑' (p : Σ (b : β), γ b), f p = ∑' (b : β) (c : γ b), f b, c⟩
theorem tsum_prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t1_space α] {f : β × γ α} (h : summable f) :
∑' (p : β × γ), f p = ∑' (b : β) (c : γ), f (b, c)
theorem tsum_comm {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t1_space α] {f : β γ α} (h : summable ) :
∑' (c : γ) (b : β), f b c = ∑' (b : β) (c : γ), f b c
theorem has_sum.sum_nat_of_sum_int {α : Type u_1} {a : α} [t2_space α] {f : α} (hf : a) :
has_sum (λ (n : ), f (n + 1) + f (-(n.succ))) (a - f 0)
theorem tsum_subtype_add_tsum_subtype_compl {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} (hf : summable f) (s : set β) :
∑' (x : s), f x + ∑' (x : s), f x = ∑' (x : β), f x
theorem sum_add_tsum_subtype_compl {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} (hf : summable f) (s : finset β) :
s.sum (λ (x : β), f x) + ∑' (x : {x // x s}), f x = ∑' (x : β), f x
theorem summable.vanishing {α : Type u_1} {G : Type u_5} {f : α G} (hf : summable f) ⦃e : set G⦄ (he : e nhds 0) :
(s : finset α), (t : finset α), s t.sum (λ (k : α), f k) e
theorem summable.tendsto_cofinite_zero {α : Type u_1} {G : Type u_5} {f : α G} (hf : summable f) :

Series divergence test: if `f` is a convergent series, then `f x` tends to zero along `cofinite`.

theorem summable.tendsto_at_top_zero {G : Type u_5} {f : G} (hf : summable f) :
theorem summable.tendsto_top_of_pos {α : Type u_1} {f : α} (hf : summable f⁻¹) (hf' : (n : ), 0 < f n) :
theorem tsum_le_of_sum_range_le {E : Type u_5} [preorder E] [t2_space E] {f : E} {c : E} (hsum : summable f) (h : (n : ), (finset.range n).sum (λ (i : ), f i) c) :
∑' (n : ), f n c

For infinite sums taking values in a linearly ordered monoid, the existence of a least upper bound for the finite sums is a criterion for summability.

This criterion is useful when applied in a linearly ordered monoid which is also a complete or conditionally complete linear order, such as `ℝ`, `ℝ≥0`, `ℝ≥0∞`, because it is then easy to check the existence of a least upper bound.

theorem has_sum_of_is_lub_of_nonneg {α : Type u_1} {β : Type u_2} {f : α β} (b : β) (h : (b : α), 0 f b) (hf : is_lub (set.range (λ (s : finset α), s.sum (λ (a : α), f a))) b) :
b
theorem has_sum_of_is_lub {α : Type u_1} {β : Type u_2} {f : α β} (b : β) (hf : is_lub (set.range (λ (s : finset α), s.sum (λ (a : α), f a))) b) :
b
theorem summable_abs_iff {α : Type u_1} {β : Type u_2} {f : α β} :
summable (λ (x : α), |f x|)
theorem summable.abs {α : Type u_1} {β : Type u_2} {f : α β} :
summable (λ (x : α), |f x|)

Alias of the reverse direction of `summable_abs_iff`.

theorem summable.of_abs {α : Type u_1} {β : Type u_2} {f : α β} :
summable (λ (x : α), |f x|)

Alias of the forward direction of `summable_abs_iff`.

theorem finite_of_summable_const {α : Type u_1} {β : Type u_2} [archimedean β] {b : β} (hb : 0 < b) (hf : summable (λ (a : α), b)) :
theorem cauchy_seq_of_edist_le_of_summable {α : Type u_1} {f : α} (d : nnreal) (hf : (n : ), has_edist.edist (f n) (f n.succ) (d n)) (hd : summable d) :

If the extended distance between consecutive points of a sequence is estimated by a summable series of `nnreal`s, then the original sequence is a Cauchy sequence.

theorem cauchy_seq_of_dist_le_of_summable {α : Type u_1} {f : α} (d : ) (hf : (n : ), has_dist.dist (f n) (f n.succ) d n) (hd : summable d) :

If the distance between consecutive points of a sequence is estimated by a summable series, then the original sequence is a Cauchy sequence.

theorem cauchy_seq_of_summable_dist {α : Type u_1} {f : α} (h : summable (λ (n : ), has_dist.dist (f n) (f n.succ))) :
theorem dist_le_tsum_of_dist_le_of_tendsto {α : Type u_1} {f : α} (d : ) (hf : (n : ), has_dist.dist (f n) (f n.succ) d n) (hd : summable d) {a : α} (ha : (nhds a)) (n : ) :
has_dist.dist (f n) a ∑' (m : ), d (n + m)
theorem dist_le_tsum_of_dist_le_of_tendsto₀ {α : Type u_1} {f : α} (d : ) (hf : (n : ), has_dist.dist (f n) (f n.succ) d n) (hd : summable d) {a : α} (ha : (nhds a)) :
theorem dist_le_tsum_dist_of_tendsto {α : Type u_1} {f : α} (h : summable (λ (n : ), has_dist.dist (f n) (f n.succ))) {a : α} (ha : (nhds a)) (n : ) :
has_dist.dist (f n) a ∑' (m : ), has_dist.dist (f (n + m)) (f (n + m).succ)
theorem dist_le_tsum_dist_of_tendsto₀ {α : Type u_1} {f : α} (h : summable (λ (n : ), has_dist.dist (f n) (f n.succ))) {a : α} (ha : (nhds a)) :
has_dist.dist (f 0) a ∑' (n : ), has_dist.dist (f n) (f n.succ)

## Multipliying two infinite sums #

In this section, we prove various results about `(∑' x : β, f x) * (∑' y : γ, g y)`. Note that we always assume that the family `λ x : β × γ, f x.1 * g x.2` is summable, since there is no way to deduce this from the summmabilities of `f` and `g` in general, but if you are working in a normed space, you may want to use the analogous lemmas in `analysis/normed_space/basic` (e.g `tsum_mul_tsum_of_summable_norm`).

We first establish results about arbitrary index types, `β` and `γ`, and then we specialize to `β = γ = ℕ` to prove the Cauchy product formula (see `tsum_mul_tsum_eq_tsum_sum_antidiagonal`).

### Arbitrary index types #

theorem has_sum.mul_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t3_space α] {f : β α} {g : γ α} {s t u : α} (hf : s) (hg : t) (hfg : has_sum (λ (x : β × γ), f x.fst * g x.snd) u) :
s * t = u
theorem has_sum.mul {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t3_space α] {f : β α} {g : γ α} {s t : α} (hf : s) (hg : t) (hfg : summable (λ (x : β × γ), f x.fst * g x.snd)) :
has_sum (λ (x : β × γ), f x.fst * g x.snd) (s * t)
theorem tsum_mul_tsum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [t3_space α] {f : β α} {g : γ α} (hf : summable f) (hg : summable g) (hfg : summable (λ (x : β × γ), f x.fst * g x.snd)) :
(∑' (x : β), f x) * ∑' (y : γ), g y = ∑' (z : β × γ), f z.fst * g z.snd

Product of two infinites sums indexed by arbitrary types. See also `tsum_mul_tsum_of_summable_norm` if `f` and `g` are abolutely summable.

### `ℕ`-indexed families (Cauchy product) #

We prove two versions of the Cauchy product formula. The first one is `tsum_mul_tsum_eq_tsum_sum_range`, where the `n`-th term is a sum over `finset.range (n+1)` involving `nat` substraction. In order to avoid `nat` substraction, we also provide `tsum_mul_tsum_eq_tsum_sum_antidiagonal`, where the `n`-th term is a sum over all pairs `(k, l)` such that `k+l=n`, which corresponds to the `finset` `finset.nat.antidiagonal n`

theorem summable_mul_prod_iff_summable_mul_sigma_antidiagonal {α : Type u_1} {f g : α} :
summable (λ (x : × ), f x.fst * g x.snd) summable (λ (x : Σ (n : ), , f (x.snd).fst * g (x.snd).snd)
theorem summable_sum_mul_antidiagonal_of_summable_mul {α : Type u_1} [t3_space α] {f g : α} (h : summable (λ (x : × ), f x.fst * g x.snd)) :
summable (λ (n : ), (λ (kl : × ), f kl.fst * g kl.snd))
theorem tsum_mul_tsum_eq_tsum_sum_antidiagonal {α : Type u_1} {f g : α} [t3_space α] (hf : summable f) (hg : summable g) (hfg : summable (λ (x : × ), f x.fst * g x.snd)) :
(∑' (n : ), f n) * ∑' (n : ), g n = ∑' (n : ), (λ (kl : × ), f kl.fst * g kl.snd)

The Cauchy product formula for the product of two infinites sums indexed by `ℕ`, expressed by summing on `finset.nat.antidiagonal`. See also `tsum_mul_tsum_eq_tsum_sum_antidiagonal_of_summable_norm` if `f` and `g` are absolutely summable.

theorem summable_sum_mul_range_of_summable_mul {α : Type u_1} [t3_space α] {f g : α} (h : summable (λ (x : × ), f x.fst * g x.snd)) :
summable (λ (n : ), (finset.range (n + 1)).sum (λ (k : ), f k * g (n - k)))
theorem tsum_mul_tsum_eq_tsum_sum_range {α : Type u_1} {f g : α} [t3_space α] (hf : summable f) (hg : summable g) (hfg : summable (λ (x : × ), f x.fst * g x.snd)) :
(∑' (n : ), f n) * ∑' (n : ), g n = ∑' (n : ), (finset.range (n + 1)).sum (λ (k : ), f k * g (n - k))

The Cauchy product formula for the product of two infinites sums indexed by `ℕ`, expressed by summing on `finset.range`. See also `tsum_mul_tsum_eq_tsum_sum_range_of_summable_norm` if `f` and `g` are absolutely summable.