ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Multiset.normalize_lcm
@[simp 1100]
theorem normalize_lcm (s : Multiset α) : normalize s.lcm = s.lcm 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (s : Multiset α)
Goal: normalize s.lcm = s.lcm
-- Multiset.lcm_eq_zero_iff
@[simp]
nonrec theorem lcm_eq_zero_iff [Nontrivial α] (s : Multiset α) : s.lcm = 0 ↔ (0 : α) ∈ s 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [Nontrivial α] (s : Multiset α)
Goal: s.lcm = 0 ↔ 0 ∈ s
-- Multiset.lcm_dedup
@[simp]
theorem lcm_dedup (s : Multiset α) : (dedup s).lcm = s.lcm 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (s : Multiset α)
Goal: s.dedup.lcm = s.lcm
-- Multiset.lcm_ndunion
@[simp]
theorem lcm_ndunion (s₁ s₂ : Multiset α) : (ndunion s₁ s₂).lcm = GCDMonoid.lcm s₁.lcm s₂.lcm 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (s₁ s₂ : Multiset α)
Goal: (s₁.ndunion s₂).lcm = lcm s₁.lcm s₂.lcm
-- Multiset.lcm_union
@[simp]
theorem lcm_union (s₁ s₂ : Multiset α) : (s₁ ∪ s₂).lcm = GCDMonoid.lcm s₁.lcm s₂.lcm 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (s₁ s₂ : Multiset α)
Goal: (s₁ ∪ s₂).lcm = lcm s₁.lcm s₂.lcm
-- Multiset.lcm_ndinsert
@[simp]
theorem lcm_ndinsert (a : α) (s : Multiset α) : (ndinsert a s).lcm = GCDMonoid.lcm a s.lcm 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (a : α) (s : Multiset α)
Goal: (Multiset.ndinsert a s).lcm = lcm a s.lcm
-- Multiset.gcd_zero
@[simp]
theorem gcd_zero : (0 : Multiset α).gcd = 0 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α]
Goal: Multiset.gcd 0 = 0
-- Multiset.gcd_cons
@[simp]
theorem gcd_cons (a : α) (s : Multiset α) : (a ::ₘ s).gcd = GCDMonoid.gcd a s.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (a : α) (s : Multiset α)
Goal: (a ::ₘ s).gcd = gcd a s.gcd
-- Multiset.gcd_singleton
@[simp]
theorem gcd_singleton {a : α} : ({a} : Multiset α).gcd = normalize a 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] {a : α}
Goal: {a}.gcd = normalize a
-- Multiset.gcd_add
@[simp]
theorem gcd_add (s₁ s₂ : Multiset α) : (s₁ + s₂).gcd = GCDMonoid.gcd s₁.gcd s₂.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (s₁ s₂ : Multiset α)
Goal: (s₁ + s₂).gcd = gcd s₁.gcd s₂.gcd
-- Multiset.dvd_gcd
theorem dvd_gcd {s : Multiset α} {a : α} : a ∣ s.gcd ↔ ∀ b ∈ s, a ∣ b 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] {s : Multiset α} {a : α}
Goal: a ∣ s.gcd ↔ ∀ b ∈ s, a ∣ b
-- Multiset.gcd_dvd
theorem gcd_dvd {s : Multiset α} {a : α} (h : a ∈ s) : s.gcd ∣ a 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] {s : Multiset α} {a : α} (h : a ∈ s)
Goal: s.gcd ∣ a
-- Multiset.gcd_mono
theorem gcd_mono {s₁ s₂ : Multiset α} (h : s₁ ⊆ s₂) : s₂.gcd ∣ s₁.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] {s₁ s₂ : Multiset α} (h : s₁ ⊆ s₂)
Goal: s₂.gcd ∣ s₁.gcd
-- Multiset.normalize_gcd
@[simp 1100]
theorem normalize_gcd (s : Multiset α) : normalize s.gcd = s.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (s : Multiset α)
Goal: normalize s.gcd = s.gcd
-- Multiset.gcd_eq_zero_iff
theorem gcd_eq_zero_iff (s : Multiset α) : s.gcd = 0 ↔ ∀ x : α, x ∈ s → x = 0 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (s : Multiset α)
Goal: s.gcd = 0 ↔ ∀ x ∈ s, x = 0
-- Multiset.gcd_map_mul
theorem gcd_map_mul (a : α) (s : Multiset α) : (s.map (a * ·)).gcd = normalize a * s.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (a : α) (s : Multiset α)
Goal: (Multiset.map (fun x => a * x) s).gcd = normalize a * s.gcd
-- Multiset.gcd_dedup
@[simp]
theorem gcd_dedup (s : Multiset α) : (dedup s).gcd = s.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (s : Multiset α)
Goal: s.dedup.gcd = s.gcd
-- Multiset.gcd_ndunion
@[simp]
theorem gcd_ndunion (s₁ s₂ : Multiset α) : (ndunion s₁ s₂).gcd = GCDMonoid.gcd s₁.gcd s₂.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (s₁ s₂ : Multiset α)
Goal: (s₁.ndunion s₂).gcd = gcd s₁.gcd s₂.gcd
-- Multiset.gcd_union
@[simp]
theorem gcd_union (s₁ s₂ : Multiset α) : (s₁ ∪ s₂).gcd = GCDMonoid.gcd s₁.gcd s₂.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (s₁ s₂ : Multiset α)
Goal: (s₁ ∪ s₂).gcd = gcd s₁.gcd s₂.gcd
-- Multiset.gcd_ndinsert
@[simp]
theorem gcd_ndinsert (a : α) (s : Multiset α) : (ndinsert a s).gcd = GCDMonoid.gcd a s.gcd 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] [DecidableEq α] (a : α) (s : Multiset α)
Goal: (Multiset.ndinsert a s).gcd = gcd a s.gcd
-- Multiset.extract_gcd'
theorem extract_gcd' (s t : Multiset α) (hs : ∃ x, x ∈ s ∧ x ≠ (0 : α))
    (ht : s = t.map (s.gcd * ·)) : t.gcd = 1 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (s t : Multiset α) (hs : ∃ x ∈ s, x ≠ 0) (ht : s = Multiset.map (fun x => s.gcd * x) t)
