@@ -14,6 +14,8 @@ We define and prove basic results about the regulator of a number field `K`.
14
14
15
15
## Main definitions and results
16
16
17
+ * `NumberField.Units.regOfFamily`: the regulator of a family of units of `K`.
18
+
17
19
* `NumberField.Units.regulator`: the regulator of the number field `K`.
18
20
19
21
* `Number.Field.Units.regulator_eq_det`: For any infinite place `w'`, the regulator is equal to
@@ -32,28 +34,89 @@ namespace NumberField.Units
32
34
33
35
variable (K : Type *) [Field K]
34
36
35
- open MeasureTheory NumberField.InfinitePlace Module
37
+ open MeasureTheory NumberField.InfinitePlace Module Submodule
36
38
NumberField NumberField.Units.dirichletUnitTheorem
37
39
38
40
variable [NumberField K]
39
41
40
42
open scoped Classical in
41
- /-- The regulator of a number field `K`. -/
42
- def regulator : ℝ := ZLattice.covolume (unitLattice K)
43
+ /--
44
+ An `equiv` between `Fin (rank K)`, used to index the family of units, and `{w // w ≠ w₀}`
45
+ the index of the `logSpace`.
46
+ -/
47
+ def equivFinRank : Fin (rank K) ≃ {w : InfinitePlace K // w ≠ w₀} :=
48
+ Fintype.equivOfCardEq <| by
49
+ rw [Fintype.card_subtype_compl, Fintype.card_ofSubsingleton, Fintype.card_fin, rank]
50
+
51
+ section regOfFamily
52
+
53
+ open Matrix
54
+
55
+ variable {K}
56
+
57
+ /--
58
+ A family of units is of maximal rank if its image by `logEmbedding` is linearly independent
59
+ over `ℝ`.
60
+ -/
61
+ abbrev IsMaxRank (u : Fin (rank K) → (𝓞 K)ˣ) : Prop :=
62
+ LinearIndependent ℝ (fun i ↦ logEmbedding K (Additive.ofMul (u i)))
43
63
44
64
open scoped Classical in
45
- theorem regulator_ne_zero : regulator K ≠ 0 := ZLattice.covolume_ne_zero (unitLattice K) volume
65
+ /--
66
+ The images by `logEmbedding` of a family of units of maximal rank form a basis of `logSpace K`.
67
+ -/
68
+ def basisOfIsMaxRank {u : Fin (rank K) → (𝓞 K)ˣ} (hu : IsMaxRank u) :
69
+ Basis (Fin (rank K)) ℝ (logSpace K) :=
70
+ (basisOfPiSpaceOfLinearIndependent
71
+ ((linearIndependent_equiv (equivFinRank K).symm).mpr hu)).reindex (equivFinRank K).symm
72
+
73
+ theorem basisOfIsMaxRank_apply {u : Fin (rank K) → (𝓞 K)ˣ} (hu : IsMaxRank u) (i : Fin (rank K)) :
74
+ (basisOfIsMaxRank hu) i = logEmbedding K (Additive.ofMul (u i)) := by
75
+ simp [basisOfIsMaxRank, Basis.coe_reindex, Equiv.symm_symm, Function.comp_apply,
76
+ coe_basisOfPiSpaceOfLinearIndependent]
46
77
47
78
open scoped Classical in
48
- theorem regulator_pos : 0 < regulator K := ZLattice.covolume_pos (unitLattice K) volume
79
+ /--
80
+ The regulator of a family of units of `K`.
81
+ -/
82
+ def regOfFamily (u : Fin (rank K) → (𝓞 K)ˣ) : ℝ :=
83
+ if hu : IsMaxRank u then
84
+ ZLattice.covolume (span ℤ (Set.range (basisOfIsMaxRank hu)))
85
+ else 0
86
+
87
+ theorem regOfFamily_eq_zero {u : Fin (rank K) → (𝓞 K)ˣ} (hu : ¬ IsMaxRank u) :
88
+ regOfFamily u = 0 := by
89
+ rw [regOfFamily, dif_neg hu]
49
90
50
91
open scoped Classical in
51
- theorem regulator_eq_det' (e : {w : InfinitePlace K // w ≠ w₀} ≃ Fin (rank K)) :
52
- regulator K = |(Matrix.of fun i ↦
53
- logEmbedding K (Additive.ofMul (fundSystem K (e i)))).det| := by
54
- simp_rw [regulator, ZLattice.covolume_eq_det _
55
- (((basisModTorsion K).map (logEmbeddingEquiv K)).reindex e.symm), Basis.coe_reindex,
56
- Function.comp_def, Basis.map_apply, ← fundSystem_mk, Equiv.symm_symm, logEmbeddingEquiv_apply]
92
+ theorem regOfFamily_of_isMaxRank {u : Fin (rank K) → (𝓞 K)ˣ} (hu : IsMaxRank u) :
93
+ regOfFamily u = ZLattice.covolume (span ℤ (Set.range (basisOfIsMaxRank hu))) := by
94
+ rw [regOfFamily, dif_pos hu]
95
+
96
+ theorem regOfFamily_pos {u : Fin (rank K) → (𝓞 K)ˣ} (hu : IsMaxRank u) :
97
+ 0 < regOfFamily u := by
98
+ classical
99
+ rw [regOfFamily_of_isMaxRank hu]
100
+ exact ZLattice.covolume_pos _ volume
101
+
102
+ theorem regOfFamily_ne_zero {u : Fin (rank K) → (𝓞 K)ˣ} (hu : IsMaxRank u) :
103
+ regOfFamily u ≠ 0 := (regOfFamily_pos hu).ne'
104
+
105
+ theorem regOfFamily_ne_zero_iff {u : Fin (rank K) → (𝓞 K)ˣ} :
106
+ regOfFamily u ≠ 0 ↔ IsMaxRank u :=
107
+ ⟨by simpa using (fun hu ↦ regOfFamily_eq_zero hu).mt, fun hu ↦ regOfFamily_ne_zero hu⟩
108
+
109
+ open scoped Classical in
110
+ theorem regOfFamily_eq_det' (u : Fin (rank K) → (𝓞 K)ˣ) :
111
+ regOfFamily u =
112
+ |(of fun i ↦ logEmbedding K (Additive.ofMul (u ((equivFinRank K).symm i)))).det| := by
113
+ by_cases hu : IsMaxRank u
114
+ · rw [regOfFamily_of_isMaxRank hu, ZLattice.covolume_eq_det _
115
+ (((basisOfIsMaxRank hu).restrictScalars ℤ).reindex (equivFinRank K)), Basis.coe_reindex]
116
+ congr with i
117
+ simp [basisOfIsMaxRank_apply hu]
118
+ · rw [regOfFamily_eq_zero hu, det_eq_zero_of_not_linearIndependent_rows, abs_zero]
119
+ rwa [IsMaxRank, ← linearIndependent_equiv (equivFinRank K).symm] at hu
57
120
58
121
open scoped Classical in
59
122
/--
@@ -64,35 +127,112 @@ places. Then, the two square matrices with entries `(mult w * log w (u i))_i` wh
64
127
theorem abs_det_eq_abs_det (u : Fin (rank K) → (𝓞 K)ˣ)
65
128
{w₁ w₂ : InfinitePlace K} (e₁ : {w // w ≠ w₁} ≃ Fin (rank K))
66
129
(e₂ : {w // w ≠ w₂} ≃ Fin (rank K)) :
67
- |(Matrix. of fun i w : {w // w ≠ w₁} ↦ (mult w.val : ℝ) * (w.val (u (e₁ i) : K)).log).det| =
68
- |(Matrix. of fun i w : {w // w ≠ w₂} ↦ (mult w.val : ℝ) * (w.val (u (e₂ i) : K)).log).det| := by
130
+ |(of fun i w : {w // w ≠ w₁} ↦ (mult w.val : ℝ) * (w.val (u (e₁ i) : K)).log).det| =
131
+ |(of fun i w : {w // w ≠ w₂} ↦ (mult w.val : ℝ) * (w.val (u (e₂ i) : K)).log).det| := by
69
132
-- We construct an equiv `Fin (rank K + 1) ≃ InfinitePlace K` from `e₂.symm`
70
133
let f : Fin (rank K + 1 ) ≃ InfinitePlace K :=
71
134
(finSuccEquiv _).trans ((Equiv.optionSubtype _).symm e₁.symm).val
72
135
-- And `g` corresponds to the restriction of `f⁻¹` to `{w // w ≠ w₂}`
73
136
let g : {w // w ≠ w₂} ≃ Fin (rank K) :=
74
137
(Equiv.subtypeEquiv f.symm (fun _ ↦ by simp [f])).trans
75
138
(finSuccAboveEquiv (f.symm w₂)).symm
76
- have h_col := congr_arg abs <| Matrix. det_permute (g.trans e₂.symm)
77
- (Matrix. of fun i w : {w // w ≠ w₂} ↦ (mult w.val : ℝ) * (w.val (u (e₂ i) : K)).log)
139
+ have h_col := congr_arg abs <| det_permute (g.trans e₂.symm)
140
+ (of fun i w : {w // w ≠ w₂} ↦ (mult w.val : ℝ) * (w.val (u (e₂ i) : K)).log)
78
141
rw [abs_mul, ← Int.cast_abs, Equiv.Perm.sign_abs, Int.cast_one, one_mul] at h_col
79
142
rw [← h_col]
80
- have h := congr_arg abs <| Matrix. submatrix_succAbove_det_eq_negOnePow_submatrix_succAbove_det'
81
- (Matrix. of fun i w ↦ (mult (f w) : ℝ) * ((f w) (u i)).log) ?_ 0 (f.symm w₂)
82
- · rw [← Matrix. det_reindex_self e₁, ← Matrix. det_reindex_self g]
143
+ have h := congr_arg abs <| submatrix_succAbove_det_eq_negOnePow_submatrix_succAbove_det'
144
+ (of fun i w ↦ (mult (f w) : ℝ) * ((f w) (u i)).log) ?_ 0 (f.symm w₂)
145
+ · rw [← det_reindex_self e₁, ← det_reindex_self g]
83
146
· rw [Units.smul_def, abs_zsmul, Int.abs_negOnePow, one_smul] at h
84
147
convert h
85
- · ext; simp only [ne_eq, Matrix. reindex_apply, Matrix. submatrix_apply, Matrix. of_apply,
86
- Equiv.apply_symm_apply, Equiv. trans_apply, Fin.succAbove_zero, id_eq, finSuccEquiv_succ,
148
+ · ext; simp only [ne_eq, reindex_apply, submatrix_apply, of_apply, Equiv.apply_symm_apply ,
149
+ Equiv.trans_apply, Fin.succAbove_zero, id_eq, finSuccEquiv_succ,
87
150
Equiv.optionSubtype_symm_apply_apply_coe, f]
88
- · ext; simp only [ne_eq, Equiv.coe_trans, Matrix. reindex_apply, Matrix. submatrix_apply,
89
- Function.comp_apply, Equiv.apply_symm_apply, id_eq, Matrix. of_apply]; rfl
151
+ · ext; simp only [ne_eq, Equiv.coe_trans, reindex_apply, submatrix_apply, Function.comp_apply ,
152
+ Equiv.apply_symm_apply, id_eq, of_apply]; rfl
90
153
· intro _
91
- simp_rw [Matrix. of_apply, ← Real.log_pow]
154
+ simp_rw [of_apply, ← Real.log_pow]
92
155
rw [← Real.log_prod, Equiv.prod_comp f (fun w ↦ (w (u _) ^ (mult w))), prod_eq_abs_norm,
93
156
Units.norm, Rat.cast_one, Real.log_one]
94
157
exact fun _ _ ↦ pow_ne_zero _ <| (map_ne_zero _).mpr (coe_ne_zero _)
95
158
159
+ open scoped Classical in
160
+ /--
161
+ For any infinite place `w'`, the regulator of the family `u` is equal to the absolute value of
162
+ the determinant of the matrix with entries `(mult w * log w (u i))_i` for `w ≠ w'`.
163
+ -/
164
+ theorem regOfFamily_eq_det (u : Fin (rank K) → (𝓞 K)ˣ) (w' : InfinitePlace K)
165
+ (e : {w // w ≠ w'} ≃ Fin (rank K)) :
166
+ regOfFamily u =
167
+ |(of fun i w : {w // w ≠ w'} ↦ (mult w.val : ℝ) * Real.log (w.val (u (e i) : K))).det| := by
168
+ simp [regOfFamily_eq_det', abs_det_eq_abs_det u e (equivFinRank K).symm, logEmbedding]
169
+
170
+ open scoped Classical in
171
+ /--
172
+ The degree of `K` times the regulator of the family `u` is equal to the absolute value of the
173
+ determinant of the matrix whose columns are
174
+ `(mult w * log w (fundSystem K i))_i, w` and the column `(mult w)_w`.
175
+ -/
176
+ theorem finrank_mul_regOfFamily_eq_det (u : Fin (rank K) → (𝓞 K)ˣ) (w' : InfinitePlace K)
177
+ (e : {w // w ≠ w'} ≃ Fin (rank K)) :
178
+ finrank ℚ K * regOfFamily u =
179
+ |(of (fun i w : InfinitePlace K ↦
180
+ if h : i = w' then (w.mult : ℝ) else w.mult * (w (u (e ⟨i, h⟩))).log)).det| := by
181
+ let f : Fin (rank K + 1 ) ≃ InfinitePlace K :=
182
+ (finSuccEquiv _).trans ((Equiv.optionSubtype _).symm e.symm).val
183
+ let g : {w // w ≠ w'} ≃ Fin (rank K) :=
184
+ (Equiv.subtypeEquiv f.symm (fun _ ↦ by simp [f])).trans (finSuccAboveEquiv (f.symm w')).symm
185
+ rw [← det_reindex_self f.symm, det_eq_sum_row_mul_submatrix_succAbove_succAbove_det _ (f.symm w')
186
+ (f.symm w'), abs_mul, abs_mul, abs_neg_one_pow, one_mul]
187
+ · simp_rw [reindex_apply, submatrix_submatrix, ← f.symm.sum_comp, f.symm_symm, submatrix_apply,
188
+ Function.comp_def, Equiv.apply_symm_apply, of_apply, dif_pos, ← Nat.cast_sum, sum_mult_eq,
189
+ Nat.abs_cast]
190
+ rw [regOfFamily_eq_det u w' e, ← Matrix.det_reindex_self g]
191
+ congr with i j
192
+ rw [reindex_apply, submatrix_apply, submatrix_apply, of_apply, of_apply, dif_neg]
193
+ rfl
194
+ · simp_rw [Equiv.forall_congr_left f, ← f.symm.sum_comp, reindex_apply, submatrix_apply,
195
+ of_apply, f.symm_symm, f.apply_symm_apply, Finset.sum_dite_irrel, ne_eq,
196
+ EmbeddingLike.apply_eq_iff_eq]
197
+ intro _ h
198
+ rw [dif_neg h, sum_mult_mul_log]
199
+
200
+ end regOfFamily
201
+
202
+ open scoped Classical in
203
+ /-- The regulator of a number field `K`. -/
204
+ def regulator : ℝ := ZLattice.covolume (unitLattice K)
205
+
206
+ theorem isMaxRank_fundSystem :
207
+ IsMaxRank (fundSystem K) := by
208
+ classical
209
+ convert ((basisUnitLattice K).ofZLatticeBasis ℝ (unitLattice K)).linearIndependent
210
+ rw [logEmbedding_fundSystem, Basis.ofZLatticeBasis_apply]
211
+
212
+ open scoped Classical in
213
+ theorem basisOfIsMaxRank_fundSystem :
214
+ basisOfIsMaxRank (isMaxRank_fundSystem K) = (basisUnitLattice K).ofZLatticeBasis ℝ := by
215
+ ext
216
+ rw [Basis.ofZLatticeBasis_apply, basisOfIsMaxRank_apply, logEmbedding_fundSystem]
217
+
218
+ theorem regulator_eq_regOfFamily_fundSystem :
219
+ regulator K = regOfFamily (fundSystem K) := by
220
+ classical
221
+ rw [regOfFamily_of_isMaxRank (isMaxRank_fundSystem K), regulator,
222
+ ← (basisUnitLattice K).ofZLatticeBasis_span ℝ, basisOfIsMaxRank_fundSystem]
223
+
224
+ theorem regulator_pos : 0 < regulator K :=
225
+ regulator_eq_regOfFamily_fundSystem K ▸ regOfFamily_pos (isMaxRank_fundSystem K)
226
+
227
+ theorem regulator_ne_zero : regulator K ≠ 0 :=
228
+ (regulator_pos K).ne'
229
+
230
+ open scoped Classical in
231
+ theorem regulator_eq_det' :
232
+ regulator K = |(Matrix.of fun i ↦
233
+ logEmbedding K (Additive.ofMul (fundSystem K ((equivFinRank K).symm i)))).det| := by
234
+ rw [regulator_eq_regOfFamily_fundSystem, regOfFamily_eq_det']
235
+
96
236
open scoped Classical in
97
237
/--
98
238
For any infinite place `w'`, the regulator is equal to the absolute value of the determinant
@@ -102,10 +242,7 @@ theorem regulator_eq_det (w' : InfinitePlace K) (e : {w // w ≠ w'} ≃ Fin (ra
102
242
regulator K =
103
243
|(Matrix.of fun i w : {w // w ≠ w'} ↦ (mult w.val : ℝ) *
104
244
Real.log (w.val (fundSystem K (e i) : K))).det| := by
105
- let e' : {w : InfinitePlace K // w ≠ w₀} ≃ Fin (rank K) := Fintype.equivOfCardEq (by
106
- rw [Fintype.card_subtype_compl, Fintype.card_ofSubsingleton, Fintype.card_fin, rank])
107
- simp_rw [regulator_eq_det' K e', logEmbedding, AddMonoidHom.coe_mk, ZeroHom.coe_mk]
108
- exact abs_det_eq_abs_det K (fun i ↦ fundSystem K i) e' e
245
+ rw [regulator_eq_regOfFamily_fundSystem, regOfFamily_eq_det]
109
246
110
247
open scoped Classical in
111
248
/--
@@ -116,25 +253,7 @@ theorem finrank_mul_regulator_eq_det (w' : InfinitePlace K) (e : {w // w ≠ w'}
116
253
finrank ℚ K * regulator K =
117
254
|(Matrix.of (fun i w : InfinitePlace K ↦
118
255
if h : i = w' then (w.mult : ℝ) else w.mult * (w (fundSystem K (e ⟨i, h⟩))).log)).det| := by
119
- let f : Fin (rank K + 1 ) ≃ InfinitePlace K :=
120
- (finSuccEquiv _).trans ((Equiv.optionSubtype _).symm e.symm).val
121
- let g : {w // w ≠ w'} ≃ Fin (rank K) :=
122
- (Equiv.subtypeEquiv f.symm (fun _ ↦ by simp [f])).trans (finSuccAboveEquiv (f.symm w')).symm
123
- rw [← Matrix.det_reindex_self f.symm, Matrix.det_eq_sum_row_mul_submatrix_succAbove_succAbove_det
124
- _ (f.symm w') (f.symm w'), abs_mul, abs_mul, abs_neg_one_pow, one_mul]
125
- · simp_rw [Matrix.reindex_apply, Matrix.submatrix_submatrix, ← f.symm.sum_comp, f.symm_symm,
126
- Matrix.submatrix_apply, Function.comp_def, Equiv.apply_symm_apply, Matrix.of_apply,
127
- dif_pos, ← Nat.cast_sum, sum_mult_eq, Nat.abs_cast]
128
- rw [regulator_eq_det _ w' e, ← Matrix.det_reindex_self g]
129
- congr with i j
130
- rw [Matrix.reindex_apply, Matrix.submatrix_apply, Matrix.submatrix_apply, Matrix.of_apply,
131
- Matrix.of_apply, dif_neg]
132
- rfl
133
- · simp_rw [Equiv.forall_congr_left f, ← f.symm.sum_comp, Matrix.reindex_apply,
134
- Matrix.submatrix_apply, Matrix.of_apply, f.symm_symm, f.apply_symm_apply,
135
- Finset.sum_dite_irrel, ne_eq, EmbeddingLike.apply_eq_iff_eq]
136
- intro _ h
137
- rw [dif_neg h, sum_mult_mul_log]
256
+ rw [regulator_eq_regOfFamily_fundSystem, finrank_mul_regOfFamily_eq_det]
138
257
139
258
end Units
140
259
0 commit comments