/-- The ring `HahnSeries ℕ R` is isomorphic to `PowerSeries R`. -/
@[simps]
def toPowerSeries : HahnSeries ℕ R ≃+* PowerSeries R where
  toFun f := PowerSeries.mk f.coeff
  invFun f := ⟨fun n => PowerSeries.coeff R n f, (Nat.lt_wfRel.wf.isWf _).isPwo⟩
  left_inv f := by
    ext
    simp
  right_inv f := by
    ext
    simp
  map_add' f g := by
    ext
    simp
  map_mul' f g := by
    

Proof state:
Γ : Type u_1
R : Type u_2
inst✝ : Semiring R
f g : HahnSeries ℕ R
⊢ Equiv.toFun
      { toFun := fun f => PowerSeries.mk f.coeff,
        invFun := fun f =>
          { coeff := fun n => (PowerSeries.coeff R n) f,
            isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) },
        left_inv :=
          (_ :
            ∀ (f : HahnSeries ℕ R),
              (fun f =>
                    { coeff := fun n => (PowerSeries.coeff R n) f,
                      isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) })
                  ((fun f => PowerSeries.mk f.coeff) f) =
                f),
        right_inv :=
          (_ :
            ∀ (f : PowerSeries R),
              (fun f => PowerSeries.mk f.coeff)
                  ((fun f =>
                      { coeff := fun n => (PowerSeries.coeff R n) f,
                        isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) })
                    f) =
                f) }
      (f * g) =
    Equiv.toFun
        { toFun := fun f => PowerSeries.mk f.coeff,
          invFun := fun f =>
            { coeff := fun n => (PowerSeries.coeff R n) f,
              isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) },
          left_inv :=
            (_ :
              ∀ (f : HahnSeries ℕ R),
                (fun f =>
                      { coeff := fun n => (PowerSeries.coeff R n) f,
                        isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) })
                    ((fun f => PowerSeries.mk f.coeff) f) =
                  f),
          right_inv :=
            (_ :
              ∀ (f : PowerSeries R),
                (fun f => PowerSeries.mk f.coeff)
                    ((fun f =>
                        { coeff := fun n => (PowerSeries.coeff R n) f,
                          isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) })
                      f) =
                  f) }
        f *
      Equiv.toFun
        { toFun := fun f => PowerSeries.mk f.coeff,
          invFun := fun f =>
            { coeff := fun n => (PowerSeries.coeff R n) f,
              isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) },
          left_inv :=
            (_ :
              ∀ (f : HahnSeries ℕ R),
                (fun f =>
                      { coeff := fun n => (PowerSeries.coeff R n) f,
                        isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) })
                    ((fun f => PowerSeries.mk f.coeff) f) =
                  f),
          right_inv :=
            (_ :
              ∀ (f : PowerSeries R),
                (fun f => PowerSeries.mk f.coeff)
                    ((fun f =>
                        { coeff := fun n => (PowerSeries.coeff R n) f,
                          isPwo_support' := (_ : Set.IsPwo (Function.support fun n => (PowerSeries.coeff R n) f)) })
                      f) =
                  f) }
        g

Next tactic:
ext n