Module docstring
{"# Pi instances for groups with zero
This file defines monoid with zero, group with zero, and related structure instances for pi types. "}
{"# Pi instances for groups with zero
This file defines monoid with zero, group with zero, and related structure instances for pi types. "}
Pi.mulZeroClass
      instance
     : MulZeroClass (∀ i, α i)
        instance mulZeroClass : MulZeroClass (∀ i, α i) where
  zero_mul := by intros; ext; exact zero_mul _
  mul_zero := by intros; ext; exact mul_zero _
        MulHom.single
      definition
     (i : ι) : α i →ₙ* ∀ i, α i
        /-- The multiplicative homomorphism including a single `MulZeroClass`
into a dependent family of `MulZeroClass`es, as functions supported at a point.
This is the `MulHom` version of `Pi.single`. -/
@[simps]
def _root_.MulHom.single (i : ι) : α i →ₙ* ∀ i, α i where
  toFun := Pi.single i
  map_mul' := Pi.single_op₂ (fun _ ↦ (· * ·)) (fun _ ↦ zero_mul _) _
        Pi.single_mul
      theorem
     (i : ι) (x y : α i) : single i (x * y) = single i x * single i y
        lemma single_mul (i : ι) (x y : α i) : single i (x * y) = single i x * single i y :=
  (MulHom.single _).map_mul _ _
        Pi.single_mul_left_apply
      theorem
     (i j : ι) (a : α i) (f : ∀ i, α i) : single i (a * f i) j = single i a j * f j
        lemma single_mul_left_apply (i j : ι) (a : α i) (f : ∀ i, α i) :
    single i (a * f i) j = single i a j * f j :=
  (apply_single (fun i ↦ (· * f i)) (fun _ ↦ zero_mul _) _ _ _).symm
        Pi.single_mul_right_apply
      theorem
     (i j : ι) (f : ∀ i, α i) (a : α i) : single i (f i * a) j = f j * single i a j
        lemma single_mul_right_apply (i j : ι) (f : ∀ i, α i) (a : α i) :
    single i (f i * a) j = f j * single i a j :=
  (apply_single (f · * ·) (fun _ ↦ mul_zero _) _ _ _).symm
        Pi.single_mul_left
      theorem
     (a : α i) : single i (a * f i) = single i a * f
        lemma single_mul_left (a : α i) : single i (a * f i) = single i a * f :=
  funext fun _ ↦ single_mul_left_apply _ _ _ _
        Pi.single_mul_right
      theorem
     (a : α i) : single i (f i * a) = f * single i a
        lemma single_mul_right (a : α i) : single i (f i * a) = f * single i a :=
  funext fun _ ↦ single_mul_right_apply _ _ _ _
        Pi.mulZeroOneClass
      instance
     [∀ i, MulZeroOneClass (α i)] : MulZeroOneClass (∀ i, α i)
        instance mulZeroOneClass [∀ i, MulZeroOneClass (α i)] : MulZeroOneClass (∀ i, α i) where
  __ := mulZeroClass
  __ := mulOneClass
        Pi.monoidWithZero
      instance
     [∀ i, MonoidWithZero (α i)] : MonoidWithZero (∀ i, α i)
        instance monoidWithZero [∀ i, MonoidWithZero (α i)] : MonoidWithZero (∀ i, α i) where
  __ := monoid
  __ := mulZeroClass
        Pi.commMonoidWithZero
      instance
     [∀ i, CommMonoidWithZero (α i)] : CommMonoidWithZero (∀ i, α i)
        instance commMonoidWithZero [∀ i, CommMonoidWithZero (α i)] : CommMonoidWithZero (∀ i, α i) where
  __ := monoidWithZero
  __ := commMonoid
        Pi.semigroupWithZero
      instance
     [∀ i, SemigroupWithZero (α i)] : SemigroupWithZero (∀ i, α i)
        instance semigroupWithZero [∀ i, SemigroupWithZero (α i)] : SemigroupWithZero (∀ i, α i) where
  __ := semigroup
  __ := mulZeroClass