@@ -32,15 +32,11 @@ variable {R : Type*} (Rₛ : Type*)
32
32
33
33
section IsLocalizedModule
34
34
35
- section AddCommMonoid
36
- variable [CommSemiring R] (S : Submonoid R)
37
-
38
35
open Submodule
39
36
40
- variable [CommSemiring Rₛ] [Algebra R Rₛ] [hT : IsLocalization S Rₛ]
41
- variable {M M' : Type *} [AddCommMonoid M] [Module R M]
42
- [AddCommMonoid M'] [Module R M'] [Module Rₛ M'] [IsScalarTower R Rₛ M'] (f : M →ₗ[R] M')
43
- [IsLocalizedModule S f]
37
+ variable [CommSemiring R] (S : Submonoid R) [CommSemiring Rₛ] [Algebra R Rₛ] [IsLocalization S Rₛ]
38
+ {M Mₛ : Type *} [AddCommMonoid M] [Module R M] [AddCommMonoid Mₛ] [Module R Mₛ]
39
+ [Module Rₛ Mₛ] [IsScalarTower R Rₛ Mₛ] (f : M →ₗ[R] Mₛ) [IsLocalizedModule S f]
44
40
45
41
include S
46
42
@@ -53,56 +49,33 @@ theorem span_eq_top_of_isLocalizedModule {v : Set M} (hv : span R v = ⊤) :
53
49
rw [← LinearMap.coe_restrictScalars R, ← LinearMap.map_span, hv]
54
50
exact mem_map_of_mem mem_top
55
51
56
- end AddCommMonoid
57
-
58
- section AddCommGroup
59
-
60
- variable {R : Type *} (Rₛ : Type *) [CommRing R] (S : Submonoid R)
61
- variable [CommRing Rₛ] [Algebra R Rₛ] [hT : IsLocalization S Rₛ]
62
- variable {M M' : Type *} [AddCommGroup M] [Module R M]
63
- [AddCommGroup M'] [Module R M'] [Module Rₛ M'] [IsScalarTower R Rₛ M'] (f : M →ₗ[R] M')
64
- [IsLocalizedModule S f]
65
-
66
- include S
67
-
68
52
theorem LinearIndependent.of_isLocalizedModule {ι : Type *} {v : ι → M}
69
53
(hv : LinearIndependent R v) : LinearIndependent Rₛ (f ∘ v) := by
70
- rw [linearIndependent_iff'] at hv ⊢
71
- intro t g hg i hi
72
- choose! a g' hg' using IsLocalization.exist_integer_multiples S t g
73
- have h0 : f (∑ i ∈ t, g' i • v i) = 0 := by
74
- apply_fun ((a : R) • ·) at hg
75
- rw [smul_zero, Finset.smul_sum] at hg
76
- rw [map_sum , ← hg]
77
- refine Finset.sum_congr rfl fun i hi => ?_
78
- rw [← smul_assoc, ← hg' i hi, map_smul, Function.comp_apply, algebraMap_smul]
79
- obtain ⟨s, hs⟩ := (IsLocalizedModule.eq_zero_iff S f).mp h0
80
- simp_rw [Finset.smul_sum, Submonoid.smul_def, smul_smul] at hs
81
- specialize hv t _ hs i hi
82
- rw [← (IsLocalization.map_units Rₛ a).mul_right_eq_zero, ← Algebra.smul_def, ← hg' i hi]
83
- exact (IsLocalization.map_eq_zero_iff S _ _). 2 ⟨s, hv⟩
84
-
85
- variable [Module Rₛ M] [IsScalarTower R Rₛ M]
86
-
87
- theorem LinearIndependent.localization {ι : Type *} {b : ι → M} (hli : LinearIndependent R b) :
54
+ rw [linearIndependent_iff'ₛ ] at hv ⊢
55
+ intro t g₁ g₂ eq i hi
56
+ choose! a fg hfg using IsLocalization.exist_integer_multiples S (t.disjSum t) (Sum.elim g₁ g₂)
57
+ simp_rw [Sum.forall, Finset.inl_mem_disjSum, Sum.elim_inl, Finset.inr_mem_disjSum, Sum.elim_inr,
58
+ Subtype.forall'] at hfg
59
+ apply_fun ((a : R) • ·) at eq
60
+ simp_rw [← t.sum_coe_sort, Finset.smul_sum , ← smul_assoc, ← hfg,
61
+ algebraMap_smul, Function.comp_def, ← map_smul, ← map_sum,
62
+ t.sum_coe_sort (f := fun x ↦ fg (Sum.inl x) • v x),
63
+ t.sum_coe_sort (f := fun x ↦ fg (Sum.inr x) • v x)] at eq
64
+ have ⟨s, eq⟩ := IsLocalizedModule.exists_of_eq (S := S) eq
65
+ simp_rw [Finset.smul_sum, Submonoid.smul_def, smul_smul] at eq
66
+ have := congr(algebraMap R Rₛ $(hv t _ _ eq i hi))
67
+ simpa only [map_mul, (IsLocalization.map_units Rₛ s).mul_right_inj, hfg. 1 ⟨i, hi⟩, hfg. 2 ⟨i, hi⟩,
68
+ Algebra.smul_def, (IsLocalization.map_units Rₛ a).mul_right_inj] using this
69
+
70
+ theorem LinearIndependent.localization [Module Rₛ M] [IsScalarTower R Rₛ M]
71
+ {ι : Type *} {b : ι → M} (hli : LinearIndependent R b) :
88
72
LinearIndependent Rₛ b := by
89
73
have := isLocalizedModule_id S M Rₛ
90
74
exact hli.of_isLocalizedModule Rₛ S .id
91
75
92
- end AddCommGroup
93
-
94
-
95
- variable [CommRing R] (S : Submonoid R)
96
-
97
76
section Basis
98
77
99
- variable [CommRing Rₛ] [Algebra R Rₛ] [hT : IsLocalization S Rₛ]
100
-
101
- open Submodule
102
-
103
- variable {M Mₛ : Type *} [AddCommGroup M] [AddCommGroup Mₛ] [Module R M] [Module R Mₛ]
104
- [Module Rₛ Mₛ] (f : M →ₗ[R] Mₛ) [IsLocalizedModule S f] [IsScalarTower R Rₛ Mₛ]
105
- {ι : Type *} (b : Basis ι R M)
78
+ variable {ι : Type *} (b : Basis ι R M)
106
79
107
80
/-- If `M` has an `R`-basis, then localizing `M` at `S` has a basis over `R` localized at `S`. -/
108
81
noncomputable def Basis.ofIsLocalizedModule : Basis ι Rₛ Mₛ :=
@@ -138,12 +111,12 @@ end IsLocalizedModule
138
111
139
112
section LocalizationLocalization
140
113
141
- variable [CommRing R] (S : Submonoid R) [CommRing Rₛ] [Algebra R Rₛ]
142
- variable [hT : IsLocalization S Rₛ]
143
- variable {A : Type *} [CommRing A] [Algebra R A]
144
- variable (Aₛ : Type *) [CommRing Aₛ] [Algebra A Aₛ]
114
+ variable [CommSemiring R] (S : Submonoid R) [CommSemiring Rₛ] [Algebra R Rₛ]
115
+ variable [IsLocalization S Rₛ]
116
+ variable {A : Type *} [CommSemiring A] [Algebra R A]
117
+ variable (Aₛ : Type *) [CommSemiring Aₛ] [Algebra A Aₛ]
145
118
variable [Algebra Rₛ Aₛ] [Algebra R Aₛ] [IsScalarTower R Rₛ Aₛ] [IsScalarTower R A Aₛ]
146
- variable [hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ]
119
+ variable [IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ]
147
120
148
121
open Submodule
149
122
0 commit comments