Goal: t.gcd = 1
-- Multiset.extract_gcd
theorem extract_gcd (s : Multiset α) (hs : s ≠ 0) :
    ∃ t : Multiset α, s = t.map (s.gcd * ·) ∧ t.gcd = 1 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [NormalizedGCDMonoid α] (s : Multiset α) (hs : s ≠ 0)
Goal: ∃ t, s = Multiset.map (fun x => s.gcd * x) t ∧ t.gcd = 1
-- _private.Mathlib.Util.CompileInductive.0.Float.val_eq
@[csimp] private theorem Float.val_eq : @Float.val = Float.valImpl 
Goal: Float.val = Float.valImpl
-- _private.Mathlib.Util.CompileInductive.0.Float.mk_eq
@[csimp] private theorem Float.mk_eq : @Float.mk = Float.mkImpl 
Goal: Float.mk = Float.mkImpl
-- Finsupp.prod_of_support_subset
@[to_additive]
theorem prod_of_support_subset (f : α →₀ M) {s : Finset α} (hs : f.support ⊆ s) (g : α → M → N)
    (h : ∀ i ∈ s, g i 0 = 1) : f.prod g = ∏ x ∈ s, g x (f x) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] (f : α →₀ M) {s : Finset α} (hs : f.support ⊆ s) (g : α → M → N) (h : ∀ i ∈ s, g i 0 = 1)
Goal: f.prod g = ∏ x ∈ s, g x (f x)
-- Finsupp.sum_of_support_subset
@[to_additive]
theorem prod_of_support_subset (f : α →₀ M) {s : Finset α} (hs : f.support ⊆ s) (g : α → M → N)
    (h : ∀ i ∈ s, g i 0 = 1) : f.prod g = ∏ x ∈ s, g x (f x) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] (f : α →₀ M) {s : Finset α} (hs : f.support ⊆ s) (g : α → M → N) (h : ∀ i ∈ s, g i 0 = 0)
