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: IsNormalClosure predicate #8418
Conversation
adjoin_algebraic_toSubalgebra fun _ ↦ isAlgebraic_of_mem_rootSet] | ||
exact ⟨fun ⟨spl, adj⟩ ↦ ⟨spl, adj⟩, fun ⟨spl, adj⟩ ↦ ⟨spl, adj⟩⟩ | ||
|
||
-- Note: p.Splits (algebraMap F E) also works | ||
theorem isSplittingField_iff {p : F[X]} {K : IntermediateField F E} : | ||
p.IsSplittingField F K ↔ p.Splits (algebraMap F K) ∧ K = adjoin F (p.rootSet E) := by | ||
suffices _ → (Algebra.adjoin F (p.rootSet K) = ⊤ ↔ K = adjoin F (p.rootSet E)) by |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it possible to use your new lemma to golf this proof?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It doesn't quite work because Polynomial.adjoin_rootSet_eq_range is about Subalgebras not IntermediateFields. I wonder whether we should change IsSplittingField to use IntermediateField.adjoin ...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can be a good idea, but let's keep it for another PR.
have : ∀ x ∈ S, (minpoly F x).Splits (algebraMap F E) := fun x hx ↦ splits_of_splits | ||
(splits x hx).2 fun y hy ↦ (le_iSup _ ⟨x, hx⟩ : _ ≤ E) (subset_adjoin F _ <| by exact hy) | ||
obtain ⟨φ⟩ := nonempty_algHom_adjoin_of_splits fun x hx ↦ ⟨(splits x hx).1, this x hx⟩ | ||
convert splits_comp_of_splits _ E.val.toRingHom (normal.splits <| φ ⟨x, hx⟩) | ||
rw [minpoly.algHom_eq _ φ.injective, ← minpoly.algHom_eq _ (adjoin F S).val.injective] | ||
rfl |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't looked at this super closely, but it feels like this should all be easier. For instance, going from (minpoly F x).Splits (algebraMap F E)
to (minpoly F x).Splits (algebraMap F L)
feels like it should be a one-liner. Are there missing lemmas in the library perhaps?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
going from
(minpoly F x).Splits (algebraMap F E)
to(minpoly F x).Splits (algebraMap F L)
feels like it should be a one-liner.
I think it's Polynomial.splits_comp_of_splits
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As @acmepjz said, if the two minpoly F x
were defeq then convert splits_comp_of_splits
would close the goal. However, the normal.splits
only guarantees the splitting of minpolys of elements in E; since adjoin F S
embeds in E
(via φ
), the minpolys of elements in adjoin F S
also splits because they are equal to the minpolys of the images of the elements in E
. This is what rw [minpoly.algHom_eq _ φ.injective]
does, and then we need another rewrite to go between adjoin F S
and K
.
The whole proof is a bit nontrivial and uses Normal.of_isSplittingField
essentially.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the review!
adjoin_algebraic_toSubalgebra fun _ ↦ isAlgebraic_of_mem_rootSet] | ||
exact ⟨fun ⟨spl, adj⟩ ↦ ⟨spl, adj⟩, fun ⟨spl, adj⟩ ↦ ⟨spl, adj⟩⟩ | ||
|
||
-- Note: p.Splits (algebraMap F E) also works | ||
theorem isSplittingField_iff {p : F[X]} {K : IntermediateField F E} : | ||
p.IsSplittingField F K ↔ p.Splits (algebraMap F K) ∧ K = adjoin F (p.rootSet E) := by | ||
suffices _ → (Algebra.adjoin F (p.rootSet K) = ⊤ ↔ K = adjoin F (p.rootSet E)) by |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It doesn't quite work because Polynomial.adjoin_rootSet_eq_range is about Subalgebras not IntermediateFields. I wonder whether we should change IsSplittingField to use IntermediateField.adjoin ...
have : ∀ x ∈ S, (minpoly F x).Splits (algebraMap F E) := fun x hx ↦ splits_of_splits | ||
(splits x hx).2 fun y hy ↦ (le_iSup _ ⟨x, hx⟩ : _ ≤ E) (subset_adjoin F _ <| by exact hy) | ||
obtain ⟨φ⟩ := nonempty_algHom_adjoin_of_splits fun x hx ↦ ⟨(splits x hx).1, this x hx⟩ | ||
convert splits_comp_of_splits _ E.val.toRingHom (normal.splits <| φ ⟨x, hx⟩) | ||
rw [minpoly.algHom_eq _ φ.injective, ← minpoly.algHom_eq _ (adjoin F S).val.injective] | ||
rfl |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As @acmepjz said, if the two minpoly F x
were defeq then convert splits_comp_of_splits
would close the goal. However, the normal.splits
only guarantees the splitting of minpolys of elements in E; since adjoin F S
embeds in E
(via φ
), the minpolys of elements in adjoin F S
also splits because they are equal to the minpolys of the images of the elements in E
. This is what rw [minpoly.algHom_eq _ φ.injective]
does, and then we need another rewrite to go between adjoin F S
and K
.
The whole proof is a bit nontrivial and uses Normal.of_isSplittingField
essentially.
adjoin_algebraic_toSubalgebra fun _ ↦ isAlgebraic_of_mem_rootSet] | ||
exact ⟨fun ⟨spl, adj⟩ ↦ ⟨spl, adj⟩, fun ⟨spl, adj⟩ ↦ ⟨spl, adj⟩⟩ | ||
|
||
-- Note: p.Splits (algebraMap F E) also works | ||
theorem isSplittingField_iff {p : F[X]} {K : IntermediateField F E} : | ||
p.IsSplittingField F K ↔ p.Splits (algebraMap F K) ∧ K = adjoin F (p.rootSet E) := by | ||
suffices _ → (Algebra.adjoin F (p.rootSet K) = ⊤ ↔ K = adjoin F (p.rootSet E)) by |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can be a good idea, but let's keep it for another PR.
@@ -31,62 +44,135 @@ lemma normalClosure_def : normalClosure F K L = ⨆ f : K →ₐ[F] L, f.fieldRa | |||
|
|||
variable {F K L} | |||
|
|||
/-- A normal closure is always normal. -/ | |||
lemma IsNormalClosure.normal [h : IsNormalClosure F K L] : Normal F L := |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can this be an instance?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No way to infer K, right? (Same in Normal.ofIsSplittingField, where there's no way to infer the polynomial.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah yes, of course.
@@ -31,62 +44,135 @@ lemma normalClosure_def : normalClosure F K L = ⨆ f : K →ₐ[F] L, f.fieldRa | |||
|
|||
variable {F K L} | |||
|
|||
/-- A normal closure is always normal. -/ | |||
lemma IsNormalClosure.normal [h : IsNormalClosure F K L] : Normal F L := |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No way to infer K, right? (Same in Normal.ofIsSplittingField, where there's no way to infer the polynomial.)
Thanks! bors merge |
Main changes are to the file NormalClosure: + Introduce predicate `IsNormalClosure` to characterize normal closures L/F of a field extension K/F by the conditions that every minimal polynomial of an element of K over F splits in L, and that L is generated by roots of such polynomials. (When K/F is not necessarily algebraic, the conditions actually says L/F is a normal closure of the algebraic closure of F in K over F. + `IsNormalClosure.normal`: a normal closure is always normal. + `isNormalClosure_iff `: if K/F is algebraic, the "generated by roots" condition in IsNormalClosure can be replaced by "generated by images of embeddings". To prove it, we split out the two inclusions in `restrictScalars_eq_iSup_adjoin` and golf its proof. `restrictScalars_eq_iSup_adjoin` is renamed to `normalClosure_eq_iSup_adjoin` as it has nothing to do with `restrictScalars`. + `IsNormalClosure.lift`: a normal closure of K/F embeds into any L/F such that the minpolys of K/F splits in L/F. + `IsNormalClosure.equiv`: normal closures are unique up to F-algebra isomorphisms. + `isNormalClosure_normalClosure`: `normalClosure F K L` is a valid normal closure if K/F is algebraic and all minpolys of K/F splits in L/F; in particular, if there is at least one F-embedding of K into L, and L/F is normal. + `Algebra.IsAlgebraic.cardinal_mk_algHom_le_of_splits`: if every minpoly of `K/F` splits in `L/F`, then `L` is maximal w.r.t. `F`-embeddings of `K`, in the sense that `K →ₐ[F] L` achieves maximal cardinality. In the file Normal: + `splits_of_mem_adjoin`: If a set of algebraic elements in a field extension `K/F` have minimal polynomials that split in another extension `L/F`, then all minimal polynomials in the intermediate field generated by the set also split in `L/F`. This is in preparation for connecting `IsNormalClosure` and `IsSplittingField`. In the file IntermediateField: + Add `comap` and show it forms a Galois connection with `map`. In the file FieldTheory/Adjoin: + Add `map_sup/iSup` lemmas that follow from the Galois connection, plus an additional convenience lemma. In the file RingTheory/Algebraic: add a lemma `AlgHom.isAlgebraic_of_injective`. Co-authored-by: Jz Pan <acme_pjz@hotmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
Pull request successfully merged into master. Build succeeded: |
Main changes are to the file NormalClosure: + Introduce predicate `IsNormalClosure` to characterize normal closures L/F of a field extension K/F by the conditions that every minimal polynomial of an element of K over F splits in L, and that L is generated by roots of such polynomials. (When K/F is not necessarily algebraic, the conditions actually says L/F is a normal closure of the algebraic closure of F in K over F. + `IsNormalClosure.normal`: a normal closure is always normal. + `isNormalClosure_iff `: if K/F is algebraic, the "generated by roots" condition in IsNormalClosure can be replaced by "generated by images of embeddings". To prove it, we split out the two inclusions in `restrictScalars_eq_iSup_adjoin` and golf its proof. `restrictScalars_eq_iSup_adjoin` is renamed to `normalClosure_eq_iSup_adjoin` as it has nothing to do with `restrictScalars`. + `IsNormalClosure.lift`: a normal closure of K/F embeds into any L/F such that the minpolys of K/F splits in L/F. + `IsNormalClosure.equiv`: normal closures are unique up to F-algebra isomorphisms. + `isNormalClosure_normalClosure`: `normalClosure F K L` is a valid normal closure if K/F is algebraic and all minpolys of K/F splits in L/F; in particular, if there is at least one F-embedding of K into L, and L/F is normal. + `Algebra.IsAlgebraic.cardinal_mk_algHom_le_of_splits`: if every minpoly of `K/F` splits in `L/F`, then `L` is maximal w.r.t. `F`-embeddings of `K`, in the sense that `K →ₐ[F] L` achieves maximal cardinality. In the file Normal: + `splits_of_mem_adjoin`: If a set of algebraic elements in a field extension `K/F` have minimal polynomials that split in another extension `L/F`, then all minimal polynomials in the intermediate field generated by the set also split in `L/F`. This is in preparation for connecting `IsNormalClosure` and `IsSplittingField`. In the file IntermediateField: + Add `comap` and show it forms a Galois connection with `map`. In the file FieldTheory/Adjoin: + Add `map_sup/iSup` lemmas that follow from the Galois connection, plus an additional convenience lemma. In the file RingTheory/Algebraic: add a lemma `AlgHom.isAlgebraic_of_injective`. Co-authored-by: Jz Pan <acme_pjz@hotmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
Main changes are to the file NormalClosure: + Introduce predicate `IsNormalClosure` to characterize normal closures L/F of a field extension K/F by the conditions that every minimal polynomial of an element of K over F splits in L, and that L is generated by roots of such polynomials. (When K/F is not necessarily algebraic, the conditions actually says L/F is a normal closure of the algebraic closure of F in K over F. + `IsNormalClosure.normal`: a normal closure is always normal. + `isNormalClosure_iff `: if K/F is algebraic, the "generated by roots" condition in IsNormalClosure can be replaced by "generated by images of embeddings". To prove it, we split out the two inclusions in `restrictScalars_eq_iSup_adjoin` and golf its proof. `restrictScalars_eq_iSup_adjoin` is renamed to `normalClosure_eq_iSup_adjoin` as it has nothing to do with `restrictScalars`. + `IsNormalClosure.lift`: a normal closure of K/F embeds into any L/F such that the minpolys of K/F splits in L/F. + `IsNormalClosure.equiv`: normal closures are unique up to F-algebra isomorphisms. + `isNormalClosure_normalClosure`: `normalClosure F K L` is a valid normal closure if K/F is algebraic and all minpolys of K/F splits in L/F; in particular, if there is at least one F-embedding of K into L, and L/F is normal. + `Algebra.IsAlgebraic.cardinal_mk_algHom_le_of_splits`: if every minpoly of `K/F` splits in `L/F`, then `L` is maximal w.r.t. `F`-embeddings of `K`, in the sense that `K →ₐ[F] L` achieves maximal cardinality. In the file Normal: + `splits_of_mem_adjoin`: If a set of algebraic elements in a field extension `K/F` have minimal polynomials that split in another extension `L/F`, then all minimal polynomials in the intermediate field generated by the set also split in `L/F`. This is in preparation for connecting `IsNormalClosure` and `IsSplittingField`. In the file IntermediateField: + Add `comap` and show it forms a Galois connection with `map`. In the file FieldTheory/Adjoin: + Add `map_sup/iSup` lemmas that follow from the Galois connection, plus an additional convenience lemma. In the file RingTheory/Algebraic: add a lemma `AlgHom.isAlgebraic_of_injective`. Co-authored-by: Jz Pan <acme_pjz@hotmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
Main changes are to the file NormalClosure:
Introduce predicate
IsNormalClosure
to characterize normal closures L/F of a field extension K/F by the conditions that every minimal polynomial of an element of K over F splits in L, and that L is generated by roots of such polynomials. (When K/F is not necessarily algebraic, the conditions actually says L/F is a normal closure of the algebraic closure of F in K over F.IsNormalClosure.normal
: a normal closure is always normal.isNormalClosure_iff
: if K/F is algebraic, the "generated by roots" condition in IsNormalClosure can be replaced by "generated by images of embeddings". To prove it, we split out the two inclusions inrestrictScalars_eq_iSup_adjoin
and golf its proof.restrictScalars_eq_iSup_adjoin
is renamed tonormalClosure_eq_iSup_adjoin
as it has nothing to do withrestrictScalars
.IsNormalClosure.lift
: a normal closure of K/F embeds into any L/F such that the minpolys of K/F splits in L/F.IsNormalClosure.equiv
: normal closures are unique up to F-algebra isomorphisms.isNormalClosure_normalClosure
:normalClosure F K L
is a valid normal closure if K/F is algebraic and all minpolys of K/F splits in L/F; in particular, if there is at least one F-embedding of K into L, and L/F is normal.Algebra.IsAlgebraic.cardinal_mk_algHom_le_of_splits
: if every minpoly ofK/F
splits inL/F
, thenL
is maximal w.r.t.F
-embeddings ofK
, in the sense thatK →ₐ[F] L
achieves maximal cardinality.In the file Normal:
splits_of_mem_adjoin
: If a set of algebraic elements in a field extensionK/F
have minimal polynomials that split in another extensionL/F
, then all minimal polynomials in the intermediate field generated by the set also split inL/F
. This is in preparation for connectingIsNormalClosure
andIsSplittingField
.In the file IntermediateField:
comap
and show it forms a Galois connection withmap
.In the file FieldTheory/Adjoin:
map_sup/iSup
lemmas that follow from the Galois connection, plus an additional convenience lemma.In the file RingTheory/Algebraic: add a lemma
AlgHom.isAlgebraic_of_injective
.Co-authored-by: Jz Pan acme_pjz@hotmail.com