# Documentation

Mathlib.Topology.Algebra.InfiniteSum.Basic

# 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 HasSum.tendsto_sum_nat.

## References #

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

Infinite sum on a topological monoid

The atTop 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.

Instances For
def Summable {α : Type u_1} {β : Type u_2} [] [] (f : βα) :

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

Instances For
@[irreducible]
def tsum {α : Type u_5} [] [] {β : Type u_6} (f : βα) :
α

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

Instances For
theorem tsum_def {α : Type u_5} [] [] {β : Type u_6} (f : βα) :
tsum f = if h : then if then else else 0
Instances For

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

Instances For
theorem HasSum.summable {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} (h : HasSum f a) :
theorem hasSum_zero {α : Type u_1} {β : Type u_2} [] [] :
HasSum (fun x => 0) 0

Constant zero function has sum 0

theorem hasSum_empty {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] :
HasSum f 0
theorem summable_zero {α : Type u_1} {β : Type u_2} [] [] :
Summable fun x => 0
theorem summable_empty {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] :
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 : ) (hfg : ∀ (b : β), f b = g b) :
theorem HasSum.hasSum_of_sum_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} {g : γα} (h_eq : ∀ (u : ), v, ∀ (v' : ), v v'u', u u' (Finset.sum u' fun x => g x) = Finset.sum v' fun b => f b) (hf : HasSum g a) :
HasSum f a
theorem hasSum_iff_hasSum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} {g : γα} (h₁ : ∀ (u : ), v, ∀ (v' : ), v v'u', u u' (Finset.sum u' fun x => g x) = Finset.sum v' fun b => f b) (h₂ : ∀ (v : ), u, ∀ (u' : ), u u'v', v v' (Finset.sum v' fun b => f b) = Finset.sum u' fun x => g x) :
HasSum f a HasSum g a
theorem Function.Injective.hasSum_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} {g : γβ} (hg : ) (hf : ∀ (x : β), ¬x f x = 0) :
HasSum (f g) a HasSum f a
theorem Function.Injective.summable_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {g : γβ} (hg : ) (hf : ∀ (x : β), ¬x f x = 0) :
@[simp]
theorem hasSum_extend_zero {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} {g : βγ} (hg : ) :
HasSum () a HasSum f a
@[simp]
theorem summable_extend_zero {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {g : βγ} (hg : ) :
theorem hasSum_subtype_iff_of_support_subset {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} {s : Set β} (hf : ) :
HasSum (f Subtype.val) a HasSum f a
theorem hasSum_subtype_iff_indicator {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} {s : Set β} :
HasSum (f Subtype.val) a HasSum () a
theorem summable_subtype_iff_indicator {α : Type u_1} {β : Type u_2} [] [] {f : βα} {s : Set β} :
Summable (f Subtype.val) Summable ()
@[simp]
theorem hasSum_subtype_support {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} :
HasSum (f Subtype.val) a HasSum f a
theorem hasSum_fintype {α : Type u_1} {β : Type u_2} [] [] [] (f : βα) :
HasSum f (Finset.sum Finset.univ fun b => f b)
theorem Finset.hasSum {α : Type u_1} {β : Type u_2} [] [] (s : ) (f : βα) :
HasSum (f Subtype.val) (Finset.sum s fun b => f b)
theorem Finset.summable {α : Type u_1} {β : Type u_2} [] [] (s : ) (f : βα) :
Summable (f Subtype.val)
theorem Set.Finite.summable {α : Type u_1} {β : Type u_2} [] [] {s : Set β} (hs : ) (f : βα) :
Summable (f Subtype.val)
theorem hasSum_sum_of_ne_finset_zero {α : Type u_1} {β : Type u_2} [] [] {f : βα} {s : } (hf : ∀ (b : β), ¬b sf b = 0) :
HasSum f (Finset.sum s fun b => f b)

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

theorem summable_of_ne_finset_zero {α : Type u_1} {β : Type u_2} [] [] {f : βα} {s : } (hf : ∀ (b : β), ¬b sf b = 0) :
theorem summable_of_finite_support {α : Type u_1} {β : Type u_2} [] [] {f : βα} (h : ) :
theorem Summable.hasSum {α : Type u_1} {β : Type u_2} [] [] {f : βα} (ha : ) :
HasSum f (∑' (b : β), f b)
theorem hasSum_single {α : Type u_1} {β : Type u_2} [] [] {f : βα} (b : β) (hf : ∀ (b' : β), b' bf b' = 0) :
HasSum f (f b)
theorem hasSum_ite_eq {α : Type u_1} {β : Type u_2} [] [] (b : β) [DecidablePred fun x => x = b] (a : α) :
HasSum (fun b' => if b' = b then a else 0) a
theorem hasSum_pi_single {α : Type u_1} {β : Type u_2} [] [] [] (b : β) (a : α) :
HasSum () a
theorem Equiv.hasSum_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} (e : γ β) :
HasSum (f e) a HasSum f a
theorem Function.Injective.hasSum_range_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} {g : γβ} (hg : ) :
HasSum (fun x => f x) a HasSum (f g) a
theorem Equiv.summable_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} (e : γ β) :
Summable (f e)
theorem Summable.prod_symm {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : β × γα} (hf : ) :
Summable fun p => f ()
theorem Equiv.hasSum_iff_of_support {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} {g : γα} (e : ↑() ↑()) (he : ∀ (x : ↑()), g ↑(e x) = f x) :
HasSum f a HasSum g a
theorem hasSum_iff_hasSum_of_ne_zero_bij {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} {g : γα} (i : ↑()β) (hi : ∀ ⦃x y : ↑()⦄, i x = i yx = y) (hf : ) (hfg : ∀ (x : ↑()), f (i x) = g x) :
HasSum f a HasSum g a
theorem Equiv.summable_iff_of_support {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {g : γα} (e : ↑() ↑()) (he : ∀ (x : ↑()), g ↑(e x) = f x) :
theorem HasSum.map {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} {a : α} [] [] (hf : HasSum f a) {G : Type u_5} [] (g : G) (hg : ) :
HasSum (g f) (g a)
theorem Summable.map {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} [] [] (hf : ) {G : Type u_5} [] (g : G) (hg : ) :
Summable (g f)
theorem Summable.map_iff_of_leftInverse {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} [] [] {G : Type u_5} {G' : Type u_6} [] [] (g : G) (g' : G') (hg : ) (hg' : Continuous g') (hinv : Function.LeftInverse g' g) :
Summable (g f)
theorem Summable.map_iff_of_equiv {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : βα} [] [] {G : Type u_5} [] (g : G) (hg : ) (hg' : ) :
Summable (g f)

A special case of Summable.map_iff_of_leftInverse for convenience

theorem HasSum.tendsto_sum_nat {α : Type u_1} [] [] {a : α} {f : α} (h : HasSum f a) :
Filter.Tendsto (fun n => Finset.sum () fun i => f i) Filter.atTop (nhds a)

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

theorem HasSum.unique {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a₁ : α} {a₂ : α} [] :
HasSum f a₁HasSum f a₂a₁ = a₂
theorem Summable.hasSum_iff_tendsto_nat {α : Type u_1} [] [] [] {f : α} {a : α} (hf : ) :
HasSum f a Filter.Tendsto (fun n => Finset.sum () fun i => f i) Filter.atTop (nhds a)
theorem Function.Surjective.summable_iff_of_hasSum_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {α' : Type u_5} [] [] {e : α'α} (hes : ) {f : βα} {g : γα'} (he : ∀ {a : α'}, HasSum f (e a) HasSum g a) :
theorem HasSum.add {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} {a : α} {b : α} [] (hf : HasSum f a) (hg : HasSum g b) :
HasSum (fun b => f b + g b) (a + b)
theorem Summable.add {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} [] (hf : ) (hg : ) :
Summable fun b => f b + g b
theorem hasSum_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {f : γβα} {a : γα} {s : } :
(∀ (i : γ), i sHasSum (f i) (a i)) → HasSum (fun b => Finset.sum s fun i => f i b) (Finset.sum s fun i => a i)
theorem summable_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {f : γβα} {s : } (hf : ∀ (i : γ), i sSummable (f i)) :
Summable fun b => Finset.sum s fun i => f i b
theorem HasSum.add_disjoint {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} {b : α} [] {s : Set β} {t : Set β} (hs : Disjoint s t) (ha : HasSum (f Subtype.val) a) (hb : HasSum (f Subtype.val) b) :
HasSum (f Subtype.val) (a + b)
theorem hasSum_sum_disjoint {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] {ι : Type u_5} (s : ) {t : ιSet β} {a : ια} (hs : Set.Pairwise (s) (Disjoint on t)) (hf : ∀ (i : ι), i sHasSum (f Subtype.val) (a i)) :
HasSum (f Subtype.val) (Finset.sum s fun i => a i)
theorem HasSum.add_isCompl {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} {b : α} [] {s : Set β} {t : Set β} (hs : IsCompl s t) (ha : HasSum (f Subtype.val) a) (hb : HasSum (f Subtype.val) b) :
HasSum f (a + b)
theorem HasSum.add_compl {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} {b : α} [] {s : Set β} (ha : HasSum (f Subtype.val) a) (hb : HasSum (f Subtype.val) b) :
HasSum f (a + b)
theorem Summable.add_compl {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] {s : Set β} (hs : Summable (f Subtype.val)) (hsc : Summable (f Subtype.val)) :
theorem HasSum.compl_add {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} {b : α} [] {s : Set β} (ha : HasSum (f Subtype.val) a) (hb : HasSum (f Subtype.val) b) :
HasSum f (a + b)
theorem HasSum.even_add_odd {α : Type u_1} [] [] {a : α} {b : α} [] {f : α} (he : HasSum (fun k => f (2 * k)) a) (ho : HasSum (fun k => f (2 * k + 1)) b) :
HasSum f (a + b)
theorem Summable.compl_add {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] {s : Set β} (hs : Summable (f Subtype.val)) (hsc : Summable (f Subtype.val)) :
theorem Summable.even_add_odd {α : Type u_1} [] [] [] {f : α} (he : Summable fun k => f (2 * k)) (ho : Summable fun k => f (2 * k + 1)) :
theorem HasSum.sigma {α : Type u_1} {β : Type u_2} [] [] [] [] {γ : βType u_5} {f : (b : β) × γ bα} {g : βα} {a : α} (ha : HasSum f a) (hf : ∀ (b : β), HasSum (fun c => f { fst := b, snd := c }) (g b)) :
HasSum g a
theorem HasSum.prod_fiberwise {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] {f : β × γα} {g : βα} {a : α} (ha : HasSum f a) (hf : ∀ (b : β), HasSum (fun c => f (b, c)) (g b)) :
HasSum g 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_5} {f : (b : β) × γ bα} (ha : ) (hf : ∀ (b : β), Summable fun c => f { fst := b, snd := c }) :
Summable fun b => ∑' (c : γ b), f { fst := b, snd := c }
theorem HasSum.sigma_of_hasSum {α : Type u_1} {β : Type u_2} [] [] [] [] {γ : βType u_5} {f : (b : β) × γ bα} {g : βα} {a : α} (ha : HasSum g a) (hf : ∀ (b : β), HasSum (fun c => f { fst := b, snd := c }) (g b)) (hf' : ) :
HasSum f a
theorem HasSum.update' {α : Type u_5} {β : Type u_6} [] [] [] [] {f : βα} {a : α} {a' : α} (hf : HasSum f a) (b : β) (x : α) (hf' : HasSum () a') :
a + x = a' + f b

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

theorem eq_add_of_hasSum_ite {α : Type u_5} {β : Type u_6} [] [] [] [] {f : βα} {a : α} (hf : HasSum f a) (b : β) (a' : α) (hf' : HasSum (fun n => if n = b then 0 else f n) a') :
a = a' + f b

Version of hasSum_ite_sub_hasSum for AddCommMonoid rather than AddCommGroup. Rather than showing that the ite expression has a specific sum in terms of HasSum, 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 : Set β} {t : Set β} (h : s = t) :
∑' (x : s), f x = ∑' (x : t), f x
theorem tsum_eq_finsum {α : Type u_1} {β : Type u_2} [] [] {f : βα} (hf : ) :
∑' (b : β), f b = ∑ᶠ (b : β), f b
theorem tsum_eq_sum {α : Type u_1} {β : Type u_2} [] [] {f : βα} {s : } (hf : ∀ (b : β), ¬b sf b = 0) :
∑' (b : β), f b = Finset.sum s fun b => f b
@[simp]
theorem tsum_zero {α : Type u_1} {β : Type u_2} [] [] :
∑' (x : β), 0 = 0
@[simp]
theorem tsum_empty {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] :
∑' (b : β), f b = 0
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} [] [] [] (f : βα) :
∑' (b : β), f b = Finset.sum Finset.univ fun b => f b
theorem sum_eq_tsum_indicator {α : Type u_1} {β : Type u_2} [] [] (f : βα) (s : ) :
(Finset.sum s fun x => f x) = ∑' (x : β), Set.indicator (s) f x
theorem tsum_bool {α : Type u_1} [] [] (f : Boolα) :
∑' (i : Bool), f i = + f true
theorem tsum_eq_single {α : Type u_1} {β : Type u_2} [] [] {f : βα} (b : β) (hf : ∀ (b' : β), b' bf b' = 0) :
∑' (b : β), f b = f b
theorem tsum_tsum_eq_single {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] (f : βγα) (b : β) (c : γ) (hfb : ∀ (b' : β), b' bf b' c = 0) (hfc : ∀ (b' : β) (c' : γ), c' cf b' c' = 0) :
∑' (b' : β) (c' : γ), f b' c' = f b c
@[simp]
theorem tsum_ite_eq {α : Type u_1} {β : Type u_2} [] [] (b : β) [DecidablePred fun x => x = b] (a : α) :
(∑' (b' : β), if b' = b then a else 0) = a
@[simp]
theorem tsum_pi_single {α : Type u_1} {β : Type u_2} [] [] [] (b : β) (a : α) :
∑' (b' : β), Pi.single b a b' = a
@[simp]
theorem Finset.tsum_subtype {α : Type u_1} {β : Type u_2} [] [] (s : ) (f : βα) :
∑' (x : { x // x s }), f x = Finset.sum s fun x => f x
theorem Finset.tsum_subtype' {α : Type u_1} {β : Type u_2} [] [] (s : ) (f : βα) :
∑' (x : s), f x = Finset.sum s fun x => f x
@[simp]
theorem tsum_singleton {α : Type u_1} {β : Type u_2} [] [] (b : β) (f : βα) :
∑' (x : {b}), f x = f b
theorem HasSum.tsum_eq {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} [] (ha : HasSum f a) :
∑' (b : β), f b = a
theorem Summable.hasSum_iff {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} [] (h : ) :
HasSum f a ∑' (b : β), f b = a
theorem tsum_dite_right {α : Type u_1} {β : Type u_2} [] [] (P : Prop) [] (x : β¬Pα) :
(∑' (b : β), if h : P then 0 else x b h) = if h : P then 0 else ∑' (b : β), x b h
theorem tsum_dite_left {α : Type u_1} {β : Type u_2} [] [] (P : Prop) [] (x : βPα) :
(∑' (b : β), if h : P then x b h else 0) = if h : P then ∑' (b : β), x b h else 0
theorem Function.Surjective.tsum_eq_tsum_of_hasSum_iff_hasSum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {α' : Type u_5} [] [] {e : α'α} (hes : ) (h0 : e 0 = 0) {f : βα} {g : γα'} (h : ∀ {a : α'}, HasSum f (e a) HasSum g a) :
∑' (b : β), f b = e (∑' (c : γ), g c)
theorem tsum_eq_tsum_of_hasSum_iff_hasSum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {f : βα} {g : γα} (h : ∀ {a : α}, HasSum f a HasSum g a) :
∑' (b : β), f b = ∑' (c : γ), g c
theorem Equiv.tsum_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (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} [] [] [] {f : βα} {g : γα} (e : ↑() ↑()) (he : ∀ (x : ↑()), 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} [] [] {f : βα} [] {g : γα} (i : ↑()β) (hi : ∀ ⦃x y : ↑()⦄, i x = i yx = y) (hf : ) (hfg : ∀ (x : ↑()), f (i x) = g x) :
∑' (x : β), f x = ∑' (y : γ), g y

### tsum on subsets #

theorem tsum_subtype {α : Type u_1} {β : Type u_2} [] [] [] (s : Set β) (f : βα) :
∑' (x : s), f x = ∑' (x : β),
theorem tsum_subtype_eq_of_support_subset {α : Type u_1} {β : Type u_2} [] [] [] {f : βα} {s : Set β} (hs : ) :
∑' (x : s), f x = ∑' (x : β), f x
@[simp]
theorem tsum_univ {α : Type u_1} {β : Type u_2} [] [] [] (f : βα) :
∑' (x : Set.univ), f x = ∑' (x : β), f x
theorem tsum_image {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {g : γβ} (f : βα) {s : Set γ} (hg : ) :
∑' (x : ↑(g '' s)), f x = ∑' (x : s), f (g x)
theorem tsum_range {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {g : γβ} (f : βα) (hg : ) :
∑' (x : ↑()), f x = ∑' (x : γ), f (g x)
theorem tsum_add {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} [] [] (hf : ) (hg : ) :
∑' (b : β), (f b + g b) = ∑' (b : β), f b + ∑' (b : β), g b
theorem tsum_sum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] {f : γβα} {s : } (hf : ∀ (i : γ), i sSummable (f i)) :
(∑' (b : β), Finset.sum s fun i => f i b) = Finset.sum s fun i => ∑' (b : β), f i b
theorem tsum_eq_add_tsum_ite' {α : Type u_1} {β : Type u_2} [] [] [] [] {f : βα} (b : β) (hf : Summable ()) :
∑' (x : β), f x = f b + ∑' (x : β), if x = b then 0 else f x

Version of tsum_eq_add_tsum_ite for AddCommMonoid rather than AddCommGroup. Requires a different convergence assumption involving Function.update.

theorem tsum_sigma' {β : Type u_2} {δ : Type u_4} [] [] [] [] {γ : βType u_5} {f : (b : β) × γ bδ} (h₁ : ∀ (b : β), Summable fun c => f { fst := b, snd := c }) (h₂ : ) :
∑' (p : (b : β) × γ b), f p = ∑' (b : β) (c : γ b), f { fst := b, snd := c }
theorem tsum_prod' {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] {f : β × γδ} (h : ) (h₁ : ∀ (b : β), Summable fun c => f (b, c)) :
∑' (p : β × γ), f p = ∑' (b : β) (c : γ), f (b, c)
theorem tsum_comm' {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] {f : βγδ} (h : ) (h₁ : ∀ (b : β), Summable (f b)) (h₂ : ∀ (c : γ), Summable fun b => f b c) :
∑' (c : γ) (b : β), f b c = ∑' (b : β) (c : γ), f b c
theorem tsum_iSup_decode₂ {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] [] (m : βα) (m0 : m = 0) (s : γβ) :
∑' (i : ), m (⨆ (b : γ) (_ : 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_iUnion_decode₂ {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] (m : Set βα) (m0 : m = 0) (s : γSet β) :
∑' (i : ), m (⋃ (b : γ) (_ : b ), s b) = ∑' (b : γ), m (s b)

tsum_iSup_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_iSup_tsum {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] [] (m : βα) (m0 : m = 0) (R : ααProp) (m_iSup : (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_iSup_sum {α : Type u_1} {β : Type u_2} {δ : Type u_4} [] [] [] [] (m : βα) (m0 : m = 0) (R : ααProp) (m_iSup : (s : β) → R (m (⨆ (i : ), s i)) (∑' (i : ), m (s i))) (s : δβ) (t : ) :
R (m (⨆ (d : δ) (_ : d t), s d)) (Finset.sum t fun 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} [] [] [] [] (m : βα) (m0 : m = 0) (R : ααProp) (m_iSup : (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} [] [] {f : βα} [] [] {s : Set β} (hs : Summable (f Subtype.val)) (hsc : Summable (f Subtype.val)) :
∑' (x : s), f x + ∑' (x : s), f x = ∑' (x : β), f x
theorem tsum_union_disjoint {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] [] {s : Set β} {t : Set β} (hd : Disjoint s t) (hs : Summable (f Subtype.val)) (ht : Summable (f Subtype.val)) :
∑' (x : ↑(s t)), f x = ∑' (x : s), f x + ∑' (x : t), f x
theorem tsum_finset_bUnion_disjoint {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] [] {ι : Type u_5} {s : } {t : ιSet β} (hd : Set.Pairwise (s) (Disjoint on t)) (hf : ∀ (i : ι), i sSummable (f Subtype.val)) :
∑' (x : ↑(⋃ (i : ι) (_ : i s), t i)), f x = Finset.sum s fun i => ∑' (x : ↑(t i)), f x
theorem tsum_even_add_odd {α : Type u_1} [] [] [] [] {f : α} (he : Summable fun k => f (2 * k)) (ho : Summable fun k => f (2 * k + 1)) :
∑' (k : ), f (2 * k) + ∑' (k : ), f (2 * k + 1) = ∑' (k : ), f k
theorem HasSum.neg {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} (h : HasSum f a) :
HasSum (fun b => -f b) (-a)
theorem Summable.neg {α : Type u_1} {β : Type u_2} [] [] {f : βα} (hf : ) :
Summable fun b => -f b
theorem Summable.of_neg {α : Type u_1} {β : Type u_2} [] [] {f : βα} (hf : Summable fun b => -f b) :
theorem summable_neg_iff {α : Type u_1} {β : Type u_2} [] [] {f : βα} :
(Summable fun b => -f b)
theorem HasSum.sub {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} {a₁ : α} {a₂ : α} (hf : HasSum f a₁) (hg : HasSum g a₂) :
HasSum (fun b => f b - g b) (a₁ - a₂)
theorem Summable.sub {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} (hf : ) (hg : ) :
Summable fun b => f b - g b
theorem Summable.trans_sub {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} (hg : ) (hfg : Summable fun b => f b - g b) :
theorem summable_iff_of_summable_sub {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} (hfg : Summable fun b => f b - g b) :
theorem HasSum.update {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a₁ : α} (hf : HasSum f a₁) (b : β) [] (a : α) :
HasSum () (a - f b + a₁)
theorem Summable.update {α : Type u_1} {β : Type u_2} [] [] {f : βα} (hf : ) (b : β) [] (a : α) :
theorem HasSum.hasSum_compl_iff {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a₁ : α} {a₂ : α} {s : Set β} (hf : HasSum (f Subtype.val) a₁) :
HasSum (f Subtype.val) a₂ HasSum f (a₁ + a₂)
theorem HasSum.hasSum_iff_compl {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a₁ : α} {a₂ : α} {s : Set β} (hf : HasSum (f Subtype.val) a₁) :
HasSum f a₂ HasSum (f Subtype.val) (a₂ - a₁)
theorem Summable.summable_compl_iff {α : Type u_1} {β : Type u_2} [] [] {f : βα} {s : Set β} (hf : Summable (f Subtype.val)) :
Summable (f Subtype.val)
theorem Finset.hasSum_compl_iff {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} (s : ) :
HasSum (fun x => f x) a HasSum f (a + Finset.sum s fun i => f i)
theorem Finset.hasSum_iff_compl {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} (s : ) :
HasSum f a HasSum (fun x => f x) (a - Finset.sum s fun i => f i)
theorem Finset.summable_compl_iff {α : Type u_1} {β : Type u_2} [] [] {f : βα} (s : ) :
(Summable fun x => f x)
theorem Set.Finite.summable_compl_iff {α : Type u_1} {β : Type u_2} [] [] {f : βα} {s : Set β} (hs : ) :
Summable (f Subtype.val)
theorem hasSum_ite_sub_hasSum {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} [] (hf : HasSum f a) (b : β) :
HasSum (fun n => if n = b then 0 else f n) (a - f b)
theorem tsum_neg {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] :
∑' (b : β), -f b = -∑' (b : β), f b
theorem tsum_sub {α : Type u_1} {β : Type u_2} [] [] {f : βα} {g : βα} [] (hf : ) (hg : ) :
∑' (b : β), (f b - g b) = ∑' (b : β), f b - ∑' (b : β), g b
theorem sum_add_tsum_compl {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] {s : } (hf : ) :
(Finset.sum s fun x => f x) + ∑' (x : (s)), f x = ∑' (x : β), f x
theorem tsum_eq_add_tsum_ite {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] [] (hf : ) (b : β) :
∑' (n : β), f n = f b + ∑' (n : β), if n = b then 0 else 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 hasSum_nat_add_iff {α : Type u_1} [] [] {f : α} (k : ) {a : α} :
HasSum (fun n => f (n + k)) a HasSum f (a + Finset.sum () fun i => f i)
theorem summable_nat_add_iff {α : Type u_1} [] [] {f : α} (k : ) :
(Summable fun n => f (n + k))
theorem hasSum_nat_add_iff' {α : Type u_1} [] [] {f : α} (k : ) {a : α} :
HasSum (fun n => f (n + k)) (a - Finset.sum () fun i => f i) HasSum f a
theorem HasSum.sum_range_add {M : Type u_5} [] [] [] {f : M} {k : } {a : M} (h : HasSum (fun n => f (n + k)) a) :
HasSum f ((Finset.sum () fun i => f i) + a)
theorem sum_add_tsum_nat_add' {M : Type u_5} [] [] [] [] {f : M} {k : } (h : Summable fun n => f (n + k)) :
(Finset.sum () fun i => f i) + ∑' (i : ), f (i + k) = ∑' (i : ), f i
theorem sum_add_tsum_nat_add {α : Type u_1} [] [] [] {f : α} (k : ) (h : ) :
(Finset.sum () fun i => f i) + ∑' (i : ), f (i + k) = ∑' (i : ), f i
theorem tsum_eq_zero_add' {M : Type u_5} [] [] [] [] {f : M} (hf : Summable fun n => f (n + 1)) :
∑' (b : ), f b = f 0 + ∑' (b : ), f (b + 1)
theorem tsum_eq_zero_add {α : Type u_1} [] [] [] {f : α} (hf : ) :
∑' (b : ), f b = f 0 + ∑' (b : ), f (b + 1)
theorem tendsto_sum_nat_add {α : Type u_1} [] [] [] (f : α) :
Filter.Tendsto (fun i => ∑' (k : ), f (k + i)) Filter.atTop (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 HasSum.int_rec {α : Type u_1} [] [] {a : α} {b : α} {f : α} {g : α} (hf : HasSum f a) (hg : HasSum g b) :
HasSum (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 HasSum.nonneg_add_neg {α : Type u_1} [] [] {a : α} {b : α} {f : α} (hnonneg : HasSum (fun n => f n) a) (hneg : HasSum (fun n => f (-↑())) b) :
HasSum f (a + b)
theorem HasSum.pos_add_zero_add_neg {α : Type u_1} [] [] {a : α} {b : α} {f : α} (hpos : HasSum (fun n => f (n + 1)) a) (hneg : HasSum (fun n => f (-↑())) b) :
HasSum f (a + f 0 + b)
theorem summable_int_of_summable_nat {α : Type u_1} [] [] {f : α} (hp : Summable fun n => f n) (hn : Summable fun n => f (-n)) :
theorem HasSum.sum_nat_of_sum_int {α : Type u_5} [] [] [] {a : α} {f : α} (hf : HasSum f a) :
HasSum (fun n => f n + f (-n)) (a + f 0)
theorem summable_iff_cauchySeq_finset {α : Type u_1} {β : Type u_2} [] [] [] {f : βα} :
CauchySeq fun s => Finset.sum s fun b => f b

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

theorem cauchySeq_finset_iff_vanishing {α : Type u_1} {β : Type u_2} [] [] [] {f : βα} :
(CauchySeq fun s => Finset.sum s fun b => f b) ∀ (e : Set α), e nhds 0s, ∀ (t : ), Disjoint t s(Finset.sum t fun b => f b) e
theorem tendsto_tsum_compl_atTop_zero {α : Type u_1} {β : Type u_2} [] [] [] (f : βα) :
Filter.Tendsto (fun s => ∑' (b : { x // ¬x s }), f b) Filter.atTop (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 0s, ∀ (t : ), Disjoint t s(Finset.sum t fun b => f b) e
theorem Summable.summable_of_eq_zero_or_self {α : Type u_1} {β : Type u_2} [] [] [] {f : βα} {g : βα} [] (hf : ) (h : ∀ (b : β), g b = 0 g b = f b) :
theorem Summable.indicator {α : Type u_1} {β : Type u_2} [] [] [] {f : βα} [] (hf : ) (s : Set β) :
theorem Summable.comp_injective {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {f : βα} [] {i : γβ} (hf : ) (hi : ) :
theorem Summable.subtype {α : Type u_1} {β : Type u_2} [] [] [] {f : βα} [] (hf : ) (s : Set β) :
Summable (f Subtype.val)
theorem summable_subtype_and_compl {α : Type u_1} {β : Type u_2} [] [] [] {f : βα} [] {s : Set β} :
((Summable fun x => f x) Summable fun x => f x)
theorem Summable.sigma_factor {α : Type u_1} {β : Type u_2} [] [] [] [] {γ : βType u_5} {f : (b : β) × γ bα} (ha : ) (b : β) :
Summable fun c => f { fst := b, snd := c }
theorem Summable.sigma {α : Type u_1} {β : Type u_2} [] [] [] [] {γ : βType u_5} {f : (b : β) × γ bα} (ha : ) :
Summable fun b => ∑' (c : γ b), f { fst := b, snd := c }
theorem Summable.prod_factor {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] {f : β × γα} (h : ) (b : β) :
Summable fun c => f (b, c)
theorem tsum_sigma {α : Type u_1} {β : Type u_2} [] [] [] [] [] {γ : βType u_5} {f : (b : β) × γ bα} (ha : ) :
∑' (p : (b : β) × γ b), f p = ∑' (b : β) (c : γ b), f { fst := b, snd := c }
theorem tsum_prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] [] {f : β × γα} (h : ) :
∑' (p : β × γ), f p = ∑' (b : β) (c : γ), f (b, c)
theorem tsum_comm {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] [] {f : βγα} (h : ) :
∑' (c : γ) (b : β), f b c = ∑' (b : β) (c : γ), f b c
theorem tsum_subtype_add_tsum_subtype_compl {α : Type u_1} {β : Type u_2} [] [] [] [] [] {f : βα} (hf : ) (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} [] [] [] [] [] {f : βα} (hf : ) (s : ) :
(Finset.sum s fun 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 : ) ⦃e : Set G (he : e nhds 0) :
s, ∀ (t : ), Disjoint t s(Finset.sum t fun k => f k) e
theorem Summable.tendsto_cofinite_zero {α : Type u_1} {G : Type u_5} [] [] {f : αG} (hf : ) :
Filter.Tendsto f Filter.cofinite (nhds 0)

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

theorem Summable.tendsto_atTop_zero {G : Type u_5} [] [] {f : G} (hf : ) :
Filter.Tendsto f Filter.atTop (nhds 0)
theorem Summable.countable_support {α : Type u_1} {G : Type u_5} [] [] {f : αG} [] (hf : ) :
theorem HasSum.const_smul {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] [] {f : βα} {a : α} (b : γ) (hf : HasSum f a) :
HasSum (fun i => b f i) (b a)
theorem Summable.const_smul {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] [] {f : βα} (b : γ) (hf : ) :
Summable fun i => b f i
theorem tsum_const_smul {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] [] {f : βα} [] (b : γ) (hf : ) :
∑' (i : β), b f i = b ∑' (i : β), f i

Infinite sums commute with scalar multiplication. Version for scalars living in a Monoid, but requiring a summability hypothesis.

theorem tsum_const_smul' {α : Type u_1} {β : Type u_2} [] [] {f : βα} {γ : Type u_5} [] [] [] [] (g : γ) :
∑' (i : β), g f i = g ∑' (i : β), f i

Infinite sums commute with scalar multiplication. Version for scalars living in a Group, but not requiring any summability hypothesis.

theorem tsum_const_smul'' {α : Type u_1} {β : Type u_2} [] [] {f : βα} {γ : Type u_5} [] [Module γ α] [] [] (g : γ) :
∑' (i : β), g f i = g ∑' (i : β), f i

Infinite sums commute with scalar multiplication. Version for scalars living in a DivisionRing; no summability hypothesis. This could be made to work for a [GroupWithZero γ] if there was such a thing as DistribMulActionWithZero.

### Product and pi types #

theorem HasSum.prod_mk {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] [] {f : βα} {g : βγ} {a : α} {b : γ} (hf : HasSum f a) (hg : HasSum g b) :
HasSum (fun x => (f x, g x)) (a, b)
theorem Pi.hasSum {α : Type u_1} {ι : Type u_5} {π : αType u_6} [(x : α) → AddCommMonoid (π x)] [(x : α) → TopologicalSpace (π x)] {f : ι(x : α) → π x} {g : (x : α) → π x} :
HasSum f g ∀ (x : α), HasSum (fun i => f i x) (g x)
theorem Pi.summable {α : Type u_1} {ι : Type u_5} {π : αType u_6} [(x : α) → AddCommMonoid (π x)] [(x : α) → TopologicalSpace (π x)] {f : ι(x : α) → π x} :
∀ (x : α), Summable fun i => f i x
theorem tsum_apply {α : Type u_1} {ι : Type u_5} {π : αType u_6} [(x : α) → AddCommMonoid (π x)] [(x : α) → TopologicalSpace (π x)] [∀ (x : α), T2Space (π x)] {f : ι(x : α) → π x} {x : α} (hf : ) :
tsum ((x : α) → π x) Pi.addCommMonoid Pi.topologicalSpace ι (fun i => f i) x = ∑' (i : ι), f i x

### Multiplicative opposite #

theorem HasSum.op {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} (hf : HasSum f a) :
HasSum (fun a => MulOpposite.op (f a)) ()
theorem Summable.op {α : Type u_1} {β : Type u_2} [] [] {f : βα} (hf : ) :
Summable (MulOpposite.op f)
theorem HasSum.unop {α : Type u_1} {β : Type u_2} [] [] {f : βαᵐᵒᵖ} {a : αᵐᵒᵖ} (hf : HasSum f a) :
HasSum (fun a => MulOpposite.unop (f a)) ()
theorem Summable.unop {α : Type u_1} {β : Type u_2} [] [] {f : βαᵐᵒᵖ} (hf : ) :
Summable (MulOpposite.unop f)
@[simp]
theorem hasSum_op {α : Type u_1} {β : Type u_2} [] [] {f : βα} {a : α} :
HasSum (fun a => MulOpposite.op (f a)) () HasSum f a
@[simp]
theorem hasSum_unop {α : Type u_1} {β : Type u_2} [] [] {f : βαᵐᵒᵖ} {a : αᵐᵒᵖ} :
HasSum (fun a => MulOpposite.unop (f a)) () HasSum f a
@[simp]
theorem summable_op {α : Type u_1} {β : Type u_2} [] [] {f : βα} :
(Summable fun a => MulOpposite.op (f a))
@[simp]
theorem summable_unop {α : Type u_1} {β : Type u_2} [] [] {f : βαᵐᵒᵖ} :
(Summable fun a => MulOpposite.unop (f a))
theorem tsum_op {α : Type u_1} {β : Type u_2} [] [] {f : βα} [] :
∑' (x : β), MulOpposite.op (f x) = MulOpposite.op (∑' (x : β), f x)
theorem tsum_unop {α : Type u_1} {β : Type u_2} [] [] [] {f : βαᵐᵒᵖ} :
∑' (x : β), MulOpposite.unop (f x) = MulOpposite.unop (∑' (x : β), f x)

### Interaction with the star #

theorem HasSum.star {α : Type u_1} {β : Type u_2} [] [] [] [] {f : βα} {a : α} (h : HasSum f a) :
HasSum (fun b => star (f b)) (star a)
theorem Summable.star {α : Type u_1} {β : Type u_2} [] [] [] [] {f : βα} (hf : ) :
Summable fun b => star (f b)
theorem Summable.ofStar {α : Type u_1} {β : Type u_2} [] [] [] [] {f : βα} (hf : Summable fun b => star (f b)) :
@[simp]
theorem summable_star_iff {α : Type u_1} {β : Type u_2} [] [] [] [] {f : βα} :
(Summable fun b => 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 : βα} [] :
star (∑' (b : β), f b) = ∑' (b : β), star (f b)
abbrev AddAction.automorphize.match_1 {α : Type u_2} {β : Type u_1} [] [] (b₁ : β) (b₂ : β) (motive : b₁ b₂Prop) :
(h : b₁ b₂) → ((a : α) → (ha : a +ᵥ b₂ = b₁) → motive (_ : y, (fun m => m +ᵥ b₂) y = b₁)) → motive h
Instances For
noncomputable def AddAction.automorphize {α : Type u_1} {β : Type u_2} {M : Type u_5} [] [] [] [] [] (f : βM) :
M

Given an additive group α acting on a type β, and a function f : β → M, we automorphize f to a function β ⧸ α → M by summing over α orbits, b ↦ ∑' (a : α), f(a • b).

Instances For
theorem AddAction.automorphize.proof_1 {α : Type u_2} {β : Type u_1} {M : Type u_3} [] [] [] [] [] (f : βM) (b₁ : β) (b₂ : β) :
b₁ b₂(fun b => ∑' (a : α), f (a +ᵥ b)) b₁ = (fun b => ∑' (a : α), f (a +ᵥ b)) b₂
noncomputable def MulAction.automorphize {α : Type u_1} {β : Type u_2} {M : Type u_5} [] [] [] [] [] (f : βM) :
M

Given a group α acting on a type β, and a function f : β → M, we "automorphize" f to a function β ⧸ α → M by summing over α orbits, b ↦ ∑' (a : α), f(a • b).

Instances For
theorem MulAction.automorphize_smul_left {α : Type u_1} {β : Type u_2} {M : Type u_5} [] [] [] {R : Type u_6} [] [Module R M] [] [] [] (f : βM) (g : R) :
MulAction.automorphize (g Quotient.mk' f) =

Automorphization of a function into an R-module distributes, that is, commutes with the R-scalar multiplication.

theorem AddAction.automorphize_smul_left {α : Type u_1} {β : Type u_2} {M : Type u_5} [] [] [] {R : Type u_6} [] [Module R M] [] [] [] (f : βM) (g : R) :

Automorphization of a function into an R-module distributes, that is, commutes with the R-scalar multiplication.

noncomputable def QuotientAddGroup.automorphize {M : Type u_5} [] [] [] {G : Type u_7} [] {Γ : } (f : GM) :
G ΓM

Given a subgroup Γ of an additive group G, and a function f : G → M, we automorphize f to a function G ⧸ Γ → M by summing over Γ orbits, g ↦ ∑' (γ : Γ), f(γ • g).

Instances For
noncomputable def QuotientGroup.automorphize {M : Type u_5} [] [] [] {G : Type u_7} [] {Γ : } (f : GM) :
G ΓM

Given a subgroup Γ of a group G, and a function f : G → M, we "automorphize" f to a function G ⧸ Γ → M by summing over Γ orbits, g ↦ ∑' (γ : Γ), f(γ • g).

Instances For
theorem QuotientGroup.automorphize_smul_left {M : Type u_5} [] [] [] {R : Type u_6} [] [Module R M] [] {G : Type u_7} [] {Γ : } (f : GM) (g : G ΓR) :
QuotientGroup.automorphize (g Quotient.mk' f) =

Automorphization of a function into an R-module distributes, that is, commutes with the R-scalar multiplication.

theorem QuotientAddGroup.automorphize_smul_left {M : Type u_5} [] [] [] {R : Type u_6} [] [Module R M] [] {G : Type u_7} [] {Γ : } (f : GM) (g : G ΓR) :

Automorphization of a function into an R-module distributes, that is, commutes with the R-scalar multiplication.