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] - refactor(ring_theory): turn localization_map
into a typeclass
#8119
Conversation
With this refactor, you can just use the general statement for fields of fractions
Co-Authored-By: Johan Commelin <johan@commelin.net>
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! This is looking very very good.
7ee286f
to
a96dfc9
Compare
From a quick grepping it seems `sec` is not used outside of this file
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 🎉 (let's wait for CI)
bors d+
✌️ Vierkantor can now approve this pull request. To approve and merge a pull request, simply reply with |
bors r+ |
This PR replaces the previous `localization_map (M : submodule R) Rₘ` definition (a ring hom `R →+* Rₘ` that presents `Rₘ` as the localization of `R` at `M`) with a new `is_localization M Rₘ` typeclass that puts these requirements on `algebra_map R Rₘ` instead. An important benefit is that we no longer need to mess with `localization_map.codomain` to put an `R`-algebra structure on `Rₘ`, we can just work with `Rₘ` directly. The important API changes are in commit 0de78dc, all other commits are simply fixes to the dependent files. Main changes: * `localization_map` has been replaced with `is_localization`, similarly `away_map` -> `is_localization.away`, `localization_map.at_prime` -> `is_localization.at_prime` and `fraction_map` -> `is_fraction_ring` * many declarations taking the `localization_map` as a parameter now take `R` and/or `M` and/or `Rₘ`, depending on what can be inferred easily * `localization_map.to_map` has been replaced with `algebra_map R Rₘ` * `localization_map.codomain` and its instances have been removed (you can now directly use `Rₘ`) * `is_localization.alg_equiv` generalizes `fraction_map.alg_equiv_of_quotient` (which has been renamed to `is_fraction_ring.alg_equiv`) * `is_localization.sec` has been introduced to replace `(to_localization_map _ _).sec` * `localization.of` have been replaced with `algebra` and `is_localization` instances on `localization`, similarly for `localization.away.of`, `localization.at_prime.of` and `fraction_ring.of`. * `int.fraction_map` is now an instance `rat.is_fraction_ring` * All files depending on the above definitions have had fixes. These were mostly straightforward, except: * [Some category-theory arrows in `algebraic_geometry/structure.sheaf` are now plain `ring_hom`s. This change was suggested by @justus-springer in order to help the elaborator figure out the arguments to `is_localization`.](cf3acc9) * Deleted `minpoly.over_int_eq_over_rat` and `minpoly.integer_dvd`, now you can just use `gcd_domain_eq_field_fractions` or `gcd_domain_dvd` respectively. [This removes code duplication in `minpoly.lean`](5695924) * `fractional_ideal` does not need to assume `is_localization` everywhere, only for certain specific definitions Things that stay the same: * `localization`, `localization.away`, `localization.at_prime` and `fraction_ring` are still a construction of localizations (although see above for `{localization,localization.away,localization.at_prime,fraction_ring}.of`) Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Refactoring.20.60localization_map.60
Pull request successfully merged into master. Build succeeded: |
localization_map
into a typeclasslocalization_map
into a typeclass
This PR replaces the previous `localization_map (M : submodule R) Rₘ` definition (a ring hom `R →+* Rₘ` that presents `Rₘ` as the localization of `R` at `M`) with a new `is_localization M Rₘ` typeclass that puts these requirements on `algebra_map R Rₘ` instead. An important benefit is that we no longer need to mess with `localization_map.codomain` to put an `R`-algebra structure on `Rₘ`, we can just work with `Rₘ` directly. The important API changes are in commit 0de78dc, all other commits are simply fixes to the dependent files. Main changes: * `localization_map` has been replaced with `is_localization`, similarly `away_map` -> `is_localization.away`, `localization_map.at_prime` -> `is_localization.at_prime` and `fraction_map` -> `is_fraction_ring` * many declarations taking the `localization_map` as a parameter now take `R` and/or `M` and/or `Rₘ`, depending on what can be inferred easily * `localization_map.to_map` has been replaced with `algebra_map R Rₘ` * `localization_map.codomain` and its instances have been removed (you can now directly use `Rₘ`) * `is_localization.alg_equiv` generalizes `fraction_map.alg_equiv_of_quotient` (which has been renamed to `is_fraction_ring.alg_equiv`) * `is_localization.sec` has been introduced to replace `(to_localization_map _ _).sec` * `localization.of` have been replaced with `algebra` and `is_localization` instances on `localization`, similarly for `localization.away.of`, `localization.at_prime.of` and `fraction_ring.of`. * `int.fraction_map` is now an instance `rat.is_fraction_ring` * All files depending on the above definitions have had fixes. These were mostly straightforward, except: * [Some category-theory arrows in `algebraic_geometry/structure.sheaf` are now plain `ring_hom`s. This change was suggested by @justus-springer in order to help the elaborator figure out the arguments to `is_localization`.](cf3acc9) * Deleted `minpoly.over_int_eq_over_rat` and `minpoly.integer_dvd`, now you can just use `gcd_domain_eq_field_fractions` or `gcd_domain_dvd` respectively. [This removes code duplication in `minpoly.lean`](5695924) * `fractional_ideal` does not need to assume `is_localization` everywhere, only for certain specific definitions Things that stay the same: * `localization`, `localization.away`, `localization.at_prime` and `fraction_ring` are still a construction of localizations (although see above for `{localization,localization.away,localization.at_prime,fraction_ring}.of`) Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Refactoring.20.60localization_map.60
This PR replaces the previous
localization_map (M : submodule R) Rₘ
definition (a ring homR →+* Rₘ
that presentsRₘ
as the localization ofR
atM
) with a newis_localization M Rₘ
typeclass that puts these requirements onalgebra_map R Rₘ
instead. An important benefit is that we no longer need to mess withlocalization_map.codomain
to put anR
-algebra structure onRₘ
, we can just work withRₘ
directly.The important API changes are in commit 0de78dc, all other commits are simply fixes to the dependent files.
Main changes:
localization_map
has been replaced withis_localization
, similarlyaway_map
->is_localization.away
,localization_map.at_prime
->is_localization.at_prime
andfraction_map
->is_fraction_ring
localization_map
as a parameter now takeR
and/orM
and/orRₘ
, depending on what can be inferred easilylocalization_map.to_map
has been replaced withalgebra_map R Rₘ
localization_map.codomain
and its instances have been removed (you can now directly useRₘ
)is_localization.alg_equiv
generalizesfraction_map.alg_equiv_of_quotient
(which has been renamed tois_fraction_ring.alg_equiv
)is_localization.sec
has been introduced to replace(to_localization_map _ _).sec
localization.of
have been replaced withalgebra
andis_localization
instances onlocalization
, similarly forlocalization.away.of
,localization.at_prime.of
andfraction_ring.of
.int.fraction_map
is now an instancerat.is_fraction_ring
algebraic_geometry/structure.sheaf
are now plainring_hom
s. This change was suggested by @justus-springer in order to help the elaborator figure out the arguments tois_localization
.minpoly.over_int_eq_over_rat
andminpoly.integer_dvd
, now you can just usegcd_domain_eq_field_fractions
orgcd_domain_dvd
respectively. This removes code duplication inminpoly.lean
fractional_ideal
does not need to assumeis_localization
everywhere, only for certain specific definitionsThings that stay the same:
localization
,localization.away
,localization.at_prime
andfraction_ring
are still a construction of localizations (although see above for{localization,localization.away,localization.at_prime,fraction_ring}.of
)Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Refactoring.20.60localization_map.60