Skip to content

Commit e1a832e

Browse files
committed
chore(NumberField/Units/DirichletTheorem): add logSpace (#22590)
Rename `logSpace K` the space `{w : InfinitePlace K // w ≠ w₀} → ℝ`. This is in order to make the explanation of the proof of the Analytic Class Number Formula easier to follow.
1 parent 0b97795 commit e1a832e

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

Mathlib/NumberTheory/NumberField/CanonicalEmbedding/FundamentalCone.lean

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,10 @@ open NumberField.Units NumberField.Units.dirichletUnitTheorem Module
9090
variable [NumberField K] {K}
9191

9292
open Classical in
93-
/-- The map from the mixed space to `{w : InfinitePlace K // w ≠ w₀} → ℝ` (with `w₀` the fixed
94-
place from the proof of Dirichlet Unit Theorem) defined in such way that: 1) it factors the map
93+
/-- The map from the mixed space to `logSpace K` defined in such way that: 1) it factors the map
9594
`logEmbedding`, see `logMap_eq_logEmbedding`; 2) it is constant on the sets
9695
`{c • x | c ∈ ℝ, c ≠ 0}` if `norm x ≠ 0`, see `logMap_real_smul`. -/
97-
def logMap (x : mixedSpace K) : {w : InfinitePlace K // w ≠ w₀} → ℝ := fun w ↦
96+
def logMap (x : mixedSpace K) : logSpace K := fun w ↦
9897
mult w.val * (Real.log (normAtPlace w.val x) -
9998
Real.log (mixedEmbedding.norm x) * (finrank ℚ K : ℝ)⁻¹)
10099

Mathlib/NumberTheory/NumberField/Units/DirichletTheorem.lean

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,15 @@ namespace NumberField.Units.dirichletUnitTheorem
4848
/-!
4949
### Dirichlet Unit Theorem
5050
51-
We define a group morphism from `(𝓞 K)ˣ` to `{w : InfinitePlace K // w ≠ w₀} → ℝ` where `w₀` is a
52-
distinguished (arbitrary) infinite place, prove that its kernel is the torsion subgroup (see
53-
`logEmbedding_eq_zero_iff`) and that its image, called `unitLattice`, is a full `ℤ`-lattice. It
54-
follows that `unitLattice` is a free `ℤ`-module (see `instModuleFree_unitLattice`) of rank
55-
`card (InfinitePlaces K) - 1` (see `unitLattice_rank`). To prove that the `unitLattice` is a full
56-
`ℤ`-lattice, we need to prove that it is discrete (see `unitLattice_inter_ball_finite`) and that it
57-
spans the full space over `ℝ` (see `unitLattice_span_eq_top`); this is the main part of the proof,
58-
see the section `span_top` below for more details.
51+
We define a group morphism from `(𝓞 K)ˣ` to `logSpace K`, defined as
52+
`{w : InfinitePlace K // w ≠ w₀} → ℝ` where `w₀` is a distinguished (arbitrary) infinite place,
53+
prove that its kernel is the torsion subgroup (see `logEmbedding_eq_zero_iff`) and that its image,
54+
called `unitLattice`, is a full `ℤ`-lattice. It follows that `unitLattice` is a free `ℤ`-module
55+
(see `instModuleFree_unitLattice`) of rank `card (InfinitePlaces K) - 1` (see `unitLattice_rank`).
56+
To prove that the `unitLattice` is a full `ℤ`-lattice, we need to prove that it is discrete
57+
(see `unitLattice_inter_ball_finite`) and that it spans the full space over `ℝ`
58+
(see `unitLattice_span_eq_top`); this is the main part of the proof, see the section `span_top`
59+
below for more details.
5960
-/
6061

6162
open Finset
@@ -69,10 +70,15 @@ variable [NumberField K]
6970
/-- The distinguished infinite place. -/
7071
def w₀ : InfinitePlace K := (inferInstance : Nonempty (InfinitePlace K)).some
7172

73+
variable (K) in
74+
/-- The `logSpace` is defined as `{w : InfinitePlace K // w ≠ w₀} → ℝ` where `w₀` is the
75+
distinguished infinite place. -/
76+
abbrev logSpace := {w : InfinitePlace K // w ≠ w₀} → ℝ
77+
7278
variable (K) in
7379
/-- The logarithmic embedding of the units (seen as an `Additive` group). -/
7480
def _root_.NumberField.Units.logEmbedding :
75-
Additive ((𝓞 K)ˣ) →+ ({w : InfinitePlace K // w ≠ w₀} → ℝ) :=
81+
Additive ((𝓞 K)ˣ) →+ logSpace K :=
7682
{ toFun := fun x w => mult w.val * Real.log (w.val ↑x.toMul)
7783
map_zero' := by simp; rfl
7884
map_add' := fun _ _ => by simp [Real.log_mul, mul_add]; rfl }
@@ -153,13 +159,12 @@ variable (K)
153159

154160
/-- The lattice formed by the image of the logarithmic embedding. -/
155161
noncomputable def _root_.NumberField.Units.unitLattice :
156-
Submodule ℤ ({w : InfinitePlace K // w ≠ w₀} → ℝ) :=
162+
Submodule ℤ (logSpace K) :=
157163
Submodule.map (logEmbedding K).toIntLinearMap ⊤
158164

159165
open scoped Classical in
160166
theorem unitLattice_inter_ball_finite (r : ℝ) :
161-
((unitLattice K : Set ({ w : InfinitePlace K // w ≠ w₀} → ℝ)) ∩
162-
Metric.closedBall 0 r).Finite := by
167+
((unitLattice K : Set (logSpace K)) ∩ Metric.closedBall 0 r).Finite := by
163168
obtain hr | hr := lt_or_le r 0
164169
· convert Set.finite_empty
165170
rw [Metric.closedBall_eq_empty.mpr hr]
@@ -297,7 +302,7 @@ theorem exists_unit (w₁ : InfinitePlace K) :
297302
exact seq_norm_le K w₁ hB n
298303

299304
theorem unitLattice_span_eq_top :
300-
Submodule.span ℝ (unitLattice K : Set ({w : InfinitePlace K // w ≠ w₀} → ℝ)) = ⊤ := by
305+
Submodule.span ℝ (unitLattice K : Set (logSpace K)) = ⊤ := by
301306
classical
302307
refine le_antisymm le_top ?_
303308
-- The standard basis
@@ -356,7 +361,7 @@ instance instZLattice_unitLattice : IsZLattice ℝ (unitLattice K) where
356361
span_top := unitLattice_span_eq_top K
357362

358363
protected theorem finrank_eq_rank :
359-
finrank ℝ ({w : InfinitePlace K // w ≠ w₀} → ℝ) = Units.rank K := by
364+
finrank ℝ (logSpace K) = Units.rank K := by
360365
classical
361366
simp only [finrank_fintype_fun_eq_card, Fintype.card_subtype_compl,
362367
Fintype.card_ofSubsingleton, rank]
@@ -369,7 +374,7 @@ theorem unitLattice_rank :
369374

370375
/-- The map obtained by quotienting by the kernel of `logEmbedding`. -/
371376
def logEmbeddingQuot :
372-
Additive ((𝓞 K)ˣ ⧸ (torsion K)) →+ ({w : InfinitePlace K // w ≠ w₀} → ℝ) :=
377+
Additive ((𝓞 K)ˣ ⧸ (torsion K)) →+ (logSpace K) :=
373378
MonoidHom.toAdditive' <|
374379
(QuotientGroup.kerLift (AddMonoidHom.toMultiplicative' (logEmbedding K))).comp
375380
(QuotientGroup.quotientMulEquivOfEq (by

0 commit comments

Comments
 (0)