-- Lean 4 proof step from Mathlib.RingTheory.MvPowerSeries.Substitution (goal)
Goal:
σ : Type u_1
R : Type u_3
inst : CommRing R
a : σ → R
f : MvPowerSeries σ R
h :
  ∀ (n : σ →₀ ℕ),
    Eq.{u_3 + 1} (α := R)
      ((coeff n : (a : MvPowerSeries σ R) → R)
          ((rescale a : (a : MvPowerSeries σ R) → MvPowerSeries σ R) f : MvPowerSeries σ R) :
        R)
      ((coeff n : (a : MvPowerSeries σ R) → R) (subst (HSMul.hSMul (β := (s : σ) → MvPowerSeries σ R) a X) f) : R)
h₁ :
  ∀ (n : σ →₀ ℕ),
    HMul.hMul (α := R) (β := R) (n.prod fun (s : σ) (m : ℕ) ↦ a s ^ m : R)
        ((coeff n : (a : MvPowerSeries σ R) → R) f : R) =
      (coeff n : (a : MvPowerSeries σ R) → R) (subst (HSMul.hSMul (β := (s : σ) → MvPowerSeries σ R) a X) f)
h₂ :
  ∀ (n : σ →₀ ℕ),
    HMul.hMul (α := R) (β := R) (n.prod fun (s : σ) (m : ℕ) ↦ a s ^ m : R)
        ((coeff n : (a : MvPowerSeries σ R) → R) f : R) =
      ∑
        i ∈
          Set.Finite.toFinset (s :=
            Function.support.{u_1, u_3} (M := R) fun (d : σ →₀ ℕ) ↦
              HSMul.hSMul (α := R) (β := R) ((coeff d : (a : MvPowerSeries σ R) → R) f : R)
                ((coeff n : (a : MvPowerSeries σ R) → R)
                    (d.prod fun (s : σ) (e : ℕ) ↦ HSMul.hSMul (β := (s : σ) → MvPowerSeries σ R) a X s ^ e) :
                  R))
            ⋯,
        HSMul.hSMul (α := R) (β := R) ((coeff i : (a : MvPowerSeries σ R) → R) f : R)
          ((coeff n : (a : MvPowerSeries σ R) → R)
              (i.prod fun (s : σ) (e : ℕ) ↦ HSMul.hSMul (β := (s : σ) → MvPowerSeries σ R) a X s ^ e) :
            R)
h₃ :
  ∀ (n : σ →₀ ℕ),
    HMul.hMul (α := R) (β := R) (n.prod fun (s : σ) (m : ℕ) ↦ a s ^ m : R)
        ((coeff n : (a : MvPowerSeries σ R) → R) f : R) =
      ∑
        d ∈
          Set.Finite.toFinset (s :=
            Function.support.{u_1, u_3} (M := R) fun (d : σ →₀ ℕ) ↦
              HMul.hMul (α := R) (β := R) ((coeff d : (a : MvPowerSeries σ R) → R) f : R)
                ((coeff n : (a : MvPowerSeries σ R) → R)
                    (d.prod fun (s : σ) (e : ℕ) ↦ HSMul.hSMul (β := MvPowerSeries σ R) (a s) (X s) ^ e) :
                  R))
            ⋯,
        HMul.hMul (α := R) (β := R) ((coeff d : (a : MvPowerSeries σ R) → R) f : R)
          ((coeff n : (a : MvPowerSeries σ R) → R)
              (d.prod fun (s : σ) (e : ℕ) ↦ HSMul.hSMul (β := MvPowerSeries σ R) (a s) (X s) ^ e) :
            R)
⊢ (rescale a : (a : MvPowerSeries σ R) → MvPowerSeries σ R) f =
    subst (HSMul.hSMul (β := (s : σ) → MvPowerSeries σ R) a X) f
have h₄ : ∀ (n : σ →₀ ℕ),
  HMul.hMul (α := R) (β := R) (n.prod fun (s : σ) (m : ℕ) ↦ a s ^ m : R)
      ((coeff n : (a : MvPowerSeries σ R) → R) f : R) =
    HMul.hMul (α := R) (β := R) ((coeff n : (a : MvPowerSeries σ R) → R) f : R)
      ((coeff n : (a : MvPowerSeries σ R) → R)
          (n.prod fun (s : σ) (e : ℕ) ↦ HSMul.hSMul (β := MvPowerSeries σ R) (a s) (X s) ^ e) :
        R)
Tactic: classical
  ext n
  rw [coeff_rescale]
  rw [coeff_subst (HasSubst.smul_X a),
    finsum_eq_sum _ (coeff_subst_finite (HasSubst.smul_X a) f n)]
  simp only [Pi.smul_apply', smul_eq_mul]
  rw [Finset.sum_eq_single n _ _]
  · simp [mul_comm, ← monomial_eq]
  · intro b hb hbn
    rw [← monomial_eq, coeff_monomial, if_neg (Ne.symm hbn), mul_zero]
  · intro hn
    simpa using hn