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(NumberTheory.NumberField.Units): proof of Dirichlet's unit theorem #5960

Closed
wants to merge 104 commits into from

Conversation

xroblot
Copy link
Collaborator

@xroblot xroblot commented Jul 17, 2023

We prove Dirichlet's unit theorem. More precisely, the main results are:

def basisModTorsion : Basis (Fin (Units.rank K)) ℤ (Additive ((𝓞 K)ˣ ⧸ (torsion K)))

where Units.rank := Fintype.card (InfinitePlace K) - 1 and

theorem exist_unique_eq_mul_prod (x : (𝓞 K)ˣ) : ∃! (ζ : torsion K) (e : Fin (Units.rank K) → ℤ),
    x = ζ * ∏ i, (fundSystem K i) ^ (e i)

where fundSystem : Fin (rank K) → (𝓞 K)ˣ is a fundamental system of units.

The exponents in exist_unique_eq_mul_prod can be computed via the following result:

theorem fun_eq_repr {x ζ : (𝓞 K)ˣ} {f : Fin (rank K) → ℤ} (hζ : ζ ∈ torsion K) 
    (h : x = ζ * ∏ i, (fundSystem K i) ^ (f i)) : f = (basisModTorsion K).repr (Additive.ofMul ↑x)

Open in Gitpod

@xroblot xroblot added WIP Work in progress t-number-theory Number theory (also use t-algebra or t-analysis to specialize) labels Jul 17, 2023
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot added the blocked-by-other-PR This PR depends on another PR which is still in the queue. label Jul 17, 2023
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot removed the merge-conflict The PR has a merge conflict with master, and needs manual merging. label Sep 20, 2023
kodyvajjha pushed a commit that referenced this pull request Sep 22, 2023
…_mem_ringOfIntegers_lt (#5650)

This PR proves the following result: 
```lean
theorem exists_ne_zero_mem_ringOfIntegers_lt (h : minkowski_bound K < volume (convex_body_lt K f)) :
     ∃ (a : 𝓞 K), a ≠ 0 ∧ ∀ w : InfinitePlace K, w a < f w 
```
where `f : InfinitePlace K → ℝ≥0` and `convex_body_lt K f` is the set of points `x` such that `‖x w‖ < f w` for all infinite places `w`. This is a key result in the proof of Dirichlet's unit theorem #5960
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
@jcommelin
Copy link
Member

This is a really nice milestone! It's been quite a journey, but now all the prerequisites are in you're really on the home straight!

@xroblot
Copy link
Collaborator Author

xroblot commented Sep 22, 2023

This is a really nice milestone! It's been quite a journey, but now all the prerequisites are in you're really on the home straight!

Thanks! It was a very interesting project to work on. And now I have to find something new to work on ;)

@riccardobrasca riccardobrasca self-assigned this Sep 25, 2023
Copy link
Member

@riccardobrasca riccardobrasca left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are 21 Finset. in the file, opening Finset at the beginning allows to get rid of 20 of them and it seems a good idea.

In any case great work, thanks a lot!

Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
Mathlib/NumberTheory/NumberField/Units.lean Outdated Show resolved Hide resolved
@riccardobrasca
Copy link
Member

riccardobrasca commented Sep 27, 2023

One final comment: we can add

instance : Module.Finite ℤ (Additive (𝓞 K)ˣ)

but I don't know if it is easy with current mathlib or it's better to wait for another PR. In any case thanks a lot!!

bors d+

@bors
Copy link

bors bot commented Sep 27, 2023

✌️ xroblot can now approve this pull request. To approve and merge a pull request, simply reply with bors r+. More detailed instructions are available here.

@github-actions github-actions bot added delegated and removed awaiting-review The author would like community review of the PR labels Sep 27, 2023
@xroblot
Copy link
Collaborator Author

xroblot commented Sep 27, 2023

One final comment: we can add

instance : Module.Finite ℤ (Additive (𝓞 K)ˣ)

but I don't know if it is easy with current mathlib or it's better to wait for another PR. In any case thanks a lot!!

It is not so difficult to prove but there is some API missing for things like Additive or AddMonoidHom.toIntLinearMap. I think it will have to wait for another PR (coming soon ;)

@xroblot
Copy link
Collaborator Author

xroblot commented Sep 27, 2023

bors r+

bors bot pushed a commit that referenced this pull request Sep 27, 2023
…em (#5960)

We prove Dirichlet's unit theorem. More precisely, the main results are:
```lean
def basisModTorsion : Basis (Fin (Units.rank K)) ℤ (Additive ((𝓞 K)ˣ ⧸ (torsion K)))
```
where `Units.rank := Fintype.card (InfinitePlace K) - 1` and 
```lean 
theorem exist_unique_eq_mul_prod (x : (𝓞 K)ˣ) : ∃! (ζ : torsion K) (e : Fin (Units.rank K) → ℤ),
    x = ζ * ∏ i, (fundSystem K i) ^ (e i)
```
 where `fundSystem : Fin (rank K) → (𝓞 K)ˣ` is a fundamental system of units. 

The exponents in `exist_unique_eq_mul_prod` can be computed via the following result:
```lean
theorem fun_eq_repr {x ζ : (𝓞 K)ˣ} {f : Fin (rank K) → ℤ} (hζ : ζ ∈ torsion K) 
    (h : x = ζ * ∏ i, (fundSystem K i) ^ (f i)) : f = (basisModTorsion K).repr (Additive.ofMul ↑x)
```
@bors
Copy link

bors bot commented Sep 27, 2023

Pull request successfully merged into master.

Build succeeded!

The publicly hosted instance of bors-ng is deprecated and will go away soon.

If you want to self-host your own instance, instructions are here.
For more help, visit the forum.

If you want to switch to GitHub's built-in merge queue, visit their help page.

@bors bors bot changed the title feat(NumberTheory.NumberField.Units): proof of Dirichlet's unit theorem [Merged by Bors] - feat(NumberTheory.NumberField.Units): proof of Dirichlet's unit theorem Sep 27, 2023
@bors bors bot closed this Sep 27, 2023
@bors bors bot deleted the xfr-dirichlet branch September 27, 2023 15:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
delegated t-number-theory Number theory (also use t-algebra or t-analysis to specialize)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants