Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - feat(NumberField/CanonicalEmbedding): Define the fundamental cone for the action of the units of a number field #12268

Closed
wants to merge 65 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
1dd37b7
1st commit
xroblot Apr 19, 2024
6f34395
Typos
xroblot Apr 19, 2024
01b097f
Lint
xroblot Apr 19, 2024
6b5c3d0
Backport changes
xroblot Apr 21, 2024
8053571
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Apr 22, 2024
2ab05a8
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Apr 22, 2024
dee6067
Remove instance
xroblot Apr 23, 2024
a054ea1
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Apr 29, 2024
97eb8e9
Docs
xroblot Apr 29, 2024
dde1762
Review
xroblot Apr 29, 2024
5bf273f
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot May 11, 2024
32238a3
update
xroblot May 11, 2024
2af9cd2
More lemmas
xroblot May 11, 2024
cf69fd5
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot May 20, 2024
b535bb7
backport changes
xroblot May 20, 2024
6b8221e
1st commit
xroblot May 22, 2024
affe7ce
Add docstring + apply lemmas
xroblot May 23, 2024
26c98a3
Merge branch 'xfr_add-normatplace' into xfr_fundamental_cone_def
xroblot May 23, 2024
6987779
New version
xroblot May 23, 2024
2567d4c
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Jun 3, 2024
5278abb
update
xroblot Jun 3, 2024
f846a96
1st commit
xroblot Sep 8, 2024
912f9be
Clean up
xroblot Sep 8, 2024
f189562
Docstring
xroblot Sep 8, 2024
0e73e92
Fix lint
xroblot Sep 8, 2024
889d6ac
Merge remote-tracking branch 'origin/master' into xfr-zlattices_as_z-…
xroblot Sep 9, 2024
a9fda3a
Typo
xroblot Sep 9, 2024
c0da1f5
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Sep 9, 2024
37cdc67
Fix
xroblot Sep 9, 2024
b9a1990
update
xroblot Sep 9, 2024
5827dab
Update Mathlib/NumberTheory/NumberField/Units/DirichletTheorem.lean
xroblot Sep 9, 2024
42506d3
clean up
xroblot Sep 9, 2024
0b84773
Merge remote-tracking branch 'origin/xfr-zlattices_as_z-modules' into…
xroblot Sep 9, 2024
eccfeda
fix afer merge
xroblot Sep 9, 2024
218dcdb
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Sep 10, 2024
db630fa
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Sep 13, 2024
2102bc0
Review
xroblot Sep 13, 2024
dd48363
1st commit
xroblot Sep 13, 2024
de353a9
Deprecated
xroblot Sep 13, 2024
a08fbe4
Update Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Basic.lean
xroblot Sep 13, 2024
676ece8
Clean up
xroblot Sep 13, 2024
33037c3
Merge remote-tracking branch 'refs/remotes/origin/xfr_fundamental_con…
xroblot Sep 13, 2024
500e79f
Merge remote-tracking branch 'origin/xfr_fundamental_cone_unit_smul' …
xroblot Sep 13, 2024
e8e3cbd
1st commit
xroblot Sep 13, 2024
6bd3c44
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Sep 15, 2024
4522225
Add some simp
xroblot Sep 15, 2024
e44c128
Merge remote-tracking branch 'origin/xfr_fundamental_cone_log_map' in…
xroblot Sep 16, 2024
e8dc7d3
Duplicate lemma
xroblot Sep 16, 2024
8adedf0
Update FundamentalCone.lean
xroblot Sep 16, 2024
702057c
Update FundamentalCone.lean
xroblot Sep 16, 2024
e5648bd
Update Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Fundamenta…
xroblot Sep 16, 2024
12f996d
Merge remote-tracking branch 'origin/master' into xfr_fundamental_con…
xroblot Sep 17, 2024
4199db3
Merge remote-tracking branch 'refs/remotes/origin/xfr_fundamental_con…
xroblot Sep 17, 2024
f53e61a
Update Basic.lean
xroblot Sep 17, 2024
2252cf4
clean up
xroblot Sep 17, 2024
966c177
Update FundamentalCone.lean
xroblot Sep 17, 2024
dd73259
Update Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Fundamenta…
xroblot Sep 17, 2024
df5d3c5
Update Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Fundamenta…
xroblot Sep 17, 2024
1a12c46
Review
xroblot Sep 17, 2024
3460cc6
rfl
xroblot Sep 17, 2024
b4a0e68
Merge remote-tracking branch 'refs/remotes/origin/xfr_fundamental_con…
xroblot Sep 17, 2024
3467d82
fix defeq abuse
xroblot Sep 17, 2024
974b8c5
clean up
xroblot Sep 17, 2024
fe7db50
more defeq
xroblot Sep 17, 2024
5bb55bc
whitespace
xroblot Sep 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,11 @@ theorem logMap_apply_of_norm_one (hx : mixedEmbedding.norm x = 1)

