Commit 2021-07-05 14:14 0b0d8e7e
View on Github →refactor(ring_theory): turn localization_map into a typeclass (#8119)
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_maphas been replaced withis_localization, similarlyaway_map->is_localization.away,localization_map.at_prime->is_localization.at_primeandfraction_map->is_fraction_ring- many declarations taking the
localization_mapas a parameter now takeRand/orMand/orRₘ, depending on what can be inferred easily localization_map.to_maphas been replaced withalgebra_map R Rₘlocalization_map.codomainand its instances have been removed (you can now directly useRₘ)is_localization.alg_equivgeneralizesfraction_map.alg_equiv_of_quotient(which has been renamed tois_fraction_ring.alg_equiv)is_localization.sechas been introduced to replace(to_localization_map _ _).seclocalization.ofhave been replaced withalgebraandis_localizationinstances onlocalization, similarly forlocalization.away.of,localization.at_prime.ofandfraction_ring.of.int.fraction_mapis now an instancerat.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.sheafare now plainring_homs. This change was suggested by @justus-springer in order to help the elaborator figure out the arguments tois_localization. - Deleted
minpoly.over_int_eq_over_ratandminpoly.integer_dvd, now you can just usegcd_domain_eq_field_fractionsorgcd_domain_dvdrespectively. This removes code duplication inminpoly.lean fractional_idealdoes not need to assumeis_localizationeverywhere, only for certain specific definitions Things that stay the same:localization,localization.away,localization.at_primeandfraction_ringare 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