-- Lean 4 proof step from Mathlib.RingTheory.FinitePresentation (goal)
Goal:
R : Type w₁
A : Type w₂
inst : CommRing R
inst_1 : CommRing A
inst_2 : Algebra R A
n : ℕ
f : MvPolynomial (Fin n) R →ₐ[R] A
hf : Surjective.{w₁ + 1, w₂ + 1} (α := MvPolynomial (Fin n) R) (β := A) (⇑f : (a : MvPolynomial (Fin n) R) → A)
inst_3 : FinitePresentation R A
m : ℕ
f' : MvPolynomial (Fin m) R →ₐ[R] A
hf' : Surjective.{w₁ + 1, w₂ + 1} (α := MvPolynomial (Fin m) R) (β := A) (⇑f' : (a : MvPolynomial (Fin m) R) → A)
s : Finset (MvPolynomial (Fin m) R)
hs :
  Eq (α := Ideal (MvPolynomial (Fin m) R)) (Ideal.span (↑s : Set (MvPolynomial (Fin m) R))) (RingHom.ker f'.toRingHom)
RXn : Type w₁ := MvPolynomial (Fin n) R
RXm : Type w₁ := MvPolynomial (Fin m) R
g : (i : Fin n) → MvPolynomial (Fin m) R
hg :
  ∀ (i : Fin n),
    Eq.{w₂ + 1} (α := A) ((f' : (a : MvPolynomial (Fin m) R) → A) (g i) : A)
      ((f : (a : MvPolynomial (Fin n) R) → A) (MvPolynomial.X i) : A)
h : (i : Fin m) → MvPolynomial (Fin n) R
hh :
  ∀ (i : Fin m),
    Eq.{w₂ + 1} (α := A) ((f : (a : MvPolynomial (Fin n) R) → A) (h i) : A)
      ((f' : (a : MvPolynomial (Fin m) R) → A) (MvPolynomial.X i) : A)
aeval_h : RXm →ₐ[R] RXn := MvPolynomial.aeval h
g' : Fin n → RXn :=
  fun (i : Fin n) ↦
    HSub.hSub (α := MvPolynomial (Fin n) R) (β := RXn) (MvPolynomial.X i) ((aeval_h : (a : RXm) → RXn) (g i) : RXn)
hh' :
  ∀ (x : RXm),
    Eq.{w₂ + 1} (α := A) ((f : (a : MvPolynomial (Fin n) R) → A) ((aeval_h : (a : RXm) → RXn) x : RXn) : A)
      ((f' : (a : MvPolynomial (Fin m) R) → A) x : A)
s' : Set RXn := Set.range g' ∪ (⇑aeval_h : (a : RXm) → RXn) '' (↑s : Set RXm)
leI : LE.le (α := Ideal RXn) (Ideal.span s') (RingHom.ker f.toRingHom)
x : RXn
hx : Membership.mem (γ := Submodule RXn RXn) (RingHom.ker f.toRingHom) x
this : Membership.mem (γ := Subalgebra R RXn) (adjoin R (Set.range MvPolynomial.X)) x
x₁ : RXm
y₁ : RXn
hy₁ : Membership.mem (γ := AddSubmonoid RXn) (Submodule.toAddSubmonoid (Ideal.span s')) y₁
hx_1 :
  Membership.mem (γ := Subalgebra R RXn) (adjoin R (Set.range MvPolynomial.X))
    (HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) x₁ : RXn) y₁)
h₁ :
  HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) x₁ : RXn) y₁ ∈
    aeval_h.range.toAddSubmonoid ⊔ Submodule.toAddSubmonoid (Ideal.span s')
x₂ : RXm
y₂ : RXn
hy₂ : Membership.mem (γ := AddSubmonoid RXn) (Submodule.toAddSubmonoid (Ideal.span s')) y₂
hy :
  Membership.mem (γ := Subalgebra R RXn) (adjoin R (Set.range MvPolynomial.X))
    (HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) x₂ : RXn) y₂)
h₂ :
  HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) x₂ : RXn) y₂ ∈
    aeval_h.range.toAddSubmonoid ⊔ Submodule.toAddSubmonoid (Ideal.span s')
⊢ HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) x₁ : RXn) y₁ *
      HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) x₂ : RXn) y₂ ∈
    aeval_h.range.toAddSubmonoid ⊔ Submodule.toAddSubmonoid (Ideal.span s')
have refine_4 : HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) (x₁ * x₂) : RXn)
    (HMul.hMul (β := RXn) y₁ ((aeval_h.toRingHom : (a : RXm) → RXn) x₂ : RXn) +
      HAdd.hAdd (α := RXn) ((aeval_h.toRingHom : (a : RXm) → RXn) x₁ : RXn) y₁ * y₂) ∈
  aeval_h.range.toAddSubmonoid ⊔ Submodule.toAddSubmonoid (Ideal.span s')
Tactic: rw [mul_add, add_mul, add_assoc, ← map_mul]