Theorem: Module.Finite_of_isLocalization
File: Mathlib/RingTheory/LocalProperties.lean

tactic: classical
have : algebraMap Rₚ Sₚ = IsLocalization.map (T := Algebra.algebraMapSubmonoid S M) Sₚ
    (algebraMap R S) (Submonoid.le_comap_map M) := by
  apply IsLocalization.ringHom_ext M
  simp only [IsLocalization.map_comp, ← IsScalarTower.algebraMap_eq]
obtain ⟨T, hT⟩ := hRS
use T.image (algebraMap S Sₚ)
rw [eq_top_iff]
rintro x -
obtain ⟨y, ⟨_, ⟨r, hr, rfl⟩⟩, rfl⟩ :=
  IsLocalization.mk'_surjective (Algebra.algebraMapSubmonoid S M) x
rw [IsLocalization.mk'_eq_mul_mk'_one, mul_comm, Finset.coe_image]
have hy : y ∈ Submodule.span R ↑T := by rw [hT]; trivial
replace hy : algebraMap S Sₚ y ∈ Submodule.map (IsScalarTower.toAlgHom R S Sₚ).toLinearMap
  (Submodule.span R (T : Set S)) := Submodule.mem_map_of_mem
(f := (IsScalarTower.toAlgHom R S Sₚ).toLinearMap) hy
rw [Submodule.map_span (IsScalarTower.toAlgHom R S Sₚ).toLinearMap T] at hy
have H : Submodule.span R (algebraMap S Sₚ '' T) ≤
    (Submodule.span Rₚ (algebraMap S Sₚ '' T)).restrictScalars R := by
  rw [Submodule.span_le]; exact Submodule.subset_span
convert (Submodule.span Rₚ (algebraMap S Sₚ '' T)).smul_mem
  (IsLocalization.mk' Rₚ (1 : R) ⟨r, hr⟩) (H hy) using 1
rw [Algebra.smul_def, this, IsLocalization.map_mk', map_one]
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
hRS : Finite R S
⊢ Finite Rₚ Sₚ
state_after: no goals

tactic: have : algebraMap Rₚ Sₚ = IsLocalization.map (T := Algebra.algebraMapSubmonoid S M) Sₚ
    (algebraMap R S) (Submonoid.le_comap_map M) := by
  apply IsLocalization.ringHom_ext M
  simp only [IsLocalization.map_comp, ← IsScalarTower.algebraMap_eq]
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
hRS : Finite R S
⊢ Finite Rₚ Sₚ
state_after: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
hRS : Finite R S
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
⊢ Finite Rₚ Sₚ

tactic: obtain ⟨T, hT⟩ := hRS
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
hRS : Finite R S
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
⊢ Finite Rₚ Sₚ
state_after: case mk.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
⊢ Finite Rₚ Sₚ

tactic: use T.image (algebraMap S Sₚ)
state_before: case mk.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
⊢ Finite Rₚ Sₚ
state_after: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
⊢ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T) = ⊤

tactic: rw [eq_top_iff]
state_before: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
⊢ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T) = ⊤
state_after: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
⊢ ⊤ ≤ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T)

tactic: rintro x -
state_before: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
⊢ ⊤ ≤ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T)
state_after: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
x : Sₚ
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T)

tactic: obtain ⟨y, ⟨_, ⟨r, hr, rfl⟩⟩, rfl⟩ :=
  IsLocalization.mk'_surjective (Algebra.algebraMapSubmonoid S M) x
state_before: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
x : Sₚ
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T)
state_after: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ IsLocalization.mk' Sₚ y ⟨(algebraMap R S) r, ⋯⟩ ∈ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T)

tactic: rw [IsLocalization.mk'_eq_mul_mk'_one, mul_comm, Finset.coe_image]
state_before: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ IsLocalization.mk' Sₚ y ⟨(algebraMap R S) r, ⋯⟩ ∈ Submodule.span Rₚ ↑(Finset.image (⇑(algebraMap S Sₚ)) T)
state_after: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)

tactic: have hy : y ∈ Submodule.span R ↑T := by rw [hT]; trivial
state_before: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)
state_after: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : y ∈ Submodule.span R ↑T
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)

tactic: replace hy : algebraMap S Sₚ y ∈ Submodule.map (IsScalarTower.toAlgHom R S Sₚ).toLinearMap
  (Submodule.span R (T : Set S)) := Submodule.mem_map_of_mem
(f := (IsScalarTower.toAlgHom R S Sₚ).toLinearMap) hy
state_before: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : y ∈ Submodule.span R ↑T
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)
state_after: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.map (IsScalarTower.toAlgHom R S Sₚ).toLinearMap (Submodule.span R ↑T)
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)

tactic: rw [Submodule.map_span (IsScalarTower.toAlgHom R S Sₚ).toLinearMap T] at hy
state_before: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.map (IsScalarTower.toAlgHom R S Sₚ).toLinearMap (Submodule.span R ↑T)
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)
state_after: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)

