@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Xavier Roblot
5
5
-/
6
6
import Mathlib.NumberTheory.NumberField.CanonicalEmbedding.FundamentalCone
7
+ import Mathlib.NumberTheory.NumberField.Units.Regulator
7
8
8
9
/-!
9
10
# Fundamental Cone: set of elements of norm ≤ 1
@@ -43,7 +44,8 @@ The proof is loosely based on the strategy given in [D. Marcus, *Number Fields*]
43
44
44
45
5. At this point, we can construct the map `expMapBasis` that plays a crucial part in the proof.
45
46
It is the map that sends `x : realSpace K` to `Real.exp (x w₀) * ∏_{i ≠ w₀} |ηᵢ| ^ x i`, see
46
- `expMapBasis_apply'`.
47
+ `expMapBasis_apply'`. Then, we prove a change of variable formula for `expMapBasis`, see
48
+ `setLIntegral_expMapBasis_image`.
47
49
48
50
## Spaces and maps
49
51
@@ -176,6 +178,18 @@ def expMap_single (w : InfinitePlace K) : PartialHomeomorph ℝ ℝ where
176
178
continuousOn_toFun := (continuousOn_const.mul continuousOn_id).rexp
177
179
continuousOn_invFun := continuousOn_const.mul (Real.continuousOn_log.mono (by aesop))
178
180
181
+ /--
182
+ The derivative of `expMap_single`, see `hasDerivAt_expMap_single`.
183
+ -/
184
+ abbrev deriv_expMap_single (w : InfinitePlace K) (x : ℝ) : ℝ :=
185
+ (expMap_single w x) * (w.mult : ℝ)⁻¹
186
+
187
+ theorem hasDerivAt_expMap_single (w : InfinitePlace K) (x : ℝ) :
188
+ HasDerivAt (expMap_single w) (deriv_expMap_single w x) x := by
189
+ simpa [expMap_single, mul_comm] using
190
+ (HasDerivAt.comp x (Real.hasDerivAt_exp _) (hasDerivAt_mul_const (w.mult : ℝ)⁻¹))
191
+
192
+
179
193
variable [NumberField K]
180
194
181
195
/--
@@ -196,6 +210,14 @@ theorem expMap_target :
196
210
expMap.target = Set.univ.pi fun (_ : InfinitePlace K) ↦ Set.Ioi 0 := by
197
211
simp_rw [expMap, PartialHomeomorph.pi_toPartialEquiv, PartialEquiv.pi_target, expMap_single]
198
212
213
+ theorem injective_expMap :
214
+ Function.Injective (expMap : realSpace K → realSpace K) :=
215
+ Set.injective_iff_injOn_univ.mpr ((expMap_source K) ▸ expMap.injOn)
216
+
217
+ theorem continuous_expMap :
218
+ Continuous (expMap : realSpace K → realSpace K) :=
219
+ continuous_iff_continuousOn_univ.mpr <| (expMap_source K) ▸ expMap.continuousOn
220
+
199
221
variable {K}
200
222
201
223
@[simp]
@@ -237,6 +259,18 @@ theorem sum_expMap_symm_apply {x : K} (hx : x ≠ 0) :
237
259
simp_rw [← prod_eq_abs_norm, Real.log_prod _ _ (fun _ _ ↦ pow_ne_zero _ ((map_ne_zero _).mpr hx)),
238
260
Real.log_pow, expMap_symm_apply, normAtAllPlaces_mixedEmbedding]
239
261
262
+ /--
263
+ The derivative of `expMap`, see `hasFDerivAt_expMap`.
264
+ -/
265
+ abbrev fderiv_expMap (x : realSpace K) : realSpace K →L[ℝ] realSpace K :=
266
+ .pi fun w ↦ (ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (deriv_expMap_single w (x w))).comp
267
+ (.proj w)
268
+
269
+ theorem hasFDerivAt_expMap (x : realSpace K): HasFDerivAt expMap (fderiv_expMap x) x := by
270
+ simpa [expMap, fderiv_expMap, hasFDerivAt_pi', PartialHomeomorph.pi_apply,
271
+ ContinuousLinearMap.proj_pi] using
272
+ fun w ↦ (hasDerivAt_expMap_single w _).hasFDerivAt.comp x (hasFDerivAt_apply w x)
273
+
240
274
end expMap
241
275
242
276
noncomputable section completeBasis
@@ -353,13 +387,28 @@ theorem expMap_basis_of_eq :
353
387
theorem expMap_basis_of_ne (i : {w : InfinitePlace K // w ≠ w₀}) :
354
388
expMap (completeBasis K i) =
355
389
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])]
390
+ rw [completeBasis_apply_of_ne, expMap.right_inv (by simp [expMap_target, pos_at_place])]
391
+
392
+ theorem abs_det_completeBasis_equivFunL_symm :
393
+ |((completeBasis K).equivFunL.symm : realSpace K →L[ℝ] realSpace K).det| =
394
+ Module.finrank ℚ K * regulator K := by
395
+ classical
396
+ rw [ContinuousLinearMap.det, ← LinearMap.det_toMatrix (completeBasis K), ← Matrix.det_transpose,
397
+ finrank_mul_regulator_eq_det K w₀ equivFinRank.symm]
398
+ congr 2 with w i
399
+ rw [Matrix.transpose_apply, LinearMap.toMatrix_apply, Matrix.of_apply, ← Basis.equivFunL_apply,
400
+ ContinuousLinearMap.coe_coe, ContinuousLinearEquiv.coe_apply,
401
+ (completeBasis K).equivFunL.apply_symm_apply]
402
+ split_ifs with hw
403
+ · rw [hw, completeBasis_apply_of_eq]
404
+ · simp_rw [completeBasis_apply_of_ne K ⟨w, hw⟩, expMap_symm_apply, normAtAllPlaces_mixedEmbedding]
358
405
359
406
end completeBasis
360
407
361
408
noncomputable section expMapBasis
362
409
410
+ open ENNReal MeasureTheory
411
+
363
412
variable [NumberField K]
364
413
365
414
variable {K}
@@ -378,6 +427,14 @@ theorem expMapBasis_source :
378
427
expMapBasis.source = (Set.univ : Set (realSpace K)) := by
379
428
simp [expMapBasis, expMap_source]
380
429
430
+ theorem injective_expMapBasis :
431
+ Function.Injective (expMapBasis : realSpace K → realSpace K) :=
432
+ (injective_expMap K).comp (completeBasis K).equivFun.symm.injective
433
+
434
+ theorem continuous_expMapBasis :
435
+ Continuous (expMapBasis : realSpace K → realSpace K) :=
436
+ (continuous_expMap K).comp (ContinuousLinearEquiv.continuous _)
437
+
381
438
variable {K}
382
439
383
440
theorem expMapBasis_pos (x : realSpace K) (w : InfinitePlace K) :
@@ -399,6 +456,79 @@ theorem expMapBasis_apply' (x : realSpace K) :
399
456
expMap_sum, expMap_smul, expMap_basis_of_ne, Pi.smul_def, smul_eq_mul, prod_apply, Pi.pow_apply,
400
457
normAtAllPlaces_mixedEmbedding]
401
458
459
+ theorem prod_expMapBasis_pow (x : realSpace K) :
460
+ ∏ w, (expMapBasis x w) ^ w.mult = Real.exp (x w₀) ^ Module.finrank ℚ K := by
461
+ simp_rw [expMapBasis_apply', Pi.smul_def, smul_eq_mul, mul_pow, prod_mul_distrib,
462
+ prod_pow_eq_pow_sum, sum_mult_eq, ← prod_pow]
463
+ rw [prod_comm]
464
+ simp_rw [Real.rpow_pow_comm (apply_nonneg _ _), Real.finset_prod_rpow _ _
465
+ fun _ _ ↦ pow_nonneg (apply_nonneg _ _) _, prod_eq_abs_norm, Units.norm, Rat.cast_one,
466
+ Real.one_rpow, prod_const_one, mul_one]
467
+
468
+ open scoped Classical in
469
+ theorem prod_deriv_expMap_single (x : realSpace K) :
470
+ ∏ w, deriv_expMap_single w ((completeBasis K).equivFun.symm x w) =
471
+ Real.exp (x w₀) ^ Module.finrank ℚ K * (∏ w : {w // IsComplex w}, expMapBasis x w.1 )⁻¹ *
472
+ (2 ⁻¹) ^ nrComplexPlaces K := by
473
+ simp only [deriv_expMap_single, expMap_single_apply]
474
+ rw [Finset.prod_mul_distrib]
475
+ congr 1
476
+ · simp_rw [← prod_expMapBasis_pow, prod_eq_prod_mul_prod, expMapBasis_apply, expMap_apply,
477
+ mult_isReal, mult_isComplex, pow_one, Finset.prod_pow, pow_two, mul_assoc, mul_inv_cancel₀
478
+ (Finset.prod_ne_zero_iff.mpr <| fun _ _ ↦ Real.exp_ne_zero _), mul_one]
479
+ · simp [prod_eq_prod_mul_prod, mult_isReal, mult_isComplex]
480
+
481
+ variable (K)
482
+
483
+ /--
484
+ The derivative of `expMapBasis`, see `hasFDerivAt_expMapBasis`.
485
+ -/
486
+ abbrev fderiv_expMapBasis (x : realSpace K) : realSpace K →L[ℝ] realSpace K :=
487
+ (fderiv_expMap ((completeBasis K).equivFun.symm x)).comp
488
+ (completeBasis K).equivFunL.symm.toContinuousLinearMap
489
+
490
+ theorem hasFDerivAt_expMapBasis (x : realSpace K) :
491
+ HasFDerivAt expMapBasis (fderiv_expMapBasis K x) x := by
492
+ change HasFDerivAt (expMap ∘ (completeBasis K).equivFunL.symm) (fderiv_expMapBasis K x) x
493
+ exact (hasFDerivAt_expMap _).comp x (completeBasis K).equivFunL.symm.hasFDerivAt
494
+
495
+ open Classical ContinuousLinearMap in
496
+ theorem abs_det_fderiv_expMapBasis (x : realSpace K) :
497
+ |(fderiv_expMapBasis K x).det| =
498
+ Real.exp (x w₀ * Module.finrank ℚ K) *
499
+ (∏ w : {w // IsComplex w}, expMapBasis x w.1 )⁻¹ * 2 ⁻¹ ^ nrComplexPlaces K *
500
+ (Module.finrank ℚ K) * regulator K := by
501
+ simp_rw [fderiv_expMapBasis, det, coe_comp, LinearMap.det_comp, fderiv_expMap, coe_pi, coe_comp,
502
+ coe_proj, LinearMap.det_pi, LinearMap.det_ring, ContinuousLinearMap.coe_coe, smulRight_apply,
503
+ one_apply, one_smul, abs_mul, abs_det_completeBasis_equivFunL_symm, prod_deriv_expMap_single]
504
+ simp_rw [abs_mul, Real.exp_mul, abs_pow, Real.rpow_natCast, abs_of_nonneg (Real.exp_nonneg _),
505
+ abs_inv, abs_prod, abs_of_nonneg (expMapBasis_nonneg _ _), Nat.abs_ofNat]
506
+ ring
507
+
508
+ variable {S}
509
+
510
+ open scoped Classical in
511
+ theorem setLIntegral_expMapBasis_image {s : Set (realSpace K)} (hs : MeasurableSet s)
512
+ {f : (InfinitePlace K → ℝ) → ℝ≥0 ∞} (hf : Measurable f) :
513
+ ∫⁻ x in expMapBasis '' s, f x =
514
+ (2 : ℝ≥0 ∞)⁻¹ ^ nrComplexPlaces K * ENNReal.ofReal (regulator K) * (Module.finrank ℚ K) *
515
+ ∫⁻ x in s, ENNReal.ofReal (Real.exp (x w₀ * Module.finrank ℚ K)) *
516
+ (∏ i : {w : InfinitePlace K // IsComplex w},
517
+ .ofReal (expMapBasis (fun w ↦ x w) i))⁻¹ * f (expMapBasis x) := by
518
+ rw [lintegral_image_eq_lintegral_abs_det_fderiv_mul volume hs
519
+ (fun x _ ↦ (hasFDerivAt_expMapBasis K x).hasFDerivWithinAt) (injective_expMapBasis K).injOn]
520
+ simp_rw [abs_det_fderiv_expMapBasis]
521
+ have : Measurable expMapBasis := (continuous_expMapBasis K).measurable
522
+ rw [← lintegral_const_mul _ (by fun_prop)]
523
+ congr with x
524
+ have : 0 ≤ (∏ w : {w // IsComplex w}, expMapBasis x w.1 )⁻¹ :=
525
+ inv_nonneg.mpr <| Finset.prod_nonneg fun _ _ ↦ (expMapBasis_pos _ _).le
526
+ rw [ofReal_mul (by positivity), ofReal_mul (by positivity), ofReal_mul (by positivity),
527
+ ofReal_mul (by positivity), ofReal_pow (by positivity), ofReal_inv_of_pos (Finset.prod_pos
528
+ fun _ _ ↦ expMapBasis_pos _ _), ofReal_inv_of_pos zero_lt_two, ofReal_ofNat, ofReal_natCast,
529
+ ofReal_prod_of_nonneg (fun _ _ ↦ (expMapBasis_pos _ _).le)]
530
+ ring
531
+
402
532
end expMapBasis
403
533
404
534
end NumberField.mixedEmbedding.fundamentalCone
0 commit comments