Goal: f.sum g = ∑ x ∈ s, g x (f x)
-- Finsupp.sum_fintype
@[to_additive]
theorem prod_fintype [Fintype α] (f : α →₀ M) (g : α → M → N) (h : ∀ i, g i 0 = 1) :
    f.prod g = ∏ i, g i (f i) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] [Fintype α] (f : α →₀ M) (g : α → M → N) (h : ∀ (i : α), g i 0 = 0)
Goal: f.sum g = ∑ i : α, g i (f i)
-- Finsupp.prod_fintype
@[to_additive]
theorem prod_fintype [Fintype α] (f : α →₀ M) (g : α → M → N) (h : ∀ i, g i 0 = 1) :
    f.prod g = ∏ i, g i (f i) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] [Fintype α] (f : α →₀ M) (g : α → M → N) (h : ∀ (i : α), g i 0 = 1)
Goal: f.prod g = ∏ i : α, g i (f i)
-- Finsupp.prod_single_index
@[to_additive (attr := simp)]
theorem prod_single_index {a : α} {b : M} {h : α → M → N} (h_zero : h a 0 = 1) :
    (single a b).prod h = h a b 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] {a : α} {b : M} {h : α → M → N} (h_zero : h a 0 = 1)
Goal: (Finsupp.single a b).prod h = h a b
-- Finsupp.sum_single_index
@[to_additive (attr := simp)]
theorem prod_single_index {a : α} {b : M} {h : α → M → N} (h_zero : h a 0 = 1) :
    (single a b).prod h = h a b 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] {a : α} {b : M} {h : α → M → N} (h_zero : h a 0 = 0)
Goal: (Finsupp.single a b).sum h = h a b
-- Finsupp.sum_mapRange_index
@[to_additive]
theorem prod_mapRange_index {f : M → M'} {hf : f 0 = 0} {g : α →₀ M} {h : α → M' → N}
    (h0 : ∀ a, h a 0 = 1) : (mapRange f hf g).prod h = g.prod fun a b => h a (f b) 
Arguments: {α : Type u_1} {M : Type u_8} {M' : Type u_9} {N : Type u_10} [Zero M] [Zero M'] [AddCommMonoid N] {f : M → M'} {hf : f 0 = 0} {g : α →₀ M} {h : α → M' → N} (h0 : ∀ (a : α), h a 0 = 0)
Goal: (Finsupp.mapRange f hf g).sum h = g.sum fun a b => h a (f b)
-- Finsupp.prod_mapRange_index
@[to_additive]
theorem prod_mapRange_index {f : M → M'} {hf : f 0 = 0} {g : α →₀ M} {h : α → M' → N}
    (h0 : ∀ a, h a 0 = 1) : (mapRange f hf g).prod h = g.prod fun a b => h a (f b) 
Arguments: {α : Type u_1} {M : Type u_8} {M' : Type u_9} {N : Type u_10} [Zero M] [Zero M'] [CommMonoid N] {f : M → M'} {hf : f 0 = 0} {g : α →₀ M} {h : α → M' → N} (h0 : ∀ (a : α), h a 0 = 1)
Goal: (Finsupp.mapRange f hf g).prod h = g.prod fun a b => h a (f b)
-- Finsupp.prod_zero_index
@[to_additive (attr := simp)]
theorem prod_zero_index {h : α → M → N} : (0 : α →₀ M).prod h = 1 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] {h : α → M → N}
Goal: Finsupp.prod 0 h = 1
-- Finsupp.sum_zero_index
@[to_additive (attr := simp)]
theorem prod_zero_index {h : α → M → N} : (0 : α →₀ M).prod h = 1 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] {h : α → M → N}
Goal: Finsupp.sum 0 h = 0
-- Finsupp.prod_comm
@[to_additive]
theorem prod_comm (f : α →₀ M) (g : β →₀ M') (h : α → M → β → M' → N) :
    (f.prod fun x v => g.prod fun x' v' => h x v x' v') =
      g.prod fun x' v' => f.prod fun x v => h x v x' v' 
