∀ {M₁ : Type u_1} {M₂ : Type u_2} [inst : Mul M₁] [inst_1 : CommSemigroup M₂] (f : M₁ → M₂) (hf : Function.Injective f)
  (mul : ∀ (x y : M₁), f (x * y) = f x * f y),
  Function.Injective.commSemigroup f hf mul = { toSemigroup := Function.Injective.semigroup f hf mul, mul_comm := ⋯ }