-- Mathlib/RingTheory/RingHom/FiniteType.lean
theorem finiteType_localizationPreserves : RingHom.LocalizationPreserves @RingHom.FiniteType

Proof state:
case h.intro.intro.mk.intro.intro
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this✝ : Algebra R' S' := f'.toAlgebra
this : IsScalarTower R R' S'
fₐ : S →ₐ[R] S' := AlgHom.mk' (algebraMap S S') ⋯
T : Finset S
hT : Algebra.adjoin R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : y ∈ Algebra.adjoin R ↑T
⊢ IsLocalization.mk' S' 1 ⟨f r, ⋯⟩ * (algebraMap S S') y ∈ Algebra.adjoin R' (⇑(algebraMap S S') '' ↑T)

Tactic:
replace hy : algebraMap S S' y ∈ (Algebra.adjoin R (T : Set S)).map fₐ :=
  Subalgebra.mem_map.mpr ⟨_, hy, rfl⟩

Result:
case h.intro.intro.mk.intro.intro
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this✝ : Algebra R' S' := f'.toAlgebra
this : IsScalarTower R R' S'
fₐ : S →ₐ[R] S' := AlgHom.mk' (algebraMap S S') ⋯
T : Finset S
hT : Algebra.adjoin R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S S') y ∈ Subalgebra.map fₐ (Algebra.adjoin R ↑T)
⊢ IsLocalization.mk' S' 1 ⟨f r, ⋯⟩ * (algebraMap S S') y ∈ Algebra.adjoin R' (⇑(algebraMap S S') '' ↑T)

Proof state:
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
hf : f.FiniteType
this✝ : Algebra R S := f.toAlgebra
this : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
⊢ (IsLocalization.map S' f ⋯).FiniteType

Tactic:
let f' : R' →+* S' := IsLocalization.map S' f (Submonoid.le_comap_map M)

Result:
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
hf : f.FiniteType
this✝ : Algebra R S := f.toAlgebra
this : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
⊢ (IsLocalization.map S' f ⋯).FiniteType

Proof state:
case h.e'_5
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this✝ : Algebra R' S' := f'.toAlgebra
this : IsScalarTower R R' S'
fₐ : S →ₐ[R] S' := AlgHom.mk' (algebraMap S S') ⋯
T : Finset S
hT : Algebra.adjoin R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S S') y ∈ Algebra.adjoin R (⇑fₐ '' ↑T)
H :
  Algebra.adjoin R (⇑(algebraMap S S') '' ↑T) ≤
    Subalgebra.restrictScalars R (Algebra.adjoin R' (⇑(algebraMap S S') '' ↑T))
⊢ IsLocalization.mk' S' 1 ⟨f r, ⋯⟩ * (algebraMap S S') y = IsLocalization.mk' R' 1 ⟨r, hr⟩ • (algebraMap S S') y

Tactic:
rw [Algebra.smul_def]

Result:
case h.e'_5
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this✝ : Algebra R' S' := f'.toAlgebra
this : IsScalarTower R R' S'
fₐ : S →ₐ[R] S' := AlgHom.mk' (algebraMap S S') ⋯
T : Finset S
hT : Algebra.adjoin R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S S') y ∈ Algebra.adjoin R (⇑fₐ '' ↑T)
H :
  Algebra.adjoin R (⇑(algebraMap S S') '' ↑T) ≤
    Subalgebra.restrictScalars R (Algebra.adjoin R' (⇑(algebraMap S S') '' ↑T))
⊢ IsLocalization.mk' S' 1 ⟨f r, ⋯⟩ * (algebraMap S S') y =
    (algebraMap R' S') (IsLocalization.mk' R' 1 ⟨r, hr⟩) * (algebraMap S S') y

Proof state:
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
hf : f.FiniteType
this✝¹ : Algebra R S := f.toAlgebra
this✝ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this : Algebra R' S' := f'.toAlgebra
⊢ (IsLocalization.map S' f ⋯).FiniteType

Tactic:
haveI : IsScalarTower R R' S' :=
  IsScalarTower.of_algebraMap_eq' (IsLocalization.map_comp M.le_comap_map).symm

Result:
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
hf : f.FiniteType
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this✝ : Algebra R' S' := f'.toAlgebra
this : IsScalarTower R R' S'
⊢ (IsLocalization.map S' f ⋯).FiniteType

Proof state:
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this✝ : Algebra R' S' := f'.toAlgebra
this : IsScalarTower R R' S'
fₐ : S →ₐ[R] S' := AlgHom.mk' (algebraMap S S') ⋯
T : Finset S
hT : Algebra.adjoin R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ y ∈ Algebra.adjoin R ↑T

Tactic:
rw [hT]

Result:
R S : Type u_1
inst✝⁷ : CommRing R
inst✝⁶ : CommRing S
f : R →+* S
M : Submonoid R
R' S' : Type u_1
inst✝⁵ : CommRing R'
inst✝⁴ : CommRing S'
inst✝³ : Algebra R R'
inst✝² : Algebra S S'
inst✝¹ : IsLocalization M R'
inst✝ : IsLocalization (Submonoid.map f M) S'
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R S' := ((algebraMap S S').comp f).toAlgebra
f' : R' →+* S' := IsLocalization.map S' f ⋯
this✝ : Algebra R' S' := f'.toAlgebra
this : IsScalarTower R R' S'
fₐ : S →ₐ[R] S' := AlgHom.mk' (algebraMap S S') ⋯
T : Finset S
hT : Algebra.adjoin R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ y ∈ ⊤