{R : Type u_1} →
  {S : Type u_3} →
    [inst : Zero S] →
      [inst_1 : One S] →
        [inst_2 : Add S] →
          [inst_3 : SMul ℕ S] →
            [inst_4 : Neg S] →
              [inst_5 : Sub S] →
                [inst_6 : SMul ℤ S] →
                  [inst_7 : NatCast S] →
                    [inst_8 : IntCast S] →
                      [inst_9 : AddCommGroupWithOne R] →
                        (f : S → R) →
                          Function.Injective f →
                            f 0 = 0 →
                              f 1 = 1 →
                                (∀ (x y : S), f (x + y) = f x + f y) →
                                  (∀ (x : S), f (-x) = -f x) →
                                    (∀ (x y : S), f (x - y) = f x - f y) →
                                      (∀ (n : ℕ) (x : S), f (n • x) = n • f x) →
                                        (∀ (n : ℤ) (x : S), f (n • x) = n • f x) →
                                          (∀ (n : ℕ), f ↑n = ↑n) → (∀ (n : ℤ), f ↑n = ↑n) → AddCommGroupWithOne S