Module docstring
{"# Sums in WithTop
This file proves results about finite sums over monoids extended by a bottom or top element. "}
{"# Sums in WithTop
This file proves results about finite sums over monoids extended by a bottom or top element. "}
WithTop.coe_sum
theorem
(s : Finset ι) (f : ι → α) : ∑ i ∈ s, f i = ∑ i ∈ s, (f i : WithTop α)
@[simp, norm_cast] lemma coe_sum (s : Finset ι) (f : ι → α) :
∑ i ∈ s, f i = ∑ i ∈ s, (f i : WithTop α) := map_sum addHom f s
WithTop.sum_eq_top
theorem
: ∑ i ∈ s, f i = ⊤ ↔ ∃ i ∈ s, f i = ⊤
/-- A sum is infinite iff one term is infinite. -/
@[simp] lemma sum_eq_top : ∑ i ∈ s, f i∑ i ∈ s, f i = ⊤ ↔ ∃ i ∈ s, f i = ⊤ := by
induction s using Finset.cons_induction <;> simp [*]
WithTop.sum_ne_top
theorem
: ∑ i ∈ s, f i ≠ ⊤ ↔ ∀ i ∈ s, f i ≠ ⊤
/-- A sum is finite iff all terms are finite. -/
lemma sum_ne_top : ∑ i ∈ s, f i∑ i ∈ s, f i ≠ ⊤∑ i ∈ s, f i ≠ ⊤ ↔ ∀ i ∈ s, f i ≠ ⊤ := by simp
WithTop.sum_lt_top
theorem
: ∑ i ∈ s, f i < ⊤ ↔ ∀ i ∈ s, f i < ⊤
/-- A sum is finite iff all terms are finite. -/
@[simp] lemma sum_lt_top : ∑ i ∈ s, f i∑ i ∈ s, f i < ⊤ ↔ ∀ i ∈ s, f i < ⊤ := by
simp [WithTop.lt_top_iff_ne_top]
WithTop.prod_ne_top
theorem
(h : ∀ i ∈ s, f i ≠ ⊤) : ∏ i ∈ s, f i ≠ ⊤
/-- A product of finite terms is finite. -/
lemma prod_ne_top (h : ∀ i ∈ s, f i ≠ ⊤) : ∏ i ∈ s, f i∏ i ∈ s, f i ≠ ⊤ :=
prod_induction f (· ≠ ⊤) (fun _ _ ↦ mul_ne_top) coe_ne_top h
WithTop.prod_lt_top
theorem
[LT α] (h : ∀ i ∈ s, f i < ⊤) : ∏ i ∈ s, f i < ⊤
/-- A product of finite terms is finite. -/
lemma prod_lt_top [LT α] (h : ∀ i ∈ s, f i < ⊤) : ∏ i ∈ s, f i < ⊤ :=
prod_induction f (· < ⊤) (fun _ _ ↦ mul_lt_top) (coe_lt_top _) h
WithBot.coe_sum
theorem
(s : Finset ι) (f : ι → α) : ∑ i ∈ s, f i = ∑ i ∈ s, (f i : WithBot α)
@[simp, norm_cast] lemma coe_sum (s : Finset ι) (f : ι → α) :
∑ i ∈ s, f i = ∑ i ∈ s, (f i : WithBot α) := map_sum addHom f s
WithBot.sum_eq_bot_iff
theorem
: ∑ i ∈ s, f i = ⊥ ↔ ∃ i ∈ s, f i = ⊥
/-- A sum is infinite iff one term is infinite. -/
lemma sum_eq_bot_iff : ∑ i ∈ s, f i∑ i ∈ s, f i = ⊥ ↔ ∃ i ∈ s, f i = ⊥ := by
induction s using Finset.cons_induction <;> simp [*]
WithBot.bot_lt_sum_iff
theorem
: ⊥ < ∑ i ∈ s, f i ↔ ∀ i ∈ s, ⊥ < f i
/-- A sum is finite iff all terms are finite. -/
lemma bot_lt_sum_iff : ⊥⊥ < ∑ i ∈ s, f i ↔ ∀ i ∈ s, ⊥ < f i := by
simp only [WithBot.bot_lt_iff_ne_bot, ne_eq, sum_eq_bot_iff, not_exists, not_and]
WithBot.sum_lt_bot
theorem
(h : ∀ i ∈ s, f i ≠ ⊥) : ⊥ < ∑ i ∈ s, f i
/-- A sum of finite terms is finite. -/
lemma sum_lt_bot (h : ∀ i ∈ s, f i ≠ ⊥) : ⊥ < ∑ i ∈ s, f i :=
bot_lt_sum_iff.2 fun i hi ↦ WithBot.bot_lt_iff_ne_bot.2 (h i hi)
WithBot.prod_ne_bot
theorem
(h : ∀ i ∈ s, f i ≠ ⊥) : ∏ i ∈ s, f i ≠ ⊥
/-- A product of finite terms is finite. -/
lemma prod_ne_bot (h : ∀ i ∈ s, f i ≠ ⊥) : ∏ i ∈ s, f i∏ i ∈ s, f i ≠ ⊥ :=
prod_induction f (· ≠ ⊥) (fun _ _ ↦ mul_ne_bot) coe_ne_bot h
WithBot.bot_lt_prod
theorem
[LT α] (h : ∀ i ∈ s, ⊥ < f i) : ⊥ < ∏ i ∈ s, f i
/-- A product of finite terms is finite. -/
lemma bot_lt_prod [LT α] (h : ∀ i ∈ s, ⊥ < f i) : ⊥ < ∏ i ∈ s, f i :=
prod_induction f (⊥ < ·) (fun _ _ ↦ bot_lt_mul) (bot_lt_coe _) h