Arguments: {α : Type u_1} {β : Type u_7} {M : Type u_8} {M' : Type u_9} {N : Type u_10} [Zero M] [Zero M'] [CommMonoid N] (f : α →₀ M) (g : β →₀ M') (h : α → M → β → M' → N)
Goal: (f.prod fun x v => g.prod fun x' v' => h x v x' v') = g.prod fun x' v' => f.prod fun x v => h x v x' v'
-- Finsupp.sum_comm
@[to_additive]
theorem prod_comm (f : α →₀ M) (g : β →₀ M') (h : α → M → β → M' → N) :
    (f.prod fun x v => g.prod fun x' v' => h x v x' v') =
      g.prod fun x' v' => f.prod fun x v => h x v x' v' 
Arguments: {α : Type u_1} {β : Type u_7} {M : Type u_8} {M' : Type u_9} {N : Type u_10} [Zero M] [Zero M'] [AddCommMonoid N] (f : α →₀ M) (g : β →₀ M') (h : α → M → β → M' → N)
Goal: (f.sum fun x v => g.sum fun x' v' => h x v x' v') = g.sum fun x' v' => f.sum fun x v => h x v x' v'
-- Finsupp.sum_ite_eq
@[to_additive (attr := simp)]
theorem prod_ite_eq [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N) :
    (f.prod fun x v => ite (a = x) (b x v) 1) = ite (a ∈ f.support) (b a (f a)) 1 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N)
Goal: (f.sum fun x v => if a = x then b x v else 0) = if a ∈ f.support then b a (f a) else 0
-- Finsupp.prod_ite_eq
@[to_additive (attr := simp)]
theorem prod_ite_eq [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N) :
    (f.prod fun x v => ite (a = x) (b x v) 1) = ite (a ∈ f.support) (b a (f a)) 1 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N)
Goal: (f.prod fun x v => if a = x then b x v else 1) = if a ∈ f.support then b a (f a) else 1
-- Finsupp.sum_ite_self_eq
theorem sum_ite_self_eq [DecidableEq α] {N : Type*} [AddCommMonoid N] (f : α →₀ N) (a : α) :
    (f.sum fun x v => ite (a = x) v 0) = f a 
Arguments: {α : Type u_1} [DecidableEq α] {N : Type u_16} [AddCommMonoid N] (f : α →₀ N) (a : α)
Goal: (f.sum fun x v => if a = x then v else 0) = f a
-- Finsupp.sum_ite_self_eq_aux
@[simp]
theorem sum_ite_self_eq_aux [DecidableEq α] {N : Type*} [AddCommMonoid N] (f : α →₀ N) (a : α) :
    (if a ∈ f.support then f a else 0) = f a 
Arguments: {α : Type u_1} [DecidableEq α] {N : Type u_16} [AddCommMonoid N] (f : α →₀ N) (a : α)
Goal: (if a ∈ f.support then f a else 0) = f a
-- Finsupp.prod_ite_eq'
@[to_additive (attr := simp) "A restatement of `sum_ite_eq` with the equality test reversed."]
theorem prod_ite_eq' [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N) :
    (f.prod fun x v => ite (x = a) (b x v) 1) = ite (a ∈ f.support) (b a (f a)) 1 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N)
Goal: (f.prod fun x v => if x = a then b x v else 1) = if a ∈ f.support then b a (f a) else 1
-- Finsupp.sum_ite_eq'
@[to_additive (attr := simp) "A restatement of `sum_ite_eq` with the equality test reversed."]
theorem prod_ite_eq' [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N) :
    (f.prod fun x v => ite (x = a) (b x v) 1) = ite (a ∈ f.support) (b a (f a)) 1 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] [DecidableEq α] (f : α →₀ M) (a : α) (b : α → M → N)
