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(FieldTheory/PrimitiveElement): Steinitz Theorem #7788

Closed
wants to merge 44 commits into from

Conversation

acmepjz
Copy link
Collaborator

@acmepjz acmepjz commented Oct 20, 2023

Added Field.exists_primitive_element_iff_finite_intermediateField: a finite extension E / F has a primitive element if and only if the intermediate fields between E / F are finitely many.
Also known as Steinitz Theorem https://en.wikipedia.org/wiki/Primitive_element_theorem#The_theorems.


Open in Gitpod

@alreadydone alreadydone added the t-algebra Algebra (groups, rings, fields etc) label Oct 20, 2023
Copy link
Contributor

@alreadydone alreadydone left a comment

Choose a reason for hiding this comment

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

Will take a closer look later

Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
Mathlib/RingTheory/Polynomial/Basic.lean Outdated Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Show resolved Hide resolved
Mathlib/FieldTheory/PrimitiveElement.lean Show resolved Hide resolved
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot removed the blocked-by-other-PR This PR depends on another PR to Mathlib label Oct 30, 2023
@leanprover-community-mathlib4-bot
Copy link
Collaborator

This PR/issue depends on:

Copy link
Contributor

@alreadydone alreadydone left a comment

Choose a reason for hiding this comment

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

Thanks, looks great to me now!

Mathlib/FieldTheory/PrimitiveElement.lean Outdated Show resolved Hide resolved
@acmepjz
Copy link
Collaborator Author

acmepjz commented Oct 31, 2023

generalize to 0 ≤ m ≠ n;

I think this should be easy; I'll try it at next day.

show [F⟮α⟯ : F⟮α ^ m⟯] = m if m > 0 and α transcendental.

I think maybe you can prove directly that 1, α, ... , α ^ (m-1) form a basis of F⟮α⟯ as a F⟮α ^ m⟯-vector space?

Or perhaps more generally, [F⟮α⟯ : F⟮Polynomial.aeval α f⟯] = m if f : F[X] with m = f.natDegree > 0 and α transcendental

@alreadydone
Copy link
Contributor

alreadydone commented Oct 31, 2023

I think maybe you can prove directly that 1, α, ... , α ^ (m-1) form a basis of F⟮α⟯ as a F⟮α ^ m⟯-vector space?

Or perhaps more generally, [F⟮α⟯ : F⟮Polynomial.aeval α f⟯] = m if f : F[X] with m = f.natDegree > 0 and α transcendental

Yeah, both are true. A PowerBasis follows once you show irreducibility of the polynomial (which implies it's the minimal polynomial of α over F⟮α ^ m⟯). A direct proof of linear independence would also be feasible, more so for the similar statement about Algebra.adjoin, but for IntermediateField.adjoin you can still clear the denominators and the proof is essentially the same. I'm not sure it's easier than the proof using irreducibility though.

For the more general statement, actually you can take any rational function f/g in α, and the degree of the field extension of [F(α⟯ : F⟮f(α)/g(α)⟯] will be max {deg f, deg g} assuming f and g are coprime. For this general result, the Eisenstein criterion no longer applies, but there's actually a simpler proof that generalizes: wlog we may assume deg g < deg f because we may replace f/g by g/f, or in case deg f = deg g, replace it by 1/(f/g-1). We may further assume f is monic, so that the candidate minimal polynomial f(X)-g(X)Y of f(α)/g(α) is also monic as a polynomial in X, so we can use integral closedness of F[Y] to reduce irreducibility problem to the ring F[Y][X] as before. But this polynomial is of degree 1 in Y, so its factors are pretty easy to analyze: if it's a product then one of the factors must be of degree 0 in Y, so a polynomial in X, which must be a unit because it needs to divide both f and g.

@acmepjz
Copy link
Collaborator Author

acmepjz commented Nov 2, 2023

Sorry for messing around with Adjoin. I added two new lemmas and make some of them simp lemmas. Is that OK?

@alreadydone
Copy link
Contributor

maintainer merge

Copy link

🚀 Pull request has been placed on the maintainer queue by alreadydone.

Copy link
Member

@jcommelin jcommelin left a comment

Choose a reason for hiding this comment

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

Thanks 🎉

bors merge

@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot added ready-to-merge This PR has been sent to bors. and removed awaiting-review labels Nov 10, 2023
mathlib-bors bot pushed a commit that referenced this pull request Nov 10, 2023
Added `Field.exists_primitive_element_iff_finite_intermediateField`: a finite extension `E / F` has a primitive element if and only if the intermediate fields between `E / F` are finitely many.
Also known as Steinitz Theorem <https://en.wikipedia.org/wiki/Primitive_element_theorem#The_theorems>.



Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
Co-authored-by: Mario Carneiro <di.gama@gmail.com>
@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Nov 10, 2023

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title feat(FieldTheory/PrimitiveElement): Steinitz Theorem [Merged by Bors] - feat(FieldTheory/PrimitiveElement): Steinitz Theorem Nov 10, 2023
@mathlib-bors mathlib-bors bot closed this Nov 10, 2023
@mathlib-bors mathlib-bors bot deleted the acmepjz_steinitz_thm branch November 10, 2023 10:07
grunweg pushed a commit that referenced this pull request Dec 15, 2023
Added `Field.exists_primitive_element_iff_finite_intermediateField`: a finite extension `E / F` has a primitive element if and only if the intermediate fields between `E / F` are finitely many.
Also known as Steinitz Theorem <https://en.wikipedia.org/wiki/Primitive_element_theorem#The_theorems>.



Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
Co-authored-by: Mario Carneiro <di.gama@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready-to-merge This PR has been sent to bors. t-algebra Algebra (groups, rings, fields etc)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

9 participants