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
refactor: generalize IsIntegrallyClosed away from fraction fields #7116
Conversation
|
||
variable {R : Type*} [CommRing R] | ||
-- TODO: this section can be generalized from `IsFractionRing` to any `Algebra` that is injective, | ||
-- but there is no way to hook that assumption up to the typeclass system. |
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.
iirc, it's NoZeroSmulDivisors
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.
The identity homomorphism from R to itself is injective but wouldn't satisfy NoZeroSmulDivisors
if R has zero divisors.
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, indeed, I just remember using it in flt-reg for that purpose but that's just because we were dealing with domains at all times
|
||
variable {R : Type*} [CommRing R] | ||
-- TODO: this section can be generalized from `IsFractionRing` to any `Algebra` that is injective, | ||
-- but there is no way to hook that assumption up to the typeclass system. |
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.
The identity homomorphism from R to itself is injective but wouldn't satisfy NoZeroSmulDivisors
if R has zero divisors.
This PR/issue depends on: |
Instead of saying `IsIntegrallyClosed R` means the ring `R` contains all integral elements of the ring of fractions, we follow the convention by the Stacks project and paramerize over an arbitrary algebra `A`: `IsIntegrallyClosed R A` means `R` contains all integral elements of `A`. Most results generalize straightforwardly.
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
1761fe8
to
db78430
Compare
@@ -71,7 +71,7 @@ end | |||
|
|||
variable [IsDomain S] [NoZeroSMulDivisors R S] | |||
|
|||
variable [IsIntegrallyClosed R] | |||
variable [IsIntegrallyClosed R (FractionRing R)] |
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.
Shouldn't we introduce a name for this? Can we call these rings "normal"?
@alreadydone do you have opinions on this?
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.
Normal implies not only IsIntegrallyClosed R (FractionRing R)
but also IsReduced according to Stacks' definition.
Maybe we could call this generalized version IsIntegrallyClosedIn
and let IsIntegrallyClosed R := IsIntegrallyClosedIn R (FractionRing R)
, so the definition of IsIntegrallyClosed
remains unchanged. To be honest I don't see much use of IsIntegrallyClosedIn
yet ...
Coming back to this, I indeed don't see a direct application for the changes. However, the integral closure machinery in Mathlib still feels somewhat messy at the moment so I'd like to spend some time figuring out how to make it better. Continuing along Junyan's suggestion, can't we define |
Indeed, there's |
…sedIn` This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
Closing in favour of #7857. |
…sedIn` This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
…sedIn` This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
…sedIn` (#7857) This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
…sedIn` (#7857) This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
…sedIn` (#7857) This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
…sedIn` (#7857) This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
…sedIn` (#7857) This refactor adds a new definition `IsIntegrallyClosedIn R A` equal to `IsIntegralClosure R A A`, and redefines `IsIntegrallyClosed R` to equal `IsIntegrallyClosed R (FractionRing A)`. This should make it possible and convenient to generalize away from the fraction fields. This also more closely approximates the conventions of the Stacks project. This is a second attempt at the refactor, after #7116 which was much more messy.
Instead of saying
IsIntegrallyClosed R
means the ringR
contains all integral elements of the ring of fractions, we follow, as suggested by @alreadydone in the review for #6126, the convention by the Stacks project and paramerize over an arbitrary algebraA
:IsIntegrallyClosed R A
meansR
contains all integral elements ofA
.Most results generalize straightforwardly. The general algorithm: if the fraction field is already there, use that. Otherwise use
FractionRing R
.TODO: generalize away from
IsFractionRing
if they are not needed.IsDomain
hypothesis fromIsIntegrallyClosed
#6126