@@ -5,6 +5,7 @@ Authors: Andrew Yang
5
5
-/
6
6
import Mathlib.Algebra.Module.LocalizedModule
7
7
import Mathlib.LinearAlgebra.Quotient
8
+ import Mathlib.RingTheory.Localization.Module
8
9
9
10
/-!
10
11
# Localization of Submodules
@@ -27,7 +28,7 @@ Results about localizations of submodules and quotient modules are provided in t
27
28
28
29
open nonZeroDivisors
29
30
30
- universe u u' v v'
31
+ universe u u' v v' w w'
31
32
32
33
variable {R : Type u} (S : Type u') {M : Type v} {N : Type v'}
33
34
variable [CommRing R] [CommRing S] [AddCommGroup M] [AddCommGroup N]
@@ -48,6 +49,10 @@ def Submodule.localized' : Submodule S N where
48
49
have ⟨y, t, hyt⟩ := IsLocalization.mk'_surjective p r
49
50
exact ⟨y • m, M'.smul_mem y hm, t * s, by simp [← hyt, ← hx, IsLocalizedModule.mk'_smul_mk']⟩
50
51
52
+ lemma Submodule.mem_localized' (x : N) :
53
+ x ∈ Submodule.localized' S p f M' ↔ ∃ m ∈ M', ∃ s : p, IsLocalizedModule.mk' f m s = x :=
54
+ Iff.rfl
55
+
51
56
/-- The localization of an `R`-submodule of `M` at `p` viewed as an `Rₚ`-submodule of `Mₚ`. -/
52
57
abbrev Submodule.localized : Submodule (Localization p) (LocalizedModule p M) :=
53
58
M'.localized' (Localization p) p (LocalizedModule.mkLinearMap p M)
@@ -113,3 +118,52 @@ instance IsLocalizedModule.toLocalizedQuotient' (M' : Submodule R M) :
113
118
114
119
instance (M' : Submodule R M) : IsLocalizedModule p (M'.toLocalizedQuotient p) :=
115
120
IsLocalizedModule.toLocalizedQuotient' _ _ _ _
121
+
122
+ section LinearMap
123
+
124
+ variable {P : Type w} [AddCommGroup P] [Module R P]
125
+ variable {Q : Type w'} [AddCommGroup Q] [Module R Q] [Module S Q] [IsScalarTower R S Q]
126
+ variable (f' : P →ₗ[R] Q) [IsLocalizedModule p f']
127
+
128
+ lemma LinearMap.localized'_ker_eq_ker_localizedMap (g : M →ₗ[R] P) :
129
+ Submodule.localized' S p f (LinearMap.ker g) =
130
+ LinearMap.ker ((IsLocalizedModule.map p f f' g).extendScalarsOfIsLocalization p S) := by
131
+ ext x
132
+ simp only [Submodule.mem_localized', mem_ker, extendScalarsOfIsLocalization_apply']
133
+ constructor
134
+ · rintro ⟨m, hm, a, ha, rfl⟩
135
+ rw [IsLocalizedModule.map_mk', hm]
136
+ simp
137
+ · intro h
138
+ obtain ⟨⟨a, b⟩, rfl⟩ := IsLocalizedModule.mk'_surjective p f x
139
+ simp only [Function.uncurry_apply_pair, IsLocalizedModule.map_mk',
140
+ IsLocalizedModule.mk'_eq_zero, IsLocalizedModule.eq_zero_iff p f'] at h
141
+ obtain ⟨c, hc⟩ := h
142
+ refine ⟨c • a, by simpa, c * b, by simp⟩
143
+
144
+ lemma LinearMap.ker_localizedMap_eq_localized'_ker (g : M →ₗ[R] P) :
145
+ LinearMap.ker (IsLocalizedModule.map p f f' g) =
146
+ ((LinearMap.ker g).localized' S p f).restrictScalars _ := by
147
+ rw [localized'_ker_eq_ker_localizedMap S p f f']
148
+ rfl
149
+
150
+ /--
151
+ The canonical map from the kernel of `g` to the kernel of `g` localized at a submonoid.
152
+
153
+ This is a localization map by `LinearMap.toKerLocalized_isLocalizedModule`.
154
+ -/
155
+ @[simps!]
156
+ noncomputable def LinearMap.toKerIsLocalized (g : M →ₗ[R] P) :
157
+ ker g →ₗ[R] ker (IsLocalizedModule.map p f f' g) :=
158
+ f.restrict (fun x hx ↦ by simp [LinearMap.mem_ker, LinearMap.mem_ker.mp hx])
159
+
160
+ /-- The canonical map to the kernel of the localization of `g` is localizing.
161
+ In other words, localization commutes with kernels. -/
162
+ lemma LinearMap.toKerLocalized_isLocalizedModule (g : M →ₗ[R] P) :
163
+ IsLocalizedModule p (toKerIsLocalized p f f' g) :=
164
+ let e : Submodule.localized' S p f (ker g) ≃ₗ[S]
165
+ ker ((IsLocalizedModule.map p f f' g).extendScalarsOfIsLocalization p S) :=
166
+ LinearEquiv.ofEq _ _ (localized'_ker_eq_ker_localizedMap S p f f' g)
167
+ IsLocalizedModule.of_linearEquiv p (Submodule.toLocalized' S p f (ker g)) (e.restrictScalars R)
168
+
169
+ end LinearMap
0 commit comments