Goal: (f.sum fun x v => if x = a then b x v else 0) = if a ∈ f.support then b a (f a) else 0
-- Finsupp.sum_ite_self_eq'
theorem sum_ite_self_eq' [DecidableEq α] {N : Type*} [AddCommMonoid N] (f : α →₀ N) (a : α) :
    (f.sum fun x v => ite (x = a) v 0) = f a 
Arguments: {α : Type u_1} [DecidableEq α] {N : Type u_16} [AddCommMonoid N] (f : α →₀ N) (a : α)
Goal: (f.sum fun x v => if x = a then v else 0) = f a
-- Finsupp.prod_pow
@[simp]
theorem prod_pow [Fintype α] (f : α →₀ ℕ) (g : α → N) :
    (f.prod fun a b => g a ^ b) = ∏ a, g a ^ f a 
Arguments: {α : Type u_1} {N : Type u_10} [CommMonoid N] [Fintype α] (f : α →₀ ℕ) (g : α → N)
Goal: (f.prod fun a b => g a ^ b) = ∏ a : α, g a ^ f a
-- Finsupp.onFinset_prod
@[to_additive
      "If `g` maps a second argument of 0 to 0, summing it over the
      result of `onFinset` is the same as summing it over the original `Finset`."]
theorem onFinset_prod {s : Finset α} {f : α → M} {g : α → M → N} (hf : ∀ a, f a ≠ 0 → a ∈ s)
    (hg : ∀ a, g a 0 = 1) : (onFinset s f hf).prod g = ∏ a ∈ s, g a (f a) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] {s : Finset α} {f : α → M} {g : α → M → N} (hf : ∀ (a : α), f a ≠ 0 → a ∈ s) (hg : ∀ (a : α), g a 0 = 1)
Goal: (Finsupp.onFinset s f hf).prod g = ∏ a ∈ s, g a (f a)
-- Finsupp.onFinset_sum
@[to_additive
      "If `g` maps a second argument of 0 to 0, summing it over the
      result of `onFinset` is the same as summing it over the original `Finset`."]
theorem onFinset_prod {s : Finset α} {f : α → M} {g : α → M → N} (hf : ∀ a, f a ≠ 0 → a ∈ s)
    (hg : ∀ a, g a 0 = 1) : (onFinset s f hf).prod g = ∏ a ∈ s, g a (f a) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] {s : Finset α} {f : α → M} {g : α → M → N} (hf : ∀ (a : α), f a ≠ 0 → a ∈ s) (hg : ∀ (a : α), g a 0 = 0)
Goal: (Finsupp.onFinset s f hf).sum g = ∑ a ∈ s, g a (f a)
-- Finsupp.mul_prod_erase
@[to_additive
      " Taking a sum over `f : α →₀ M` is the same as adding the value on a
      single element `y ∈ f.support` to the sum over `erase y f`. "]
theorem mul_prod_erase (f : α →₀ M) (y : α) (g : α → M → N) (hyf : y ∈ f.support) :
    g y (f y) * (erase y f).prod g = f.prod g 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] (f : α →₀ M) (y : α) (g : α → M → N) (hyf : y ∈ f.support)
Goal: g y (f y) * (Finsupp.erase y f).prod g = f.prod g
-- Finsupp.add_sum_erase
@[to_additive
      " Taking a sum over `f : α →₀ M` is the same as adding the value on a
      single element `y ∈ f.support` to the sum over `erase y f`. "]
theorem mul_prod_erase (f : α →₀ M) (y : α) (g : α → M → N) (hyf : y ∈ f.support) :
    g y (f y) * (erase y f).prod g = f.prod g 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] (f : α →₀ M) (y : α) (g : α → M → N) (hyf : y ∈ f.support)
