Documentation

Mathlib.Algebra.BigOperators.Multiset.Basic

Sums and products over multisets #

In this file we define products and sums indexed by multisets. This is later used to define products and sums indexed by finite sets.

Main declarations #

Implementation notes #

Nov 2022: To speed the Lean 4 port, lemmas requiring extra algebra imports (data.list.big_operators.lemmas rather than .basic) have been moved to a separate file, algebra.big_operators.multiset.lemmas. This split does not need to be permanent.

theorem Multiset.sum.proof_1 {α : Type u_1} [AddCommMonoid α] (x : α) (y : α) (z : α) :
x + (y + z) = y + (x + z)
def Multiset.sum {α : Type u_2} [AddCommMonoid α] :
Multiset α → α

Sum of a multiset given a commutative additive monoid structure on α. sum {a, b, c} = a + b + c

Equations
Instances For
    def Multiset.prod {α : Type u_2} [CommMonoid α] :
    Multiset α → α

    Product of a multiset given a commutative monoid structure on α. prod {a, b, c} = a * b * c

    Equations
    • Multiset.prod = Multiset.foldr (fun x x_1 => x * x_1) (_ : ∀ (x y z : α), x * (y * z) = y * (x * z)) 1
    Instances For
      theorem Multiset.sum_eq_foldr {α : Type u_2} [AddCommMonoid α] (s : Multiset α) :
      Multiset.sum s = Multiset.foldr (fun x x_1 => x + x_1) (_ : ∀ (x y z : α), x + (y + z) = y + (x + z)) 0 s
      theorem Multiset.prod_eq_foldr {α : Type u_2} [CommMonoid α] (s : Multiset α) :
      Multiset.prod s = Multiset.foldr (fun x x_1 => x * x_1) (_ : ∀ (x y z : α), x * (y * z) = y * (x * z)) 1 s
      theorem Multiset.sum_eq_foldl {α : Type u_2} [AddCommMonoid α] (s : Multiset α) :
      Multiset.sum s = Multiset.foldl (fun x x_1 => x + x_1) (_ : ∀ (x y z : α), x + y + z = x + z + y) 0 s
      theorem Multiset.prod_eq_foldl {α : Type u_2} [CommMonoid α] (s : Multiset α) :
      Multiset.prod s = Multiset.foldl (fun x x_1 => x * x_1) (_ : ∀ (x y z : α), x * y * z = x * z * y) 1 s
      @[simp]
      theorem Multiset.coe_sum {α : Type u_2} [AddCommMonoid α] (l : List α) :
      @[simp]
      theorem Multiset.coe_prod {α : Type u_2} [CommMonoid α] (l : List α) :
      @[simp]
      theorem Multiset.sum_zero {α : Type u_2} [AddCommMonoid α] :
      @[simp]
      theorem Multiset.prod_zero {α : Type u_2} [CommMonoid α] :
      @[simp]
      theorem Multiset.sum_cons {α : Type u_2} [AddCommMonoid α] (a : α) (s : Multiset α) :
      @[simp]
      theorem Multiset.prod_cons {α : Type u_2} [CommMonoid α] (a : α) (s : Multiset α) :
      @[simp]
      theorem Multiset.sum_erase {α : Type u_2} [AddCommMonoid α] {s : Multiset α} {a : α} [DecidableEq α] (h : a ∈ s) :
      @[simp]
      theorem Multiset.prod_erase {α : Type u_2} [CommMonoid α] {s : Multiset α} {a : α} [DecidableEq α] (h : a ∈ s) :
      @[simp]
      theorem Multiset.sum_map_erase {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] {m : Multiset ι} {f : ι → α} [DecidableEq ι] {a : ι} (h : a ∈ m) :
      @[simp]
      theorem Multiset.prod_map_erase {ι : Type u_1} {α : Type u_2} [CommMonoid α] {m : Multiset ι} {f : ι → α} [DecidableEq ι] {a : ι} (h : a ∈ m) :
      @[simp]
      theorem Multiset.sum_singleton {α : Type u_2} [AddCommMonoid α] (a : α) :
      @[simp]
      theorem Multiset.prod_singleton {α : Type u_2} [CommMonoid α] (a : α) :
      theorem Multiset.sum_pair {α : Type u_2} [AddCommMonoid α] (a : α) (b : α) :
      Multiset.sum {a, b} = a + b
      theorem Multiset.prod_pair {α : Type u_2} [CommMonoid α] (a : α) (b : α) :
      Multiset.prod {a, b} = a * b
      @[simp]
      theorem Multiset.sum_add {α : Type u_2} [AddCommMonoid α] (s : Multiset α) (t : Multiset α) :
      @[simp]
      theorem Multiset.prod_add {α : Type u_2} [CommMonoid α] (s : Multiset α) (t : Multiset α) :
      theorem Multiset.prod_nsmul {α : Type u_2} [CommMonoid α] (m : Multiset α) (n : ℕ) :
      @[simp]
      theorem Multiset.sum_replicate {α : Type u_2} [AddCommMonoid α] (n : ℕ) (a : α) :
      @[simp]
      theorem Multiset.prod_replicate {α : Type u_2} [CommMonoid α] (n : ℕ) (a : α) :
      theorem Multiset.sum_map_eq_nsmul_single {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] {m : Multiset ι} {f : ι → α} [DecidableEq ι] (i : ι) (hf : ∀ (i' : ι), i' ≠ i → i' ∈ m → f i' = 0) :
      theorem Multiset.prod_map_eq_pow_single {ι : Type u_1} {α : Type u_2} [CommMonoid α] {m : Multiset ι} {f : ι → α} [DecidableEq ι] (i : ι) (hf : ∀ (i' : ι), i' ≠ i → i' ∈ m → f i' = 1) :
      theorem Multiset.sum_eq_nsmul_single {α : Type u_2} [AddCommMonoid α] {s : Multiset α} [DecidableEq α] (a : α) (h : ∀ (a' : α), a' ≠ a → a' ∈ s → a' = 0) :
      theorem Multiset.prod_eq_pow_single {α : Type u_2} [CommMonoid α] {s : Multiset α} [DecidableEq α] (a : α) (h : ∀ (a' : α), a' ≠ a → a' ∈ s → a' = 1) :
      theorem Multiset.pow_count {α : Type u_2} [CommMonoid α] {s : Multiset α} [DecidableEq α] (a : α) :
      theorem Multiset.sum_hom {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [AddCommMonoid β] (s : Multiset α) {F : Type u_5} [AddMonoidHomClass F α β] (f : F) :
      theorem Multiset.prod_hom {α : Type u_2} {β : Type u_3} [CommMonoid α] [CommMonoid β] (s : Multiset α) {F : Type u_5} [MonoidHomClass F α β] (f : F) :
      theorem Multiset.sum_hom' {ι : Type u_1} {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [AddCommMonoid β] (s : Multiset ι) {F : Type u_5} [AddMonoidHomClass F α β] (f : F) (g : ι → α) :
      Multiset.sum (Multiset.map (fun i => ↑f (g i)) s) = ↑f (Multiset.sum (Multiset.map g s))
      theorem Multiset.prod_hom' {ι : Type u_1} {α : Type u_2} {β : Type u_3} [CommMonoid α] [CommMonoid β] (s : Multiset ι) {F : Type u_5} [MonoidHomClass F α β] (f : F) (g : ι → α) :
      Multiset.prod (Multiset.map (fun i => ↑f (g i)) s) = ↑f (Multiset.prod (Multiset.map g s))
      theorem Multiset.sum_hom₂ {ι : Type u_1} {α : Type u_2} {β : Type u_3} {γ : Type u_4} [AddCommMonoid α] [AddCommMonoid β] [AddCommMonoid γ] (s : Multiset ι) (f : α → β → γ) (hf : ∀ (a b : α) (c d : β), f (a + b) (c + d) = f a c + f b d) (hf' : f 0 0 = 0) (f₁ : ι → α) (f₂ : ι → β) :
      Multiset.sum (Multiset.map (fun i => f (f₁ i) (f₂ i)) s) = f (Multiset.sum (Multiset.map f₁ s)) (Multiset.sum (Multiset.map f₂ s))
      theorem Multiset.prod_hom₂ {ι : Type u_1} {α : Type u_2} {β : Type u_3} {γ : Type u_4} [CommMonoid α] [CommMonoid β] [CommMonoid γ] (s : Multiset ι) (f : α → β → γ) (hf : ∀ (a b : α) (c d : β), f (a * b) (c * d) = f a c * f b d) (hf' : f 1 1 = 1) (f₁ : ι → α) (f₂ : ι → β) :
      Multiset.prod (Multiset.map (fun i => f (f₁ i) (f₂ i)) s) = f (Multiset.prod (Multiset.map f₁ s)) (Multiset.prod (Multiset.map f₂ s))
      theorem Multiset.sum_hom_rel {ι : Type u_1} {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [AddCommMonoid β] (s : Multiset ι) {r : α → β → Prop} {f : ι → α} {g : ι → β} (h₁ : r 0 0) (h₂ : ⦃a : ι⦄ → ⦃b : α⦄ → ⦃c : β⦄ → r b c → r (f a + b) (g a + c)) :
      theorem Multiset.prod_hom_rel {ι : Type u_1} {α : Type u_2} {β : Type u_3} [CommMonoid α] [CommMonoid β] (s : Multiset ι) {r : α → β → Prop} {f : ι → α} {g : ι → β} (h₁ : r 1 1) (h₂ : ⦃a : ι⦄ → ⦃b : α⦄ → ⦃c : β⦄ → r b c → r (f a * b) (g a * c)) :
      theorem Multiset.sum_map_zero {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] {m : Multiset ι} :
      Multiset.sum (Multiset.map (fun x => 0) m) = 0
      theorem Multiset.prod_map_one {ι : Type u_1} {α : Type u_2} [CommMonoid α] {m : Multiset ι} :
      Multiset.prod (Multiset.map (fun x => 1) m) = 1
      @[simp]
      theorem Multiset.sum_map_add {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] {m : Multiset ι} {f : ι → α} {g : ι → α} :
      @[simp]
      theorem Multiset.prod_map_mul {ι : Type u_1} {α : Type u_2} [CommMonoid α] {m : Multiset ι} {f : ι → α} {g : ι → α} :
      @[simp]
      theorem Multiset.prod_map_neg {α : Type u_2} [CommMonoid α] [HasDistribNeg α] (s : Multiset α) :
      Multiset.prod (Multiset.map Neg.neg s) = (-1) ^ ↑Multiset.card s * Multiset.prod s
      theorem Multiset.sum_map_nsmul {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] {m : Multiset ι} {f : ι → α} {n : ℕ} :
      theorem Multiset.prod_map_pow {ι : Type u_1} {α : Type u_2} [CommMonoid α] {m : Multiset ι} {f : ι → α} {n : ℕ} :
      theorem Multiset.sum_map_sum_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [AddCommMonoid α] (m : Multiset β) (n : Multiset γ) {f : β → γ → α} :
      Multiset.sum (Multiset.map (fun a => Multiset.sum (Multiset.map (fun b => f a b) n)) m) = Multiset.sum (Multiset.map (fun b => Multiset.sum (Multiset.map (fun a => f a b) m)) n)
      theorem Multiset.prod_map_prod_map {α : Type u_2} {β : Type u_3} {γ : Type u_4} [CommMonoid α] (m : Multiset β) (n : Multiset γ) {f : β → γ → α} :
      Multiset.prod (Multiset.map (fun a => Multiset.prod (Multiset.map (fun b => f a b) n)) m) = Multiset.prod (Multiset.map (fun b => Multiset.prod (Multiset.map (fun a => f a b) m)) n)
      theorem Multiset.sum_induction {α : Type u_2} [AddCommMonoid α] (p : α → Prop) (s : Multiset α) (p_mul : (a b : α) → p a → p b → p (a + b)) (p_one : p 0) (p_s : (a : α) → a ∈ s → p a) :
      theorem Multiset.prod_induction {α : Type u_2} [CommMonoid α] (p : α → Prop) (s : Multiset α) (p_mul : (a b : α) → p a → p b → p (a * b)) (p_one : p 1) (p_s : (a : α) → a ∈ s → p a) :
      theorem Multiset.sum_induction_nonempty {α : Type u_2} [AddCommMonoid α] {s : Multiset α} (p : α → Prop) (p_mul : (a b : α) → p a → p b → p (a + b)) (hs : s ≠ ∅) (p_s : (a : α) → a ∈ s → p a) :
      theorem Multiset.prod_induction_nonempty {α : Type u_2} [CommMonoid α] {s : Multiset α} (p : α → Prop) (p_mul : (a b : α) → p a → p b → p (a * b)) (hs : s ≠ ∅) (p_s : (a : α) → a ∈ s → p a) :
      theorem Multiset.prod_dvd_prod_of_le {α : Type u_2} [CommMonoid α] {s : Multiset α} {t : Multiset α} (h : s ≤ t) :
      theorem Multiset.prod_dvd_prod_of_dvd {α : Type u_2} {β : Type u_3} [CommMonoid β] {S : Multiset α} (g1 : α → β) (g2 : α → β) (h : ∀ (a : α), a ∈ S → g1 a ∣ g2 a) :

      Multiset.sum, the sum of the elements of a multiset, promoted to a morphism of AddCommMonoids.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem Multiset.coe_sumAddMonoidHom {α : Type u_2} [AddCommMonoid α] :
        ↑Multiset.sumAddMonoidHom = Multiset.sum
        theorem Multiset.prod_eq_zero {α : Type u_2} [CommMonoidWithZero α] {s : Multiset α} (h : 0 ∈ s) :
        @[simp]
        theorem Multiset.sum_map_neg {ι : Type u_1} {α : Type u_2} [SubtractionCommMonoid α] {m : Multiset ι} {f : ι → α} :
        @[simp]
        theorem Multiset.prod_map_inv {ι : Type u_1} {α : Type u_2} [DivisionCommMonoid α] {m : Multiset ι} {f : ι → α} :
        @[simp]
        theorem Multiset.sum_map_sub {ι : Type u_1} {α : Type u_2} [SubtractionCommMonoid α] {m : Multiset ι} {f : ι → α} {g : ι → α} :
        @[simp]
        theorem Multiset.prod_map_div {ι : Type u_1} {α : Type u_2} [DivisionCommMonoid α] {m : Multiset ι} {f : ι → α} {g : ι → α} :
        theorem Multiset.sum_map_zsmul {ι : Type u_1} {α : Type u_2} [SubtractionCommMonoid α] {m : Multiset ι} {f : ι → α} {n : ℤ} :
        theorem Multiset.prod_map_zpow {ι : Type u_1} {α : Type u_2} [DivisionCommMonoid α] {m : Multiset ι} {f : ι → α} {n : ℤ} :
        theorem Multiset.sum_map_mul_left {ι : Type u_1} {α : Type u_2} [NonUnitalNonAssocSemiring α] {a : α} {s : Multiset ι} {f : ι → α} :
        Multiset.sum (Multiset.map (fun i => a * f i) s) = a * Multiset.sum (Multiset.map f s)
        theorem Multiset.sum_map_mul_right {ι : Type u_1} {α : Type u_2} [NonUnitalNonAssocSemiring α] {a : α} {s : Multiset ι} {f : ι → α} :
        Multiset.sum (Multiset.map (fun i => f i * a) s) = Multiset.sum (Multiset.map f s) * a
        theorem Multiset.dvd_sum {α : Type u_2} [NonUnitalSemiring α] {a : α} {s : Multiset α} :
        (∀ (x : α), x ∈ s → a ∣ x) → a ∣ Multiset.sum s

        Order #

        theorem Multiset.sum_nonneg {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset α} :
        (∀ (x : α), x ∈ s → 0 ≤ x) → 0 ≤ Multiset.sum s
        theorem Multiset.one_le_prod_of_one_le {α : Type u_2} [OrderedCommMonoid α] {s : Multiset α} :
        (∀ (x : α), x ∈ s → 1 ≤ x) → 1 ≤ Multiset.prod s
        theorem Multiset.single_le_sum {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset α} :
        (∀ (x : α), x ∈ s → 0 ≤ x) → ∀ (x : α), x ∈ s → x ≤ Multiset.sum s
        theorem Multiset.single_le_prod {α : Type u_2} [OrderedCommMonoid α] {s : Multiset α} :
        (∀ (x : α), x ∈ s → 1 ≤ x) → ∀ (x : α), x ∈ s → x ≤ Multiset.prod s
        theorem Multiset.sum_le_card_nsmul {α : Type u_2} [OrderedAddCommMonoid α] (s : Multiset α) (n : α) (h : ∀ (x : α), x ∈ s → x ≤ n) :
        Multiset.sum s ≤ ↑Multiset.card s • n
        theorem Multiset.prod_le_pow_card {α : Type u_2} [OrderedCommMonoid α] (s : Multiset α) (n : α) (h : ∀ (x : α), x ∈ s → x ≤ n) :
        Multiset.prod s ≤ n ^ ↑Multiset.card s
        theorem Multiset.all_zero_of_le_zero_le_of_sum_eq_zero {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset α} :
        (∀ (x : α), x ∈ s → 0 ≤ x) → Multiset.sum s = 0 → ∀ (x : α), x ∈ s → x = 0
        theorem Multiset.all_one_of_le_one_le_of_prod_eq_one {α : Type u_2} [OrderedCommMonoid α] {s : Multiset α} :
        (∀ (x : α), x ∈ s → 1 ≤ x) → Multiset.prod s = 1 → ∀ (x : α), x ∈ s → x = 1
        theorem Multiset.sum_le_sum_of_rel_le {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset α} {t : Multiset α} (h : Multiset.Rel (fun x x_1 => x ≤ x_1) s t) :
        theorem Multiset.prod_le_prod_of_rel_le {α : Type u_2} [OrderedCommMonoid α] {s : Multiset α} {t : Multiset α} (h : Multiset.Rel (fun x x_1 => x ≤ x_1) s t) :
        theorem Multiset.sum_map_le_sum_map {ι : Type u_1} {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset ι} (f : ι → α) (g : ι → α) (h : ∀ (i : ι), i ∈ s → f i ≤ g i) :
        theorem Multiset.prod_map_le_prod_map {ι : Type u_1} {α : Type u_2} [OrderedCommMonoid α] {s : Multiset ι} (f : ι → α) (g : ι → α) (h : ∀ (i : ι), i ∈ s → f i ≤ g i) :
        theorem Multiset.sum_map_le_sum {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset α} (f : α → α) (h : ∀ (x : α), x ∈ s → f x ≤ x) :
        theorem Multiset.prod_map_le_prod {α : Type u_2} [OrderedCommMonoid α] {s : Multiset α} (f : α → α) (h : ∀ (x : α), x ∈ s → f x ≤ x) :
        theorem Multiset.sum_le_sum_map {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset α} (f : α → α) (h : ∀ (x : α), x ∈ s → x ≤ f x) :
        theorem Multiset.prod_le_prod_map {α : Type u_2} [OrderedCommMonoid α] {s : Multiset α} (f : α → α) (h : ∀ (x : α), x ∈ s → x ≤ f x) :
        theorem Multiset.card_nsmul_le_sum {α : Type u_2} [OrderedAddCommMonoid α] {s : Multiset α} {a : α} (h : ∀ (x : α), x ∈ s → a ≤ x) :
        ↑Multiset.card s • a ≤ Multiset.sum s
        theorem Multiset.pow_card_le_prod {α : Type u_2} [OrderedCommMonoid α] {s : Multiset α} {a : α} (h : ∀ (x : α), x ∈ s → a ≤ x) :
        a ^ ↑Multiset.card s ≤ Multiset.prod s
        theorem Multiset.prod_nonneg {α : Type u_2} [OrderedCommSemiring α] {m : Multiset α} (h : ∀ (a : α), a ∈ m → 0 ≤ a) :
        theorem Multiset.sum_eq_zero {α : Type u_2} [AddCommMonoid α] {m : Multiset α} (h : ∀ (x : α), x ∈ m → x = 0) :

        Slightly more general version of Multiset.sum_eq_zero_iff for a non-ordered AddMonoid

        theorem Multiset.prod_eq_one {α : Type u_2} [CommMonoid α] {m : Multiset α} (h : ∀ (x : α), x ∈ m → x = 1) :

        Slightly more general version of Multiset.prod_eq_one_iff for a non-ordered Monoid

        theorem Multiset.le_sum_of_mem {α : Type u_2} [CanonicallyOrderedAddMonoid α] {m : Multiset α} {a : α} (h : a ∈ m) :
        theorem Multiset.le_prod_of_mem {α : Type u_2} [CanonicallyOrderedMonoid α] {m : Multiset α} {a : α} (h : a ∈ m) :
        theorem Multiset.le_sum_of_subadditive_on_pred {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [OrderedAddCommMonoid β] (f : α → β) (p : α → Prop) (h_one : f 0 = 0) (hp_one : p 0) (h_mul : ∀ (a b : α), p a → p b → f (a + b) ≤ f a + f b) (hp_mul : (a b : α) → p a → p b → p (a + b)) (s : Multiset α) (hps : (a : α) → a ∈ s → p a) :
        theorem Multiset.le_prod_of_submultiplicative_on_pred {α : Type u_2} {β : Type u_3} [CommMonoid α] [OrderedCommMonoid β] (f : α → β) (p : α → Prop) (h_one : f 1 = 1) (hp_one : p 1) (h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b) (hp_mul : (a b : α) → p a → p b → p (a * b)) (s : Multiset α) (hps : (a : α) → a ∈ s → p a) :
        theorem Multiset.le_sum_of_subadditive {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [OrderedAddCommMonoid β] (f : α → β) (h_one : f 0 = 0) (h_mul : ∀ (a b : α), f (a + b) ≤ f a + f b) (s : Multiset α) :
        theorem Multiset.le_prod_of_submultiplicative {α : Type u_2} {β : Type u_3} [CommMonoid α] [OrderedCommMonoid β] (f : α → β) (h_one : f 1 = 1) (h_mul : ∀ (a b : α), f (a * b) ≤ f a * f b) (s : Multiset α) :
        theorem Multiset.le_sum_nonempty_of_subadditive_on_pred {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [OrderedAddCommMonoid β] (f : α → β) (p : α → Prop) (h_mul : ∀ (a b : α), p a → p b → f (a + b) ≤ f a + f b) (hp_mul : (a b : α) → p a → p b → p (a + b)) (s : Multiset α) (hs_nonempty : s ≠ ∅) (hs : (a : α) → a ∈ s → p a) :
        theorem Multiset.le_prod_nonempty_of_submultiplicative_on_pred {α : Type u_2} {β : Type u_3} [CommMonoid α] [OrderedCommMonoid β] (f : α → β) (p : α → Prop) (h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b) (hp_mul : (a b : α) → p a → p b → p (a * b)) (s : Multiset α) (hs_nonempty : s ≠ ∅) (hs : (a : α) → a ∈ s → p a) :
        theorem Multiset.le_sum_nonempty_of_subadditive {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [OrderedAddCommMonoid β] (f : α → β) (h_mul : ∀ (a b : α), f (a + b) ≤ f a + f b) (s : Multiset α) (hs_nonempty : s ≠ ∅) :
        theorem Multiset.le_prod_nonempty_of_submultiplicative {α : Type u_2} {β : Type u_3} [CommMonoid α] [OrderedCommMonoid β] (f : α → β) (h_mul : ∀ (a b : α), f (a * b) ≤ f a * f b) (s : Multiset α) (hs_nonempty : s ≠ ∅) :
        @[simp]
        theorem Multiset.sum_map_singleton {α : Type u_2} (s : Multiset α) :
        Multiset.sum (Multiset.map (fun a => {a}) s) = s
        theorem Multiset.sum_nat_mod (s : Multiset ℕ) (n : ℕ) :
        Multiset.sum s % n = Multiset.sum (Multiset.map (fun x => x % n) s) % n
        theorem Multiset.prod_nat_mod (s : Multiset ℕ) (n : ℕ) :
        Multiset.prod s % n = Multiset.prod (Multiset.map (fun x => x % n) s) % n
        theorem Multiset.sum_int_mod (s : Multiset ℤ) (n : ℤ) :
        Multiset.sum s % n = Multiset.sum (Multiset.map (fun x => x % n) s) % n
        theorem Multiset.prod_int_mod (s : Multiset ℤ) (n : ℤ) :
        Multiset.prod s % n = Multiset.prod (Multiset.map (fun x => x % n) s) % n
        theorem map_multiset_sum {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [AddCommMonoid β] {F : Type u_5} [AddMonoidHomClass F α β] (f : F) (s : Multiset α) :
        theorem map_multiset_prod {α : Type u_2} {β : Type u_3} [CommMonoid α] [CommMonoid β] {F : Type u_5} [MonoidHomClass F α β] (f : F) (s : Multiset α) :
        theorem AddMonoidHom.map_multiset_sum {α : Type u_2} {β : Type u_3} [AddCommMonoid α] [AddCommMonoid β] (f : α →+ β) (s : Multiset α) :
        theorem MonoidHom.map_multiset_prod {α : Type u_2} {β : Type u_3} [CommMonoid α] [CommMonoid β] (f : α →* β) (s : Multiset α) :