{M₀ : Type u_1} →
  {M₀' : Type u_3} →
    [inst : Zero M₀'] →
      [inst_1 : Mul M₀'] →
        [inst_2 : One M₀'] →
          [inst_3 : Pow M₀' ℕ] →
            [inst_4 : CommMonoidWithZero M₀] →
              (f : M₀' → M₀) →
                Function.Injective f →
                  f 0 = 0 →
                    f 1 = 1 →
                      (∀ (x y : M₀'), f (x * y) = f x * f y) →
                        (∀ (x : M₀') (n : ℕ), f (x ^ n) = f x ^ n) → CommMonoidWithZero M₀'