@[simp]
theorem logMap_eq_logEmbedding (u : (𝓞 K)ˣ) :
logMap (mixedEmbedding K u) = logEmbedding K u := by
logMap (mixedEmbedding K u) = logEmbedding K (Additive.ofMul u) := by
ext; simp

theorem logMap_unit_smul (u : (𝓞 K)ˣ) (hx : mixedEmbedding.norm x ≠ 0) :
logMap (u • x) = logEmbedding K u + logMap x := by
logMap (u • x) = logEmbedding K (Additive.ofMul u) + logMap x := by
rw [unitSMul_smul, logMap_mul (by rw [norm_unit]; norm_num) hx, logMap_eq_logEmbedding]

variable (x) in
Expand Down
42 changes: 21 additions & 21 deletions Mathlib/NumberTheory/NumberField/Units/DirichletTheorem.lean
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,11 @@ variable {K}

@[simp]
theorem logEmbedding_component (x : (𝓞 K)ˣ) (w : {w : InfinitePlace K // w ≠ w₀}) :
(logEmbedding K x) w = mult w.val * Real.log (w.val x) := rfl
(logEmbedding K (Additive.ofMul x)) w = mult w.val * Real.log (w.val x) := rfl

theorem sum_logEmbedding_component (x : (𝓞 K)ˣ) :
∑ w, logEmbedding K x w = - mult (w₀ : InfinitePlace K) * Real.log (w₀ (x : K)) := by
∑ w, logEmbedding K (Additive.ofMul x) w =
- mult (w₀ : InfinitePlace K) * Real.log (w₀ (x : K)) := by
have h := congr_arg Real.log (prod_eq_abs_norm (x : K))
rw [Units.norm, Rat.cast_one, Real.log_one, Real.log_prod] at h
· simp_rw [Real.log_pow] at h
Expand All @@ -112,7 +113,7 @@ theorem mult_log_place_eq_zero {x : (𝓞 K)ˣ} {w : InfinitePlace K} :
variable [NumberField K]

theorem logEmbedding_eq_zero_iff {x : (𝓞 K)ˣ} :
logEmbedding K x = 0 ↔ x ∈ torsion K := by
logEmbedding K (Additive.ofMul x) = 0 ↔ x ∈ torsion K := by
rw [mem_torsion]
refine ⟨fun h w => ?_, fun h => ?_⟩
· by_cases hw : w = w₀
Expand All @@ -126,13 +127,14 @@ theorem logEmbedding_eq_zero_iff {x : (𝓞 K)ˣ} :
rw [logEmbedding_component, h w.val, Real.log_one, mul_zero, Pi.zero_apply]

theorem logEmbedding_component_le {r : ℝ} {x : (𝓞 K)ˣ} (hr : 0 ≤ r) (h : ‖logEmbedding K x‖ ≤ r)
(w : {w : InfinitePlace K // w ≠ w₀}) : |logEmbedding K x w| ≤ r := by
(w : {w : InfinitePlace K // w ≠ w₀}) : |logEmbedding K (Additive.ofMul x) w| ≤ r := by
lift r to NNReal using hr
simp_rw [Pi.norm_def, NNReal.coe_le_coe, Finset.sup_le_iff, ← NNReal.coe_le_coe] at h
exact h w (mem_univ _)

theorem log_le_of_logEmbedding_le {r : ℝ} {x : (𝓞 K)ˣ} (hr : 0 ≤ r) (h : ‖logEmbedding K x‖ ≤ r)
(w : InfinitePlace K) : |Real.log (w x)| ≤ (Fintype.card (InfinitePlace K)) * r := by
theorem log_le_of_logEmbedding_le {r : ℝ} {x : (𝓞 K)ˣ} (hr : 0 ≤ r)
(h : ‖logEmbedding K (Additive.ofMul x)‖ ≤ r) (w : InfinitePlace K) :
|Real.log (w x)| ≤ (Fintype.card (InfinitePlace K)) * r := by
have tool : ∀ x : ℝ, 0 ≤ x → x ≤ mult w * x := fun x hx => by
nth_rw 1 [← one_mul x]
refine mul_le_mul ?_ le_rfl hx ?_
Expand Down Expand Up @@ -320,7 +322,8 @@ theorem unitLattice_span_eq_top :
-- The standard basis
let B := Pi.basisFun ℝ {w : InfinitePlace K // w ≠ w₀}
-- The image by log_embedding of the family of units constructed above
let v := fun w : { w : InfinitePlace K // w ≠ w₀ } => logEmbedding K (exists_unit K w).choose
let v := fun w : { w : InfinitePlace K // w ≠ w₀ } =>
logEmbedding K (Additive.ofMul (exists_unit K w).choose)
-- To prove the result, it is enough to prove that the family `v` is linearly independent
suffices B.det v ≠ 0 by
rw [← isUnit_iff_ne_zero, ← is_basis_iff_det] at this
Expand Down Expand Up @@ -381,19 +384,19 @@ theorem unitLattice_rank :
rw [← Units.finrank_eq_rank, ZLattice.rank ℝ]

/-- The map obtained by quotienting by the kernel of `logEmbedding`. -/
def logEmbeddingQuot :
abbrev logEmbeddingQuot :
Additive ((𝓞 K)ˣ ⧸ (torsion K)) →+ ({w : InfinitePlace K // w ≠ w₀} → ℝ) :=
MonoidHom.toAdditive' <|
(QuotientGroup.kerLift (AddMonoidHom.toMultiplicative' (logEmbedding K))).comp
(QuotientGroup.quotientMulEquivOfEq (by
ext
rw [MonoidHom.mem_ker, AddMonoidHom.toMultiplicative'_apply_apply, ofAdd_eq_one,
← logEmbedding_eq_zero_iff]
rfl)).toMonoidHom
← logEmbedding_eq_zero_iff])).toMonoidHom

@[simp]
theorem logEmbeddingQuot_apply (x : (𝓞 K)ˣ) :
logEmbeddingQuot K ⟦x⟧ = logEmbedding K x := rfl
logEmbeddingQuot K (Additive.ofMul (QuotientGroup.mk x)) =
logEmbedding K (Additive.ofMul x) := rfl

theorem logEmbeddingQuot_injective :
Function.Injective (logEmbeddingQuot K) := by
Expand Down Expand Up @@ -429,7 +432,8 @@ def logEmbeddingEquiv :

@[simp]
theorem logEmbeddingEquiv_apply (x : (𝓞 K)ˣ) :
logEmbeddingEquiv K ⟦x⟧ = logEmbedding K x := rfl
logEmbeddingEquiv K (Additive.ofMul (QuotientGroup.mk x))=
logEmbedding K (Additive.ofMul x) := rfl

instance : Module.Free ℤ (Additive ((𝓞 K)ˣ ⧸ (torsion K))) :=
Module.Free.of_equiv (logEmbeddingEquiv K).symm
Expand Down Expand Up @@ -477,15 +481,12 @@ def fundSystem : Fin (rank K) → (𝓞 K)ˣ :=
fun i => Quotient.out' (Additive.toMul (basisModTorsion K i):)

theorem fundSystem_mk (i : Fin (rank K)) :
Additive.ofMul ⟦fundSystem K i⟧ = (basisModTorsion K i) := by
rw [fundSystem, Equiv.apply_eq_iff_eq_symm_apply, @Quotient.mk_eq_iff_out,
Quotient.out', Quotient.out_equiv_out, Additive.ofMul_symm_eq]
rfl
Additive.ofMul (QuotientGroup.mk (fundSystem K i)) = (basisModTorsion K i) := by
simp_rw [fundSystem, Equiv.apply_eq_iff_eq_symm_apply, Additive.ofMul_symm_eq, Quotient.out_eq']

theorem logEmbedding_fundSystem (i : Fin (rank K)) :
logEmbedding K (fundSystem K i) = basisUnitLattice K i := by
rw [basisUnitLattice, Basis.map_apply, ← fundSystem_mk, ← logEmbeddingEquiv_apply]
rfl
logEmbedding K (Additive.ofMul (fundSystem K i)) = basisUnitLattice K i := by
rw [basisUnitLattice, Basis.map_apply, ← fundSystem_mk, logEmbeddingEquiv_apply]

/-- The exponents that appear in the unique decomposition of a unit as the product of
a root of unity and powers of the units of the fundamental system `fundSystem` (see
Expand Down Expand Up @@ -519,9 +520,8 @@ theorem exist_unique_eq_mul_prod (x : (𝓞 K)ˣ) : ∃! ζe : torsion K × (Fin
· rintro ⟨⟨ζ', h_tors'⟩, η⟩ hf
simp only [ζ, ← fun_eq_repr K h_tors' hf, Prod.mk.injEq, Subtype.mk.injEq, and_true]
nth_rewrite 1 [hf]
rw [_root_.mul_inv_cancel_right]
with_reducible rw [_root_.mul_inv_cancel_right]
xroblot marked this conversation as resolved.
Show resolved Hide resolved

end statements


end NumberField.Units
Loading