Skip to content

[Merged by Bors] - feat(NumberTheory.NumberField.Units): proof of Dirichlet's unit theorem#5960

Closed
xroblot wants to merge 104 commits intomasterfrom
xfr-dirichlet
Closed

[Merged by Bors] - feat(NumberTheory.NumberField.Units): proof of Dirichlet's unit theorem#5960
xroblot wants to merge 104 commits intomasterfrom
xfr-dirichlet

Conversation

@xroblot
Copy link
Copy Markdown
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
@ghost ghost added the blocked-by-other-PR This PR depends on another PR (this label is automatically managed by a bot) label Jul 17, 2023
@xroblot
Copy link
Copy Markdown
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
Copy Markdown
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!

@riccardobrasca
Copy link
Copy Markdown
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
Copy Markdown

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 This pull request has been delegated to the PR author (or occasionally another non-maintainer). and removed awaiting-review labels Sep 27, 2023
@xroblot
Copy link
Copy Markdown
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
Copy Markdown
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
Copy Markdown

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
wwylele added a commit to wwylele/mathlib4 that referenced this pull request Aug 13, 2025
This was done in leanprover-community#5960 but wasn't added to 1000.yaml
mathlib-bors bot pushed a commit that referenced this pull request Aug 14, 2025
This was added in #5960 but wasn't added to 1000.yaml
mathlib-bors bot pushed a commit that referenced this pull request Aug 14, 2025
This was added in #5960 but wasn't added to 1000.yaml
Paul-Lez pushed a commit to Paul-Lez/mathlib4 that referenced this pull request Aug 23, 2025
pechersky pushed a commit to pechersky/mathlib4 that referenced this pull request Aug 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

delegated This pull request has been delegated to the PR author (or occasionally another non-maintainer). 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.

3 participants