/-- The canonical homomorphism from the center into the centroid -/
def centerToCentroid : NonUnitalSubsemiring.center α →ₙ+* CentroidHom α where
  toFun z :=
    { L (z : α) with
      map_mul_left' := ((Set.mem_center_iff _).mp z.prop).left_comm
      map_mul_right' := ((Set.mem_center_iff _).mp z.prop).left_assoc }
  map_zero' := by
    simp only [ZeroMemClass.coe_zero, map_zero]
    exact rfl
  map_add' := fun _ _ => by
    simp only [AddSubmonoid.coe_add, NonUnitalSubsemiring.coe_toAddSubmonoid, map_add]
    

Proof state:
F : Type u_1
M : Type u_2
N : Type u_3
R : Type u_4
α : Type u_5
inst✝¹² : NonUnitalNonAssocSemiring α
inst✝¹¹ : Monoid M
inst✝¹⁰ : Monoid N
inst✝⁹ : Semiring R
inst✝⁸ : DistribMulAction M α
inst✝⁷ : SMulCommClass M α α
inst✝⁶ : IsScalarTower M α α
inst✝⁵ : DistribMulAction N α
inst✝⁴ : SMulCommClass N α α
inst✝³ : IsScalarTower N α α
inst✝² : Module R α
inst✝¹ : SMulCommClass R α α
inst✝ : IsScalarTower R α α
x✝¹ x✝ : ↥(NonUnitalSubsemiring.center α)
⊢ {
      toAddMonoidHom :=
        { toZeroHom := ↑(L ↑x✝¹ + L ↑x✝),
          map_add' :=
            (_ :
              ∀ (x y : α),
                ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) (x + y) =
                  ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) x + ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) y) },
      map_mul_left' :=
        (_ :
          ∀ (a b : α),
            ZeroHom.toFun
                (↑{ toZeroHom := ↑(L ↑x✝¹ + L ↑x✝),
                    map_add' :=
                      (_ :
                        ∀ (x y : α),
                          ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) (x + y) =
                            ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) x + ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) y) })
                (a * b) =
              a *
                ZeroHom.toFun
                  (↑{ toZeroHom := ↑(L ↑x✝¹ + L ↑x✝),
                      map_add' :=
                        (_ :
                          ∀ (x y : α),
                            ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) (x + y) =
                              ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) x + ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) y) })
                  b),
      map_mul_right' :=
        (_ :
          ∀ (a b : α),
            ZeroHom.toFun
                (↑{ toZeroHom := ↑(L ↑x✝¹ + L ↑x✝),
                    map_add' :=
                      (_ :
                        ∀ (x y : α),
                          ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) (x + y) =
                            ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) x + ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) y) })
                (a * b) =
              ZeroHom.toFun
                  (↑{ toZeroHom := ↑(L ↑x✝¹ + L ↑x✝),
                      map_add' :=
                        (_ :
                          ∀ (x y : α),
                            ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) (x + y) =
                              ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) x + ZeroHom.toFun (↑(L ↑x✝¹ + L ↑x✝)) y) })
                  a *
                b) } =
    {
        toAddMonoidHom :=
          { toZeroHom := ↑(L ↑x✝¹),
            map_add' :=
              (_ :
                ∀ (x y : α),
                  ZeroHom.toFun (↑(L ↑x✝¹)) (x + y) = ZeroHom.toFun (↑(L ↑x✝¹)) x + ZeroHom.toFun (↑(L ↑x✝¹)) y) },
        map_mul_left' := (_ : ∀ (b c : α), ↑x✝¹ * (b * c) = b * (↑x✝¹ * c)),
        map_mul_right' := (_ : ∀ (b c : α), ↑x✝¹ * (b * c) = ↑x✝¹ * b * c) } +
      {
        toAddMonoidHom :=
          { toZeroHom := ↑(L ↑x✝),
            map_add' :=
              (_ :
                ∀ (x y : α),
                  ZeroHom.toFun (↑(L ↑x✝)) (x + y) = ZeroHom.toFun (↑(L ↑x✝)) x + ZeroHom.toFun (↑(L ↑x✝)) y) },
        map_mul_left' := (_ : ∀ (b c : α), ↑x✝ * (b * c) = b * (↑x✝ * c)),
        map_mul_right' := (_ : ∀ (b c : α), ↑x✝ * (b * c) = ↑x✝ * b * c) }

Next tactic:
exact rfl