Theorem: span_eq_top_of_isLocalizedModule
File: Mathlib/RingTheory/Localization/Module.lean

tactic: obtain ⟨⟨m, s⟩, h⟩ := IsLocalizedModule.surj S f x
state_before: R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
⊢ x ∈ span Rₛ (⇑f '' v)
state_after: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : (m, s).2 • x = f (m, s).1
⊢ x ∈ span Rₛ (⇑f '' v)

tactic: rw [Submonoid.smul_def, ← algebraMap_smul Rₛ, ← Units.smul_isUnit (IsLocalization.map_units Rₛ s),
  eq_comm, ← inv_smul_eq_iff] at h
state_before: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : (m, s).2 • x = f (m, s).1
⊢ x ∈ span Rₛ (⇑f '' v)
state_after: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : ⋯.unit⁻¹ • f (m, s).1 = x
⊢ x ∈ span Rₛ (⇑f '' v)

tactic: refine h ▸ smul_mem _ _  (span_subset_span R Rₛ _ ?_)
state_before: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : ⋯.unit⁻¹ • f (m, s).1 = x
⊢ x ∈ span Rₛ (⇑f '' v)
state_after: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : ⋯.unit⁻¹ • f (m, s).1 = x
⊢ f (m, s).1 ∈ ↑(span R (⇑f '' v))

tactic: rw [← LinearMap.coe_restrictScalars R, ← LinearMap.map_span, hv]
state_before: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : ⋯.unit⁻¹ • f (m, s).1 = x
⊢ f (m, s).1 ∈ ↑(span R (⇑f '' v))
state_after: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : ⋯.unit⁻¹ • f (m, s).1 = x
⊢ (↑R f) (m, s).1 ∈ ↑(map (↑R f) ⊤)

tactic: exact mem_map_of_mem mem_top
state_before: case intro.mk
R : Type u_1
Rₛ : Type u_2
inst✝¹¹ : CommSemiring R
S : Submonoid R
inst✝¹⁰ : CommSemiring Rₛ
inst✝⁹ : Algebra R Rₛ
hT : IsLocalization S Rₛ
M : Type u_3
M' : Type u_4
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module Rₛ M
inst✝⁵ : IsScalarTower R Rₛ M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module Rₛ M'
inst✝¹ : IsScalarTower R Rₛ M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
v : Set M
hv : span R v = ⊤
x : M'
x✝ : x ∈ ⊤
m : M
s : ↥S
h : ⋯.unit⁻¹ • f (m, s).1 = x
⊢ (↑R f) (m, s).1 ∈ ↑(map (↑R f) ⊤)
state_after: no goals