/-- 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
    ext n
    

Proof state:
case h
Γ : Type u_1
R : Type u_2
inst✝ : Semiring R
f g : HahnSeries ℕ R
n : ℕ
⊢ (PowerSeries.coeff R n)
      (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)) =
    (PowerSeries.coeff R n)
      (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:
simp only [PowerSeries.coeff_mul, PowerSeries.coeff_mk, mul_coeff, isPwo_support]