-- Mathlib/RingTheory/Localization/Finiteness.lean
lemma of_isLocalizedModule [Module.Finite R M] : Module.Finite Rₚ Mₚ

Proof state:
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✝ : Module.Finite R M
⊢ Module.Finite Rₚ Mₚ

Tactic:
obtain ⟨T, hT⟩ := ‹Module.Finite R M›

Result:
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✝ : Module.Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Module.Finite Rₚ Mₚ

Proof state:
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✝ : Module.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:
convert (Submodule.span Rₚ (f '' T)).smul_mem
  (IsLocalization.mk' Rₚ (1 : R) m) (H this) using 0

Result:
case a
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✝ : Module.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) ↔ IsLocalization.mk' Rₚ 1 m • f y ∈ Submodule.span Rₚ (⇑f '' ↑T)

Proof state:
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✝ : Module.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 : f y ∈ Submodule.map f (Submodule.span R T) := Submodule.mem_map_of_mem hy

Result:
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✝ : Module.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)

Proof state:
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✝ : Module.Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Module.Finite Rₚ Mₚ

Tactic:
use T.image f

Result:
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✝ : Module.Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Submodule.span Rₚ ↑(Finset.image (⇑f) T) = ⊤

Proof state:
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✝ : Module.Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ Submodule.span Rₚ ↑(Finset.image (⇑f) T) = ⊤

Tactic:
rw [eq_top_iff]

Result:
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✝ : Module.Finite R M
T : Finset M
hT : Submodule.span R ↑T = ⊤
⊢ ⊤ ≤ Submodule.span Rₚ ↑(Finset.image (⇑f) T)

Proof state:
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✝ : Module.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:
rw [Submodule.map_span] at this

Result:
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✝ : Module.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)