Theorem: Module.Finite.of_isLocalizedModule
File: Mathlib/RingTheory/Localization/Finiteness.lean

Proof steps:
state_before: R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
⊢ Finite Rₚ Mₚ
state_after: case mk.intro
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Finite Rₚ Mₚ
tactic: obtain ⟨T, hT⟩ := ‹Module.Finite R M›
state_before: case mk.intro
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Finite Rₚ Mₚ
state_after: case h
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Submodule.span Rₚ ↑(Finset.image (⇑f) T) = ⊤
tactic: use T.image f
state_before: case h
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Submodule.span Rₚ ↑(Finset.image (⇑f) T) = ⊤
state_after: case h
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ ⊤ ≤ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
tactic: rw [eq_top_iff]
state_before: case h
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ ⊤ ≤ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
state_after: case h
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
tactic: rintro x -
state_before: case h
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
state_after: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
tactic: obtain ⟨⟨y, m⟩, (hyx : IsLocalizedModule.mk' f y m = x)⟩ :=
    IsLocalizedModule.mk'_surjective S f x
state_before: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
state_after: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
tactic: have hy : y ∈ Submodule.span R T := by rw [hT]; trivial
state_before: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
state_after: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.map f (Submodule.span R ↑T)
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
tactic: have : f y ∈ Submodule.map f (Submodule.span R T) := Submodule.mem_map_of_mem hy
state_before: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.map f (Submodule.span R ↑T)
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
state_after: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.span R (⇑f '' ↑T)
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
tactic: rw [Submodule.map_span] at this
state_before: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.span R (⇑f '' ↑T)
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
state_after: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.span R (⇑f '' ↑T)
H : Submodule.span R (⇑f '' ↑T) ≤ Submodule.restrictScalars R (Submodule.span Rₚ (⇑f '' ↑T))
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
tactic: have H : Submodule.span R (f '' T) ≤
      (Submodule.span Rₚ (f '' T)).restrictScalars R := by
    rw [Submodule.span_le]; exact Submodule.subset_span
state_before: case h.intro.mk
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.span R (⇑f '' ↑T)
H : Submodule.span R (⇑f '' ↑T) ≤ Submodule.restrictScalars R (Submodule.span Rₚ (⇑f '' ↑T))
⊢ x ∈ Submodule.span Rₚ ↑(Finset.image (⇑f) T)
state_after: case h.e'_4
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.span R (⇑f '' ↑T)
H : Submodule.span R (⇑f '' ↑T) ≤ Submodule.restrictScalars R (Submodule.span Rₚ (⇑f '' ↑T))
⊢ x = IsLocalization.mk' Rₚ 1 m • f y

case h.e'_5
R : Type u
inst✝¹¹ : CommSemiring R
S : Submonoid R
Rₚ : Type v
inst✝¹⁰ : CommSemiring Rₚ
inst✝⁹ : Algebra R Rₚ
inst✝⁸ : IsLocalization S Rₚ
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
Mₚ : Type t
inst✝⁵ : AddCommMonoid Mₚ
inst✝⁴ : Module R Mₚ
inst✝³ : Module Rₚ Mₚ
inst✝² : IsScalarTower R Rₚ Mₚ
f : M →ₗ[R] Mₚ
inst✝¹ : IsLocalizedModule S f
inst✝ : Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
x : Mₚ
y : M
m : ↥S
hyx : IsLocalizedModule.mk' f y m = x
hy : y ∈ Submodule.span R ↑T
this : f y ∈ Submodule.span R (⇑f '' ↑T)
H : Submodule.span R (⇑f '' ↑T) ≤ Submodule.restrictScalars R (Submodule.span Rₚ (⇑f '' ↑T))
⊢ Submodule.span Rₚ ↑(Finset.image (⇑f) T) = Submodule.span Rₚ (⇑f '' ↑T)
tactic: convert (Submodule.span Rₚ (f '' T)).smul_mem
    (IsLocalization.mk' Rₚ (1 : R) m) (H this) using 1