Goal: g y (f y) + (Finsupp.erase y f).sum g = f.sum g
-- Finsupp.add_sum_erase'
@[to_additive
      " Generalization of `Finsupp.add_sum_erase`: if `g` maps a second argument of 0
      to 0, then its sum over `f : α →₀ M` is the same as adding the value on any element
      `y : α` to the sum over `erase y f`. "]
theorem mul_prod_erase' (f : α →₀ M) (y : α) (g : α → M → N) (hg : ∀ i : α, g i 0 = 1) :
    g y (f y) * (erase y f).prod g = f.prod g 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] (f : α →₀ M) (y : α) (g : α → M → N) (hg : ∀ (i : α), g i 0 = 0)
Goal: g y (f y) + (Finsupp.erase y f).sum g = f.sum g
-- Finsupp.mul_prod_erase'
@[to_additive
      " Generalization of `Finsupp.add_sum_erase`: if `g` maps a second argument of 0
      to 0, then its sum over `f : α →₀ M` is the same as adding the value on any element
      `y : α` to the sum over `erase y f`. "]
theorem mul_prod_erase' (f : α →₀ M) (y : α) (g : α → M → N) (hg : ∀ i : α, g i 0 = 1) :
    g y (f y) * (erase y f).prod g = f.prod g 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] (f : α →₀ M) (y : α) (g : α → M → N) (hg : ∀ (i : α), g i 0 = 1)
Goal: g y (f y) * (Finsupp.erase y f).prod g = f.prod g
-- AddSubmonoidClass.finsupp_sum_mem
@[to_additive]
theorem _root_.SubmonoidClass.finsupp_prod_mem {S : Type*} [SetLike S N] [SubmonoidClass S N]
    (s : S) (f : α →₀ M) (g : α → M → N) (h : ∀ c, f c ≠ 0 → g c (f c) ∈ s) : f.prod g ∈ s 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] {S : Type u_16} [SetLike S N] [AddSubmonoidClass S N] (s : S) (f : α →₀ M) (g : α → M → N) (h : ∀ (c : α), f c ≠ 0 → g c (f c) ∈ s)
Goal: f.sum g ∈ s
-- SubmonoidClass.finsupp_prod_mem
@[to_additive]
theorem _root_.SubmonoidClass.finsupp_prod_mem {S : Type*} [SetLike S N] [SubmonoidClass S N]
    (s : S) (f : α →₀ M) (g : α → M → N) (h : ∀ c, f c ≠ 0 → g c (f c) ∈ s) : f.prod g ∈ s 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] {S : Type u_16} [SetLike S N] [SubmonoidClass S N] (s : S) (f : α →₀ M) (g : α → M → N) (h : ∀ (c : α), f c ≠ 0 → g c (f c) ∈ s)
Goal: f.prod g ∈ s
-- Finsupp.prod_congr
@[to_additive]
theorem prod_congr {f : α →₀ M} {g1 g2 : α → M → N} (h : ∀ x ∈ f.support, g1 x (f x) = g2 x (f x)) :
    f.prod g1 = f.prod g2 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] {f : α →₀ M} {g1 g2 : α → M → N} (h : ∀ x ∈ f.support, g1 x (f x) = g2 x (f x))
Goal: f.prod g1 = f.prod g2
-- Finsupp.sum_congr
@[to_additive]
theorem prod_congr {f : α →₀ M} {g1 g2 : α → M → N} (h : ∀ x ∈ f.support, g1 x (f x) = g2 x (f x)) :
    f.prod g1 = f.prod g2 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] {f : α →₀ M} {g1 g2 : α → M → N} (h : ∀ x ∈ f.support, g1 x (f x) = g2 x (f x))
Goal: f.sum g1 = f.sum g2
-- Finsupp.prod_eq_single
@[to_additive]
theorem prod_eq_single {f : α →₀ M} (a : α) {g : α → M → N}
    (h₀ : ∀ b, f b ≠ 0 → b ≠ a → g b (f b) = 1) (h₁ : f a = 0 → g a 0 = 1) :
    f.prod g = g a (f a) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [CommMonoid N] {f : α →₀ M} (a : α) {g : α → M → N} (h₀ : ∀ (b : α), f b ≠ 0 → b ≠ a → g b (f b) = 1) (h₁ : f a = 0 → g a 0 = 1)
