feat(RingTheory): generalize relNorm_eq_pow_of_isMaximal to separable fraction field extensions - #41696
feat(RingTheory): generalize relNorm_eq_pow_of_isMaximal to separable fraction field extensions#41696vaca22 wants to merge 4 commits into
Conversation
…ensions Generalize `Ring.NormalClosure`'s Galois/finiteness/Dedekind instances and `Ideal.relNorm_eq_pow_of_isMaximal` from `[PerfectField (FractionRing R)]` to `[Algebra.IsSeparable (FractionRing R) (FractionRing S)]`. The perfect-base requirement excluded function fields over imperfect constant fields, whose extensions are separable. Non-breaking: `PerfectField ⇒ IsSeparable` holds via `Algebra.IsAlgebraic.isSeparable_of_perfectField`. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Welcome new contributor!Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. In particular, we kindly remind contributors that we have guidelines regarding the use of AI when making pull requests. We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR. Thank you again for joining our community. |
PR summary 6c04ccae53Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
|
LLM-generated |
|
@vaca22 if you take a look at the AI guidelines, you shouldnt write PR descriptions entirely with AI. Maybe you can rewrite it with your own words? |
Thanks a lot for pointing this out, I totally understand the guideline about avoiding fully AI-written PR descriptions. |
…sMaximal docstring Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Please fix the CI error (you probably just need to merge master) |
|
Fixed — merging master resolved the CI cache-verification error. All checks are green now, thanks! |
|
It is a nice generalization since About the two new local instances: instance [Algebra.IsSeparable F K] : IsGalois F (normalClosure F K L) where
to_isSeparable := (your proof)
to_normal := inferInstanceThat way, |
… is Galois Add two general instances next to `IsGalois.normalClosure`: * `IntermediateField.normalClosure.isSeparable`: if `K/k` is separable, then `normalClosure k K F` is separable over `k`; * `IsGalois.normalClosure_of_isSeparable`: if moreover `F/k` is normal, then `normalClosure k K F` is Galois over `k`. The existing `IsGalois.normalClosure` assumes `IsGalois k F`, which does not apply when `F` is an algebraic closure in positive characteristic; the new instances cover that case. This lets the two local instances added to `Mathlib/RingTheory/NormalClosure.lean` be removed: `IsGalois K E` now resolves directly, and `Algebra.IsSeparable K E` comes for free through the projection. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Thanks, done. I split it into IntermediateField.normalClosure.isSeparable and IsGalois.normalClosure_of_isSeparable, and kept the existing IsGalois.normalClosure since [IsGalois k F] doesn't give Algebra.IsSeparable k K by instance search. Both local instances are gone. |
|
!radar |
|
Benchmark results for 6c04cca against 9b53612 are in. No significant results found. @xroblot
Medium changes (1✅)
|
| /-- Let $F / K / k$ be a tower of field extensions. If $K$ is separable over $k$, | ||
| then the normal closure of $K$ over $k$ in $F$ is separable over $k$. -/ | ||
| instance IntermediateField.normalClosure.isSeparable [Algebra.IsSeparable k K] : | ||
| Algebra.IsSeparable k (normalClosure k K F) := by | ||
| rw [← le_separableClosure_iff] | ||
| refine normalClosure_le_iff.mpr fun f ↦ ?_ | ||
| have : Algebra.IsSeparable k f.fieldRange := | ||
| AlgEquiv.Algebra.isSeparable (AlgEquiv.ofInjectiveField f) | ||
| exact le_separableClosure k F f.fieldRange |
There was a problem hiding this comment.
| /-- Let $F / K / k$ be a tower of field extensions. If $K$ is separable over $k$, | |
| then the normal closure of $K$ over $k$ in $F$ is separable over $k$. -/ | |
| instance IntermediateField.normalClosure.isSeparable [Algebra.IsSeparable k K] : | |
| Algebra.IsSeparable k (normalClosure k K F) := by | |
| rw [← le_separableClosure_iff] | |
| refine normalClosure_le_iff.mpr fun f ↦ ?_ | |
| have : Algebra.IsSeparable k f.fieldRange := | |
| AlgEquiv.Algebra.isSeparable (AlgEquiv.ofInjectiveField f) | |
| exact le_separableClosure k F f.fieldRange | |
| /-- Let `F / K / k` be a tower of field extensions. If `K` is separable over `k`, | |
| then the normal closure of `K/k` in `F` is separable over `k`. -/ | |
| instance IntermediateField.normalClosure.isSeparable [Algebra.IsSeparable k K] : | |
| Algebra.IsSeparable k (normalClosure k K F) := by | |
| refine (le_separableClosure_iff _ _ _).mp <| normalClosure_le_iff.mpr fun f ↦ ?_ | |
| have : Algebra.IsSeparable k f.fieldRange := | |
| AlgEquiv.Algebra.isSeparable (AlgEquiv.ofInjectiveField f) | |
| exact le_separableClosure k F f.fieldRange |
There was a problem hiding this comment.
Actually, it seems the $ notation is also used in this file so you can disregard the part about the docstring
This PR relaxes the hypothesis of Ideal.relNorm_eq_pow_of_isMaximal and its supporting Ring.NormalClosure instances.
Originally the theorem required the fraction ring of base Dedekind domain R to be a perfect field. Now we only require the fraction field extension to be separable.
The perfect field condition excludes function fields with imperfect constant fields, which is an important case we want to support. The core mathematical insight is that the normal closure of a separable field extension stays separable, so we can construct the Galois structure without a perfect base.
This change is fully backwards compatible: any existing code relying on the old perfect field assumption still compiles, since perfect fields automatically give separable extensions. Only two files are modified: NormalClosure.lean and RelNorm.lean, with small diff and no extra imports.
AI disclosure: I used AI tools to assist with initial code drafting and full CI validation. All mathematical reasoning and proof logic I worked through independently, and I can explain every adjustment in review. My original PR text relied too heavily on AI output, I’ve fully rewritten this description manually.