tactic: have H : Submodule.span R (algebraMap S Sₚ '' T) ≤
    (Submodule.span Rₚ (algebraMap S Sₚ '' T)).restrictScalars R := by
  rw [Submodule.span_le]; exact Submodule.subset_span
state_before: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)
state_after: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
H :
  Submodule.span R (⇑(algebraMap S Sₚ) '' ↑T) ≤
    Submodule.restrictScalars R (Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T))
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)

tactic: convert (Submodule.span Rₚ (algebraMap S Sₚ '' T)).smul_mem
  (IsLocalization.mk' Rₚ (1 : R) ⟨r, hr⟩) (H hy) using 1
state_before: case h.intro.intro.mk.intro.intro
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
H :
  Submodule.span R (⇑(algebraMap S Sₚ) '' ↑T) ≤
    Submodule.restrictScalars R (Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T))
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y ∈ Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)
state_after: case h.e'_4
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
H :
  Submodule.span R (⇑(algebraMap S Sₚ) '' ↑T) ≤
    Submodule.restrictScalars R (Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T))
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y =
    IsLocalization.mk' Rₚ 1 ⟨r, hr⟩ • (algebraMap S Sₚ) y

tactic: rw [Algebra.smul_def, this, IsLocalization.map_mk', map_one]
state_before: case h.e'_4
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
H :
  Submodule.span R (⇑(algebraMap S Sₚ) '' ↑T) ≤
    Submodule.restrictScalars R (Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T))
⊢ IsLocalization.mk' Sₚ 1 ⟨(algebraMap R S) r, ⋯⟩ * (algebraMap S Sₚ) y =
    IsLocalization.mk' Rₚ 1 ⟨r, hr⟩ • (algebraMap S Sₚ) y
state_after: no goals

tactic: apply IsLocalization.ringHom_ext M
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
hRS : Finite R S
⊢ algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
state_after: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
hRS : Finite R S
⊢ (algebraMap Rₚ Sₚ).comp (algebraMap R Rₚ) = (IsLocalization.map Sₚ (algebraMap R S) ⋯).comp (algebraMap R Rₚ)

tactic: simp only [IsLocalization.map_comp, ← IsScalarTower.algebraMap_eq]
state_before: case h
R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
hRS : Finite R S
⊢ (algebraMap Rₚ Sₚ).comp (algebraMap R Rₚ) = (IsLocalization.map Sₚ (algebraMap R S) ⋯).comp (algebraMap R Rₚ)
state_after: no goals

tactic: rw [hT]
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ y ∈ Submodule.span R ↑T
state_after: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ y ∈ ⊤

tactic: trivial
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
⊢ y ∈ ⊤
state_after: no goals

tactic: rw [Submodule.span_le]
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
⊢ Submodule.span R (⇑(algebraMap S Sₚ) '' ↑T) ≤
    Submodule.restrictScalars R (Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T))
state_after: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
⊢ ⇑(algebraMap S Sₚ) '' ↑T ⊆ ↑(Submodule.restrictScalars R (Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)))

tactic: exact Submodule.subset_span
state_before: R✝ S✝ : Type u
inst✝¹⁸ : CommRing R✝
inst✝¹⁷ : CommRing S✝
M✝ : Submonoid R✝
N : Submonoid S✝
R' S' : Type u
inst✝¹⁶ : CommRing R'
inst✝¹⁵ : CommRing S'
f : R✝ →+* S✝
inst✝¹⁴ : Algebra R✝ R'
inst✝¹³ : Algebra S✝ S'
R : Type u_1
S : Type u_2
Rₚ : Type u_3
Sₚ : Type u_4
inst✝¹² : CommSemiring R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing Rₚ
inst✝⁹ : CommRing Sₚ
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R Rₚ
inst✝⁶ : Algebra R Sₚ
inst✝⁵ : Algebra S Sₚ
inst✝⁴ : Algebra Rₚ Sₚ
inst✝³ : IsScalarTower R S Sₚ
inst✝² : IsScalarTower R Rₚ Sₚ
M : Submonoid R
inst✝¹ : IsLocalization M Rₚ
inst✝ : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₚ
this : algebraMap Rₚ Sₚ = IsLocalization.map Sₚ (algebraMap R S) ⋯
T : Finset S
hT : Submodule.span R ↑T = ⊤
y : S
r : R
hr : r ∈ ↑M
hy : (algebraMap S Sₚ) y ∈ Submodule.span R (⇑(IsScalarTower.toAlgHom R S Sₚ).toLinearMap '' ↑T)
⊢ ⇑(algebraMap S Sₚ) '' ↑T ⊆ ↑(Submodule.restrictScalars R (Submodule.span Rₚ (⇑(algebraMap S Sₚ) '' ↑T)))
state_after: no goals