File: Mathlib/Topology/Algebra/InfiniteSum/Defs.lean

full_name: HasSum
code: /-- Infinite product on a topological monoid

The `atTop` filter on `Finset β` is the limit of all finite sets towards the entire type. So we take
the product over bigger and bigger sets. This product operation is invariant under reordering.

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

These are defined in an identical way to infinite sums (`HasSum`). For example, we say that
the function `ℕ → ℝ` sending `n` to `1 / 2` has a product of `0`, rather than saying that it does
not converge as some authors would. -/
@[to_additive "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](http://us.metamath.org/mpeuni/df-tsms.html).

For the definition and many statements, `α` does not need to be a topological monoid. We only add
this assumption later, for the lemmas where it is relevant."]
def HasProd (f : β → α) (a : α) : Prop 
goal: Prop

full_name: HasProd
code: /-- Infinite product on a topological monoid

The `atTop` filter on `Finset β` is the limit of all finite sets towards the entire type. So we take
the product over bigger and bigger sets. This product operation is invariant under reordering.

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

These are defined in an identical way to infinite sums (`HasSum`). For example, we say that
the function `ℕ → ℝ` sending `n` to `1 / 2` has a product of `0`, rather than saying that it does
not converge as some authors would. -/
@[to_additive "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](http://us.metamath.org/mpeuni/df-tsms.html).

For the definition and many statements, `α` does not need to be a topological monoid. We only add
this assumption later, for the lemmas where it is relevant."]
def HasProd (f : β → α) (a : α) : Prop 
goal: Prop

full_name: Multipliable
code: /-- `Multipliable f` means that `f` has some (infinite) product. Use `tprod` to get the value. -/
@[to_additive "`Summable f` means that `f` has some (infinite) sum. Use `tsum` to get the value."]
def Multipliable (f : β → α) : Prop 
goal: Prop

full_name: Summable
code: /-- `Multipliable f` means that `f` has some (infinite) product. Use `tprod` to get the value. -/
@[to_additive "`Summable f` means that `f` has some (infinite) sum. Use `tsum` to get the value."]
def Multipliable (f : β → α) : Prop 
goal: Prop

full_name: tsum_def
code: /-- `∏' i, f i` is the product of `f` it exists, or 1 otherwise. -/
@[to_additive "`∑' i, f i` is the sum of `f` it exists, or 0 otherwise."]
noncomputable irreducible_def tprod {β} (f : β → α) 
goal: tsum f = if h : Summable f then if (Function.support f).Finite then finsum f else Exists.choose h else 0

full_name: tsum
code: /-- `∏' i, f i` is the product of `f` it exists, or 1 otherwise. -/
@[to_additive "`∑' i, f i` is the sum of `f` it exists, or 0 otherwise."]
noncomputable irreducible_def tprod {β} (f : β → α) 
goal: α

full_name: tprod
code: /-- `∏' i, f i` is the product of `f` it exists, or 1 otherwise. -/
@[to_additive "`∑' i, f i` is the sum of `f` it exists, or 0 otherwise."]
noncomputable irreducible_def tprod {β} (f : β → α) 
goal: α

full_name: tprod_def
code: /-- `∏' i, f i` is the product of `f` it exists, or 1 otherwise. -/
@[to_additive "`∑' i, f i` is the sum of `f` it exists, or 0 otherwise."]
noncomputable irreducible_def tprod {β} (f : β → α) 
goal: tprod f = if h : Multipliable f then if (Function.mulSupport f).Finite then finprod f else Exists.choose h else 1

full_name: wrapped._@.Mathlib.Topology.Algebra.InfiniteSum.Defs._hyg.100
code: /-- `∏' i, f i` is the product of `f` it exists, or 1 otherwise. -/
@[to_additive "`∑' i, f i` is the sum of `f` it exists, or 0 otherwise."]
noncomputable irreducible_def tprod {β} (f : β → α) 
goal: Subtype (Eq @definition✝)

full_name: definition._@.Mathlib.Topology.Algebra.InfiniteSum.Defs._hyg.100
code: /-- `∏' i, f i` is the product of `f` it exists, or 1 otherwise. -/
@[to_additive "`∑' i, f i` is the sum of `f` it exists, or 0 otherwise."]
noncomputable irreducible_def tprod {β} (f : β → α) 
goal: α

full_name: «_aux_Mathlib_Topology_Algebra_InfiniteSum_Defs___macroRules_term∏'_,__1»
code: @[inherit_doc tprod]
notation3 "∏' "(...)", "r:67:(scoped f => tprod f) => r
goal: Lean.Macro

full_name: «_aux_Mathlib_Topology_Algebra_InfiniteSum_Defs___macroRules_term∑'_,__1»
code: @[inherit_doc tsum]
notation3 "∑' "(...)", "r:67:(scoped f => tsum f) => r
goal: Lean.Macro

full_name: HasProd.multipliable
code: @[to_additive]
theorem HasProd.multipliable (h : HasProd f a) : Multipliable f 
goal: Multipliable f

full_name: HasSum.summable
code: @[to_additive]
theorem HasProd.multipliable (h : HasProd f a) : Multipliable f 
goal: Summable f

full_name: tprod_eq_one_of_not_multipliable
code: @[to_additive]
theorem tprod_eq_one_of_not_multipliable (h : ¬Multipliable f) : ∏' b, f b = 1 
goal: ∏' (b : β), f b = 1

full_name: tsum_eq_zero_of_not_summable
code: @[to_additive]
theorem tprod_eq_one_of_not_multipliable (h : ¬Multipliable f) : ∏' b, f b = 1 
goal: ∑' (b : β), f b = 0

full_name: Function.Injective.hasSum_iff
code: @[to_additive]
theorem Function.Injective.hasProd_iff {g : γ → β} (hg : Injective g)
    (hf : ∀ x, x ∉ Set.range g → f x = 1) : HasProd (f ∘ g) a ↔ HasProd f a 
goal: HasSum (f ∘ g) a ↔ HasSum f a

full_name: Function.Injective.hasProd_iff
code: @[to_additive]
theorem Function.Injective.hasProd_iff {g : γ → β} (hg : Injective g)
    (hf : ∀ x, x ∉ Set.range g → f x = 1) : HasProd (f ∘ g) a ↔ HasProd f a 
goal: HasProd (f ∘ g) a ↔ HasProd f a

full_name: hasSum_subtype_iff_of_support_subset
code: @[to_additive]
theorem hasProd_subtype_iff_of_mulSupport_subset {s : Set β} (hf : mulSupport f ⊆ s) :
    HasProd (f ∘ (↑) : s → α) a ↔ HasProd f a 
goal: HasSum (f ∘ Subtype.val) a ↔ HasSum f a

full_name: hasProd_subtype_iff_of_mulSupport_subset
code: @[to_additive]
theorem hasProd_subtype_iff_of_mulSupport_subset {s : Set β} (hf : mulSupport f ⊆ s) :
    HasProd (f ∘ (↑) : s → α) a ↔ HasProd f a 
goal: HasProd (f ∘ Subtype.val) a ↔ HasProd f a

full_name: hasSum_fintype
code: @[to_additive]
theorem hasProd_fintype [Fintype β] (f : β → α) : HasProd f (∏ b, f b) 
goal: HasSum f (∑ b : β, f b)

full_name: hasProd_fintype
code: @[to_additive]
theorem hasProd_fintype [Fintype β] (f : β → α) : HasProd f (∏ b, f b) 
goal: HasProd f (∏ b : β, f b)

full_name: Finset.hasSum
code: @[to_additive]
protected theorem Finset.hasProd (s : Finset β) (f : β → α) :
    HasProd (f ∘ (↑) : (↑s : Set β) → α) (∏ b ∈ s, f b) 
goal: HasSum (f ∘ Subtype.val) (∑ b ∈ s, f b)

full_name: Finset.hasProd
code: @[to_additive]
protected theorem Finset.hasProd (s : Finset β) (f : β → α) :
    HasProd (f ∘ (↑) : (↑s : Set β) → α) (∏ b ∈ s, f b) 
goal: HasProd (f ∘ Subtype.val) (∏ b ∈ s, f b)

full_name: hasSum_sum_of_ne_finset_zero
code: /-- If a function `f` is `1` outside of a finite set `s`, then it `HasProd` `∏ b ∈ s, f b`. -/
@[to_additive "If a function `f` vanishes outside of a finite set `s`, then it `HasSum`
`∑ b ∈ s, f b`."]
theorem hasProd_prod_of_ne_finset_one (hf : ∀ b ∉ s, f b = 1) :
    HasProd f (∏ b ∈ s, f b) 
goal: HasSum f (∑ b ∈ s, f b)

full_name: hasProd_prod_of_ne_finset_one
code: /-- If a function `f` is `1` outside of a finite set `s`, then it `HasProd` `∏ b ∈ s, f b`. -/
@[to_additive "If a function `f` vanishes outside of a finite set `s`, then it `HasSum`
`∑ b ∈ s, f b`."]
theorem hasProd_prod_of_ne_finset_one (hf : ∀ b ∉ s, f b = 1) :
    HasProd f (∏ b ∈ s, f b) 
goal: HasProd f (∏ b ∈ s, f b)

full_name: summable_of_ne_finset_zero
code: @[to_additive]
theorem multipliable_of_ne_finset_one (hf : ∀ b ∉ s, f b = 1) : Multipliable f 
goal: Summable f

full_name: multipliable_of_ne_finset_one
code: @[to_additive]
theorem multipliable_of_ne_finset_one (hf : ∀ b ∉ s, f b = 1) : Multipliable f 
goal: Multipliable f

full_name: Summable.hasSum
code: @[to_additive]
theorem Multipliable.hasProd (ha : Multipliable f) : HasProd f (∏' b, f b) 
goal: HasSum f (∑' (b : β), f b)

full_name: Multipliable.hasProd
code: @[to_additive]
theorem Multipliable.hasProd (ha : Multipliable f) : HasProd f (∏' b, f b) 
goal: HasProd f (∏' (b : β), f b)

full_name: HasProd.unique
code: @[to_additive]
theorem HasProd.unique {a₁ a₂ : α} [T2Space α] : HasProd f a₁ → HasProd f a₂ → a₁ = a₂ 
goal: HasProd f a₁ → HasProd f a₂ → a₁ = a₂

full_name: HasSum.unique
code: @[to_additive]
theorem HasProd.unique {a₁ a₂ : α} [T2Space α] : HasProd f a₁ → HasProd f a₂ → a₁ = a₂ 
goal: HasSum f a₁ → HasSum f a₂ → a₁ = a₂

full_name: HasProd.tprod_eq
code: @[to_additive]
theorem HasProd.tprod_eq (ha : HasProd f a) : ∏' b, f b = a 
goal: ∏' (b : β), f b = a

full_name: HasSum.tsum_eq
code: @[to_additive]
theorem HasProd.tprod_eq (ha : HasProd f a) : ∏' b, f b = a 
goal: ∑' (b : β), f b = a

full_name: Summable.hasSum_iff
code: @[to_additive]
theorem Multipliable.hasProd_iff (h : Multipliable f) : HasProd f a ↔ ∏' b, f b = a 
goal: HasSum f a ↔ ∑' (b : β), f b = a

full_name: Multipliable.hasProd_iff
code: @[to_additive]
theorem Multipliable.hasProd_iff (h : Multipliable f) : HasProd f a ↔ ∏' b, f b = a 
goal: HasProd f a ↔ ∏' (b : β), f b = a