mathlibdocumentation

topology.algebra.infinite_sum.basic

Infinite sum over a topological monoid #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

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 has_sum_pi_single {α : Type u_1} {β : Type u_2} [decidable_eq β] (b : β) (a : α) :
has_sum a) 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.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_sum_disjoint {α : Type u_1} {β : Type u_2} {f : β α} {ι : Type u_3} (s : finset ι) {t : ι set β} {a : ι α} (hs : s.pairwise (disjoint on t)) (hf : (i : ι), i s has_sum (f coe) (a i)) :
has_sum (f coe) (s.sum (λ (i : ι), a i))
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 has_sum.update' {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {a a' : α} (hf : a) (b : β) (x : α) (hf' : has_sum b x) a') :
a + x = a' + f b

Version of has_sum.update for add_comm_monoid rather than add_comm_group. Rather than showing that f.update has a specific sum in terms of has_sum, it gives a relationship between the sums of f and f.update given that both exist.

theorem eq_add_of_has_sum_ite {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {a : α} (hf : a) (b : β) (a' : α) (hf' : has_sum (λ (n : β), ite (n = b) 0 (f n)) a') :
a = a' + f b

Version of has_sum_ite_sub_has_sum for add_comm_monoid rather than add_comm_group. Rather than showing that the ite expression has a specific sum in terms of has_sum, it gives a relationship between the sums of f and ite (n = b) 0 (f n) given that both exist.

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 sum_eq_tsum_indicator {α : Type u_1} {β : Type u_2} [t2_space α] (f : β α) (s : finset β) :
s.sum (λ (x : β), f x) = ∑' (x : β), s.indicator f x
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
@[simp]
theorem tsum_pi_single {α : Type u_1} {β : Type u_2} [t2_space α] [decidable_eq β] (b : β) (a : α) :
∑' (b' : β), a b' = 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

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_eq_add_tsum_ite' {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} (b : β) (hf : summable b 0)) :
∑' (x : β), f x = f b + ∑' (x : β), ite (x = b) 0 (f x)

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_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_finset_bUnion_disjoint {α : Type u_1} {β : Type u_2} [t2_space α] {f : β α} {ι : Type u_3} {s : finset ι} {t : ι set β} (hd : s.pairwise (disjoint on t)) (hf : (i : ι), i s summable (f coe)) :
∑' (x : (i : ι) (H : i s), t i), f x = s.sum (λ (i : ι), ∑' (x : (t i)), 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.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_sub_has_sum {α : 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_eq_add_tsum_ite {α : 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_eq_add_tsum_ite writes Σ f n as the sum of f b plus the series of the remaining terms.

Sums on nat #

We show the formula (∑ i in range k, f i) + (∑' i, f (i + k)) = (∑' i, f i), in sum_add_tsum_nat_add, as well as several results relating sums on and .

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 summable_int_of_summable_nat {α : Type u_1} {f : α} (hp : summable (λ (n : ), f n)) (hn : summable (λ (n : ), f (-n))) :
theorem has_sum.sum_nat_of_sum_int {α : Type u_1} {a : α} {f : α} (hf : a) :
has_sum (λ (n : ), f n + f (-n)) (a + f 0)
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 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 has_sum.const_smul {α : Type u_1} {β : Type u_2} {γ : Type u_3} [monoid γ] [ α] {f : β α} {a : α} (b : γ) (hf : a) :
has_sum (λ (i : β), b f i) (b a)
theorem summable.const_smul {α : Type u_1} {β : Type u_2} {γ : Type u_3} [monoid γ] [ α] {f : β α} (b : γ) (hf : summable f) :
summable (λ (i : β), b f i)
theorem tsum_const_smul {α : Type u_1} {β : Type u_2} {γ : Type u_3} [monoid γ] [ α] {f : β α} [t2_space α] (b : γ) (hf : summable f) :
∑' (i : β), b f i = b ∑' (i : β), f i

Product and pi types #

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

Multiplicative opposite #

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 tsum_op {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] :
∑' (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)

Interaction with the star #

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 tsum_star {α : Type u_1} {β : Type u_2} {f : β α} [t2_space α] :
has_star.star (∑' (b : β), f b) = ∑' (b : β), has_star.star (f b)