Goal: f.prod g = g a (f a)
-- Finsupp.sum_eq_single
@[to_additive]
theorem prod_eq_single {f : α →₀ M} (a : α) {g : α → M → N}
    (h₀ : ∀ b, f b ≠ 0 → b ≠ a → g b (f b) = 1) (h₁ : f a = 0 → g a 0 = 1) :
    f.prod g = g a (f a) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] {f : α →₀ M} (a : α) {g : α → M → N} (h₀ : ∀ (b : α), f b ≠ 0 → b ≠ a → g b (f b) = 0) (h₁ : f a = 0 → g a 0 = 0)
Goal: f.sum g = g a (f a)
-- Finsupp.prod_eq_zero_iff
@[simp]
lemma prod_eq_zero_iff : f.prod g = 0 ↔ ∃ i ∈ f.support, g i (f i) = 0 
Arguments: {α : Type u_1} {ι : Type u_2} {β : Type u_7} [Zero α] [CommMonoidWithZero β] [Nontrivial β] [NoZeroDivisors β] {f : ι →₀ α} {g : ι → α → β}
Goal: f.prod g = 0 ↔ ∃ i ∈ f.support, g i (f i) = 0
-- Finsupp.prod_ne_zero_iff
lemma prod_ne_zero_iff : f.prod g ≠ 0 ↔ ∀ i ∈ f.support, g i (f i) ≠ 0 
Arguments: {α : Type u_1} {ι : Type u_2} {β : Type u_7} [Zero α] [CommMonoidWithZero β] [Nontrivial β] [NoZeroDivisors β] {f : ι →₀ α} {g : ι → α → β}
Goal: f.prod g ≠ 0 ↔ ∀ i ∈ f.support, g i (f i) ≠ 0
-- map_finsupp_prod
@[to_additive]
theorem map_finsupp_prod [Zero M] [CommMonoid N] [CommMonoid P] {H : Type*}
    [FunLike H N P] [MonoidHomClass H N P]
    (h : H) (f : α →₀ M) (g : α → M → N) : h (f.prod g) = f.prod fun a b => h (g a b) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} {P : Type u_11} [Zero M] [CommMonoid N] [CommMonoid P] {H : Type u_16} [FunLike H N P] [MonoidHomClass H N P] (h : H) (f : α →₀ M) (g : α → M → N)
Goal: h (f.prod g) = f.prod fun a b => h (g a b)
-- map_finsupp_sum
@[to_additive]
theorem map_finsupp_prod [Zero M] [CommMonoid N] [CommMonoid P] {H : Type*}
    [FunLike H N P] [MonoidHomClass H N P]
    (h : H) (f : α →₀ M) (g : α → M → N) : h (f.prod g) = f.prod fun a b => h (g a b) 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} {P : Type u_11} [Zero M] [AddCommMonoid N] [AddCommMonoid P] {H : Type u_16} [FunLike H N P] [AddMonoidHomClass H N P] (h : H) (f : α →₀ M) (g : α → M → N)
Goal: h (f.sum g) = f.sum fun a b => h (g a b)
-- AddMonoidHom.coe_finsupp_sum
@[to_additive]
theorem MonoidHom.coe_finsupp_prod [Zero β] [Monoid N] [CommMonoid P] (f : α →₀ β)
    (g : α → β → N →* P) : ⇑(f.prod g) = f.prod fun i fi => ⇑(g i fi) 
