@@ -32,13 +32,62 @@ The proof is loosely based on the strategy given in [D. Marcus, *Number Fields*]
32
32
`basisUnitLattice K`, we define the map `expMap : realSpace K → realSpace K` that is, in
33
33
some way, the right inverse of `logMap`, see `logMap_expMap`.
34
34
35
+ 4. Denote by `ηᵢ` (with `i ≠ w₀` where `w₀` is the distinguished infinite place,
36
+ see the description of `logSpace` below) the fundamental system of units given by
37
+ `fundSystem` and let `|ηᵢ|` denote `normAtAllPlaces (mixedEmbedding ηᵢ))`, that is the vector
38
+ `(w (ηᵢ))_w` in `realSpace K`. Then, the image of `|ηᵢ|` by `expMap.symm` form a basis of the
39
+ subspace `{x : realSpace K | ∑ w, x w = 0}`. We complete by adding the vector `(mult w)_w` to
40
+ get a basis, called `completeBasis`, of `realSpace K`. The basis `completeBasis K` has
41
+ the property that, for `i ≠ w₀`, the image of `completeBasis K i` by the
42
+ natural restriction map `realSpace K → logSpace K` is `basisUnitLattice K`.
43
+
44
+ 5. At this point, we can construct the map `expMapBasis` that plays a crucial part in the proof.
45
+ It is the map that sends `x : realSpace K` to `Real.exp (x w₀) * ∏_{i ≠ w₀} |ηᵢ| ^ x i`, see
46
+ `expMapBasis_apply'`.
47
+
48
+ ## Spaces and maps
49
+
50
+ To help understand the proof, we make a list of (almost) all the spaces and maps used and
51
+ their connections (as hinted above, we do not mention the map `mixedSpaceOfRealSpace` since we
52
+ identify `realSpace K` with its image in `mixedSpace K`).
53
+
54
+ * `mixedSpace`: the set `({w // IsReal w} → ℝ) × (w // IsComplex w → ℂ)` where `w` denote the
55
+ infinite places of `K`.
56
+
57
+ * `realSpace`: the set `w → ℝ` where `w` denote the infinite places of `K`
58
+
59
+ * `logSpace`: the set `{w // w ≠ w₀} → ℝ` where `w₀` is a distinguished place of `K`. It is the set
60
+ used in the proof of Dirichlet Unit Theorem.
61
+
62
+ * `mixedEmbedding : K → mixedSpace K`: the map that sends `x : K` to `φ_w(x)` where, for all
63
+ infinite place `w`, `φ_w : K → ℝ` or `ℂ`, resp. if `w` is real or if `w` is complex, denote a
64
+ complex embedding associated to `w`.
65
+
66
+ * `logEmbedding : (𝓞 K)ˣ → logSpace K`: the map that sends the unit `u : (𝓞 K)ˣ` to
67
+ `(mult w * log (w u))_w` for `w ≠ w₀`. Its image is `unitLattice K`, a `ℤ`-lattice of
68
+ `logSpace K`, that admits `basisUnitLattice K` as a basis.
69
+
70
+ * `logMap : mixedSpace K → logSpace K`: this map is defined such that it factors `logEmbedding`,
71
+ that is, for `u : (𝓞 K)ˣ`, `logMap (mixedEmbedding x) = logEmbedding x`, and that
72
+ `logMap (c • x) = logMap x` for `c ≠ 0` and `norm x ≠ 0`. The inverse image of the fundamental
73
+ domain of `basisUnitLattice K` by `logMap` (minus the elements of norm zero) is
74
+ `fundamentalCone K`.
75
+
76
+ * `expMap : realSpace K → realSpace K`: the right inverse of `logMap` in the sense that
77
+ `logMap (expMap x) = (x_w)_{w ≠ w₀}`.
78
+
79
+ * `expMapBasis : realSpace K → realSpace K`: the map that sends `x : realSpace K` to
80
+ `Real.exp (x w₀) * ∏_{i ≠ w₀} |ηᵢ| ^ x i` where `|ηᵢ|` denote the vector of `realSpace K` given
81
+ by `w (ηᵢ)` and `ηᵢ` denote the units in `fundSystem K`.
82
+
35
83
-/
36
84
37
85
variable (K : Type *) [Field K]
38
86
39
- open NumberField NumberField.InfinitePlace NumberField.mixedEmbedding NumberField.Units
87
+ open Finset NumberField NumberField.InfinitePlace NumberField.mixedEmbedding NumberField.Units
88
+ NumberField.Units.dirichletUnitTheorem
40
89
41
- namespace NumberField.mixedEmbedding
90
+ namespace NumberField.mixedEmbedding.fundamentalCone
42
91
43
92
section normAtAllPlaces
44
93
@@ -70,8 +119,7 @@ variable [NumberField K]
70
119
/--
71
120
The set of elements of the `fundamentalCone` of `norm ≤ 1`.
72
121
-/
73
- abbrev normLeOne : Set (mixedSpace K) :=
74
- {x | x ∈ fundamentalCone K ∧ mixedEmbedding.norm x ≤ 1 }
122
+ abbrev normLeOne : Set (mixedSpace K) := fundamentalCone K ∩ {x | mixedEmbedding.norm x ≤ 1 }
75
123
76
124
variable {K} in
77
125
theorem mem_normLeOne {x : mixedSpace K} :
@@ -101,7 +149,7 @@ theorem normAtAllPlaces_normLeOne :
101
149
· rwa [Set.mem_preimage, ← logMap_normAtAllPlaces] at h₁
102
150
· exact fun w ↦ normAtPlace_nonneg w y
103
151
· rwa [Set.mem_setOf_eq, ← norm_normAtAllPlaces] at h₂
104
- · rwa [← norm_normAtAllPlaces] at h₃
152
+ · rwa [Set.mem_setOf_eq, ← norm_normAtAllPlaces] at h₃
105
153
· exact ⟨mixedSpaceOfRealSpace x, ⟨⟨h₁, h₃⟩, h₄⟩, normAtAllPlaces_mixedSpaceOfRealSpace h₂⟩
106
154
107
155
end normLeOne_def
@@ -154,6 +202,24 @@ variable {K}
154
202
theorem expMap_apply (x : realSpace K) (w : InfinitePlace K) :
155
203
expMap x w = Real.exp ((↑w.mult)⁻¹ * x w) := rfl
156
204
205
+ theorem expMap_pos (x : realSpace K) (w : InfinitePlace K) :
206
+ 0 < expMap x w := Real.exp_pos _
207
+
208
+ theorem expMap_smul (c : ℝ) (x : realSpace K) :
209
+ expMap (c • x) = (expMap x) ^ c := by
210
+ ext
211
+ simp [mul_comm c _, ← mul_assoc, Real.exp_mul]
212
+
213
+ theorem expMap_add (x y : realSpace K) :
214
+ expMap (x + y) = expMap x * expMap y := by
215
+ ext
216
+ simp [mul_add, Real.exp_add]
217
+
218
+ theorem expMap_sum {ι : Type *} (s : Finset ι) (f : ι → realSpace K) :
219
+ expMap (∑ i ∈ s, f i) = ∏ i ∈ s, expMap (f i) := by
220
+ ext
221
+ simp [← Real.exp_sum, ← mul_sum]
222
+
157
223
@[simp]
158
224
theorem expMap_symm_apply (x : realSpace K) (w : InfinitePlace K) :
159
225
expMap.symm x w = ↑w.mult * Real.log (x w) := rfl
@@ -165,6 +231,174 @@ theorem logMap_expMap {x : realSpace K}
165
231
rw [logMap, normAtPlace_mixedSpaceOfRealSpace (Real.exp_nonneg _), expMap_apply, Real.log_exp,
166
232
mul_sub, mul_inv_cancel_left₀ mult_coe_ne_zero, hx, Real.log_one, zero_mul, mul_zero, sub_zero]
167
233
234
+ theorem sum_expMap_symm_apply {x : K} (hx : x ≠ 0 ) :
235
+ ∑ w : InfinitePlace K, expMap.symm ((normAtAllPlaces (mixedEmbedding K x))) w =
236
+ Real.log (|Algebra.norm ℚ x| : ℚ) := by
237
+ simp_rw [← prod_eq_abs_norm, Real.log_prod _ _ (fun _ _ ↦ pow_ne_zero _ ((map_ne_zero _).mpr hx)),
238
+ Real.log_pow, expMap_symm_apply, normAtAllPlaces_mixedEmbedding]
239
+
168
240
end expMap
169
241
170
- end NumberField.mixedEmbedding
242
+ noncomputable section completeBasis
243
+
244
+ variable [NumberField K]
245
+
246
+ variable {K}
247
+
248
+ open scoped Classical in
249
+ /--
250
+ A fixed equiv between `Fin (rank K)` and `{w : InfinitePlace K // w ≠ w₀}`.
251
+ -/
252
+ def equivFinRank : Fin (rank K) ≃ {w : InfinitePlace K // w ≠ w₀} :=
253
+ Fintype.equivOfCardEq <| by
254
+ rw [Fintype.card_subtype_compl, Fintype.card_ofSubsingleton, Fintype.card_fin, rank]
255
+
256
+ open scoped Classical in
257
+ variable (K) in
258
+ /--
259
+ A family of elements in the `realSpace K` formed of the image of the fundamental units
260
+ and the vector `(mult w)_w`. This family is in fact a basis of `realSpace K`, see `completeBasis`.
261
+ -/
262
+ def completeFamily : InfinitePlace K → realSpace K :=
263
+ fun i ↦ if hi : i = w₀ then fun w ↦ mult w else
264
+ expMap.symm <| normAtAllPlaces <| mixedEmbedding K <| fundSystem K <| equivFinRank.symm ⟨i, hi⟩
265
+
266
+ /--
267
+ An auxiliary map from `realSpace K` to `logSpace K` used to prove that `completeFamily` is
268
+ linearly independent, see `linearIndependent_completeFamily`.
269
+ -/
270
+ def realSpaceToLogSpace : realSpace K →ₗ[ℝ] {w : InfinitePlace K // w ≠ w₀} → ℝ where
271
+ toFun := fun x w ↦ x w.1 - w.1 .mult * (∑ w', x w') * (Module.finrank ℚ K : ℝ)⁻¹
272
+ map_add' := fun _ _ ↦ funext fun _ ↦ by simpa [sum_add_distrib] using by ring
273
+ map_smul' := fun _ _ ↦ funext fun _ ↦ by simpa [← mul_sum] using by ring
274
+
275
+ theorem realSpaceToLogSpace_apply (x :realSpace K) (w : {w : InfinitePlace K // w ≠ w₀}) :
276
+ realSpaceToLogSpace x w = x w - w.1 .mult * (∑ w', x w') * (Module.finrank ℚ K : ℝ)⁻¹ := rfl
277
+
278
+ theorem realSpaceToLogSpace_expMap_symm {x : K} (hx : x ≠ 0 ) :
279
+ realSpaceToLogSpace (expMap.symm (normAtAllPlaces (mixedEmbedding K x))) =
280
+ logMap (mixedEmbedding K x) := by
281
+ ext w
282
+ simp_rw [realSpaceToLogSpace_apply, sum_expMap_symm_apply hx, expMap_symm_apply,
283
+ logMap, normAtPlace_apply, mul_sub, mul_assoc, norm_eq_norm]
284
+
285
+ theorem realSpaceToLogSpace_completeFamily_of_eq :
286
+ realSpaceToLogSpace (completeFamily K w₀) = 0 := by
287
+ ext
288
+ rw [realSpaceToLogSpace_apply, completeFamily, dif_pos rfl, ← Nat.cast_sum, sum_mult_eq,
289
+ mul_inv_cancel_right₀ (Nat.cast_ne_zero.mpr Module.finrank_pos.ne'), sub_self, Pi.zero_apply]
290
+
291
+ theorem realSpaceToLogSpace_completeFamily_of_ne (i : {w : InfinitePlace K // w ≠ w₀}) :
292
+ realSpaceToLogSpace (completeFamily K i) = basisUnitLattice K (equivFinRank.symm i) := by
293
+ ext
294
+ rw [← logEmbedding_fundSystem, ← logMap_eq_logEmbedding, completeFamily, dif_neg,
295
+ realSpaceToLogSpace_expMap_symm]
296
+ exact coe_ne_zero _
297
+
298
+ theorem sum_eq_zero_of_mem_span_completeFamily {x : realSpace K}
299
+ (hx : x ∈ Submodule.span ℝ (Set.range fun w : {w // w ≠ w₀} ↦ completeFamily K w.1 )) :
300
+ ∑ w, x w = 0 := by
301
+ induction hx using Submodule.span_induction with
302
+ | mem _ h =>
303
+ obtain ⟨w, rfl⟩ := h
304
+ simp_rw [completeFamily, dif_neg w.prop, sum_expMap_symm_apply (coe_ne_zero _),
305
+ Units.norm, Rat.cast_one, Real.log_one]
306
+ | zero => simp
307
+ | add _ _ _ _ hx hy => simp [sum_add_distrib, hx, hy]
308
+ | smul _ _ _ hx => simp [← mul_sum, hx]
309
+
310
+ variable (K)
311
+
312
+ theorem linearIndependent_completeFamily :
313
+ LinearIndependent ℝ (completeFamily K) := by
314
+ classical
315
+ have h₁ : LinearIndependent ℝ (fun w : {w // w ≠ w₀} ↦ completeFamily K w.1 ) := by
316
+ refine LinearIndependent.of_comp realSpaceToLogSpace ?_
317
+ simp_rw [Function.comp_def, realSpaceToLogSpace_completeFamily_of_ne]
318
+ convert (((basisUnitLattice K).ofZLatticeBasis ℝ _).reindex equivFinRank).linearIndependent
319
+ simp
320
+ have h₂ : completeFamily K w₀ ∉ Submodule.span ℝ
321
+ (Set.range (fun w : {w // w ≠ w₀} ↦ completeFamily K w.1 )) := by
322
+ intro h
323
+ have := sum_eq_zero_of_mem_span_completeFamily h
324
+ rw [completeFamily, dif_pos rfl, ← Nat.cast_sum, sum_mult_eq, Nat.cast_eq_zero] at this
325
+ exact Module.finrank_pos.ne' this
326
+ rw [← linearIndependent_equiv (Equiv.optionSubtypeNe w₀), linearIndependent_option]
327
+ exact ⟨h₁, h₂⟩
328
+
329
+ /--
330
+ A basis of `realSpace K` formed by the image of the fundamental units
331
+ (which form a basis of a subspace `{x : realSpace K | ∑ w, x w = 0}`) and the vector `(mult w)_w`.
332
+ For `i ≠ w₀`, the image of `completeBasis K i` by the natural restriction map
333
+ `realSpace K → logSpace K` is `basisUnitLattice K`
334
+ -/
335
+ def completeBasis : Basis (InfinitePlace K) ℝ (realSpace K) :=
336
+ basisOfLinearIndependentOfCardEqFinrank (linearIndependent_completeFamily K)
337
+ (Module.finrank_fintype_fun_eq_card _).symm
338
+
339
+ theorem completeBasis_apply_of_eq :
340
+ completeBasis K w₀ = fun w ↦ (mult w : ℝ) := by
341
+ rw [completeBasis, coe_basisOfLinearIndependentOfCardEqFinrank, completeFamily, dif_pos rfl]
342
+
343
+ theorem completeBasis_apply_of_ne (i : {w : InfinitePlace K // w ≠ w₀}) :
344
+ completeBasis K i =
345
+ expMap.symm (normAtAllPlaces (mixedEmbedding K (fundSystem K (equivFinRank.symm i)))) := by
346
+ rw [completeBasis, coe_basisOfLinearIndependentOfCardEqFinrank, completeFamily, dif_neg]
347
+
348
+ theorem expMap_basis_of_eq :
349
+ expMap (completeBasis K w₀) = fun _ ↦ Real.exp 1 := by
350
+ ext
351
+ simp_rw [expMap_apply, completeBasis_apply_of_eq, inv_mul_cancel₀ mult_coe_ne_zero]
352
+
353
+ theorem expMap_basis_of_ne (i : {w : InfinitePlace K // w ≠ w₀}) :
354
+ expMap (completeBasis K i) =
355
+ normAtAllPlaces (mixedEmbedding K (fundSystem K (equivFinRank.symm i))) := by
356
+ rw [completeBasis_apply_of_ne, PartialHomeomorph.right_inv _
357
+ (by simp [expMap_target, pos_at_place])]
358
+
359
+ end completeBasis
360
+
361
+ noncomputable section expMapBasis
362
+
363
+ variable [NumberField K]
364
+
365
+ variable {K}
366
+
367
+ /--
368
+ The map that sends `x : realSpace K` to
369
+ `Real.exp (x w₀) * ∏_{i ≠ w₀} |ηᵢ| ^ x i` where `|ηᵢ|` denote the vector of `realSpace K` given
370
+ by `w (ηᵢ)` and `ηᵢ` denote the units in `fundSystem K`, see `expMapBasis_apply'`.
371
+ -/
372
+ def expMapBasis : PartialHomeomorph (realSpace K) (realSpace K) :=
373
+ (completeBasis K).equivFunL.symm.toHomeomorph.transPartialHomeomorph expMap
374
+
375
+ variable (K)
376
+
377
+ theorem expMapBasis_source :
378
+ expMapBasis.source = (Set.univ : Set (realSpace K)) := by
379
+ simp [expMapBasis, expMap_source]
380
+
381
+ variable {K}
382
+
383
+ theorem expMapBasis_pos (x : realSpace K) (w : InfinitePlace K) :
384
+ 0 < expMapBasis x w := expMap_pos _ _
385
+
386
+ theorem expMapBasis_nonneg (x : realSpace K) (w : InfinitePlace K) :
387
+ 0 ≤ expMapBasis x w := (expMapBasis_pos _ _).le
388
+
389
+ theorem expMapBasis_apply (x : realSpace K) :
390
+ expMapBasis x = expMap ((completeBasis K).equivFun.symm x) := rfl
391
+
392
+ open scoped Classical in
393
+ theorem expMapBasis_apply' (x : realSpace K) :
394
+ expMapBasis x = Real.exp (x w₀) •
395
+ fun w : InfinitePlace K ↦
396
+ ∏ i : {w // w ≠ w₀}, w (fundSystem K (equivFinRank.symm i)) ^ x i := by
397
+ simp_rw [expMapBasis_apply, Basis.equivFun_symm_apply, Fintype.sum_eq_add_sum_subtype_ne _ w₀,
398
+ expMap_add, expMap_smul, expMap_basis_of_eq, Pi.pow_def, Real.exp_one_rpow, Pi.mul_def,
399
+ expMap_sum, expMap_smul, expMap_basis_of_ne, Pi.smul_def, smul_eq_mul, prod_apply, Pi.pow_apply,
400
+ normAtAllPlaces_mixedEmbedding]
401
+
402
+ end expMapBasis
403
+
404
+ end NumberField.mixedEmbedding.fundamentalCone
0 commit comments