∀ {M : Type u} [toSemigroup : Semigroup M] [toSemigroup_1 : Semigroup M] (e_toSemigroup : toSemigroup = toSemigroup_1)
  [toOne : One M] [toOne_1 : One M] (e_toOne : toOne = toOne_1) (one_mul : ∀ (a : M), 1 * a = a)
  (mul_one : ∀ (a : M), a * 1 = a) (npow npow_1 : ℕ → M → M) (e_npow : npow = npow_1)
  (npow_zero : ∀ (x : M), npow 0 x = 1) (npow_succ : ∀ (n : ℕ) (x : M), npow (n + 1) x = npow n x * x),
  { toSemigroup := toSemigroup, toOne := toOne, one_mul := one_mul, mul_one := mul_one, npow := npow,
      npow_zero := npow_zero, npow_succ := npow_succ } =
    { toSemigroup := toSemigroup_1, toOne := toOne_1, one_mul := ⋯, mul_one := ⋯, npow := npow_1, npow_zero := ⋯,
      npow_succ := ⋯ }