Arguments: {α : Type u_1} {β : Type u_7} {N : Type u_10} {P : Type u_11} [Zero β] [AddMonoid N] [AddCommMonoid P] (f : α →₀ β) (g : α → β → N →+ P)
Goal: ⇑(f.sum g) = f.sum fun i fi => ⇑(g i fi)
-- MonoidHom.coe_finsupp_prod
@[to_additive]
theorem MonoidHom.coe_finsupp_prod [Zero β] [Monoid N] [CommMonoid P] (f : α →₀ β)
    (g : α → β → N →* P) : ⇑(f.prod g) = f.prod fun i fi => ⇑(g i fi) 
Arguments: {α : Type u_1} {β : Type u_7} {N : Type u_10} {P : Type u_11} [Zero β] [Monoid N] [CommMonoid P] (f : α →₀ β) (g : α → β → N →* P)
Goal: ⇑(f.prod g) = f.prod fun i fi => ⇑(g i fi)
-- AddMonoidHom.finsupp_sum_apply
@[to_additive (attr := simp)]
theorem MonoidHom.finsupp_prod_apply [Zero β] [Monoid N] [CommMonoid P] (f : α →₀ β)
    (g : α → β → N →* P) (x : N) : f.prod g x = f.prod fun i fi => g i fi x 
Arguments: {α : Type u_1} {β : Type u_7} {N : Type u_10} {P : Type u_11} [Zero β] [AddMonoid N] [AddCommMonoid P] (f : α →₀ β) (g : α → β → N →+ P) (x : N)
Goal: (f.sum g) x = f.sum fun i fi => (g i fi) x
-- MonoidHom.finsupp_prod_apply
@[to_additive (attr := simp)]
theorem MonoidHom.finsupp_prod_apply [Zero β] [Monoid N] [CommMonoid P] (f : α →₀ β)
    (g : α → β → N →* P) (x : N) : f.prod g x = f.prod fun i fi => g i fi x 
Arguments: {α : Type u_1} {β : Type u_7} {N : Type u_10} {P : Type u_11} [Zero β] [Monoid N] [CommMonoid P] (f : α →₀ β) (g : α → β → N →* P) (x : N)
Goal: (f.prod g) x = f.prod fun i fi => (g i fi) x
-- Finsupp.single_multiset_sum
theorem single_multiset_sum [AddCommMonoid M] (s : Multiset M) (a : α) :
    single a s.sum = (s.map (single a)).sum 
Arguments: {α : Type u_1} {M : Type u_8} [AddCommMonoid M] (s : Multiset M) (a : α)
Goal: Finsupp.single a s.sum = (Multiset.map (Finsupp.single a) s).sum
-- Finsupp.single_finset_sum
theorem single_finset_sum [AddCommMonoid M] (s : Finset ι) (f : ι → M) (a : α) :
    single a (∑ b ∈ s, f b) = ∑ b ∈ s, single a (f b) 
Arguments: {α : Type u_1} {ι : Type u_2} {M : Type u_8} [AddCommMonoid M] (s : Finset ι) (f : ι → M) (a : α)
Goal: Finsupp.single a (∑ b ∈ s, f b) = ∑ b ∈ s, Finsupp.single a (f b)
-- Finsupp.single_sum
theorem single_sum [Zero M] [AddCommMonoid N] (s : ι →₀ M) (f : ι → M → N) (a : α) :
    single a (s.sum f) = s.sum fun d c => single a (f d c) 
Arguments: {α : Type u_1} {ι : Type u_2} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] (s : ι →₀ M) (f : ι → M → N) (a : α)
Goal: Finsupp.single a (s.sum f) = s.sum fun d c => Finsupp.single a (f d c)
-- Finsupp.prod_neg_index
@[to_additive]
theorem prod_neg_index [AddGroup G] [CommMonoid M] {g : α →₀ G} {h : α → G → M}
    (h0 : ∀ a, h a 0 = 1) : (-g).prod h = g.prod fun a b => h a (-b) 
Arguments: {α : Type u_1} {M : Type u_8} {G : Type u_12} [AddGroup G] [CommMonoid M] {g : α →₀ G} {h : α → G → M} (h0 : ∀ (a : α), h a 0 = 1)
Goal: (-g).prod h = g.prod fun a b => h a (-b)