Isomorphisms #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines isomorphisms between objects of a category.
Main definitions #
structure iso
: a bundled isomorphism between two objects of a category;class is_iso
: an unbundled version ofiso
; note thatis_iso f
is aProp
, and only asserts the existence of an inverse. Of course, this inverse is unique, so it doesn't cost us much to use choice to retrieve it.inv f
, for the inverse of a morphism with[is_iso f]
as_iso
: convert fromis_iso
toiso
(noncomputable);of_iso
: convert fromiso
tois_iso
;- standard operations on isomorphisms (composition, inverse etc)
Notations #
X ≅ Y
: same asiso X Y
;α ≪≫ β
: composition of two isomorphisms; it is callediso.trans
Tags #
category, category theory, isomorphism
- hom : X ⟶ Y
- inv : Y ⟶ X
- hom_inv_id' : self.hom ≫ self.inv = 𝟙 X . "obviously"
- inv_hom_id' : self.inv ≫ self.hom = 𝟙 Y . "obviously"
An isomorphism (a.k.a. an invertible morphism) between two objects of a category. The inverse morphism is bundled.
See also category_theory.core
for the category with the same objects and isomorphisms playing
the role of morphisms.
See https://stacks.math.columbia.edu/tag/0017.
Instances for category_theory.iso
- category_theory.iso.has_sizeof_inst
- category_theory.iso.inhabited
- category_theory.subsingleton_iso
- category_theory.limits.has_zero_object.category_theory.iso.subsingleton
Inverse isomorphism.
Equations
- I.symm = {hom := I.inv, inv := I.hom, hom_inv_id' := _, inv_hom_id' := _}
Identity isomorphism.
Equations
- category_theory.iso.refl X = {hom := 𝟙 X, inv := 𝟙 X, hom_inv_id' := _, inv_hom_id' := _}
Equations
Composition of two isomorphisms
is_iso
typeclass expressing that a morphism is invertible.
Instances of this typeclass
- category_theory.is_iso.of_groupoid
- Action.is_iso_of_hom_is_iso
- algebraic_geometry.is_iso_of_is_empty
- category_theory.is_iso.comp_is_iso
- category_theory.is_iso.id
- category_theory.is_iso.of_iso
- category_theory.is_iso.of_iso_inv
- category_theory.is_iso.inv_is_iso
- category_theory.functor.map_is_iso
- category_theory.nat_iso.hom_app_is_iso
- category_theory.nat_iso.inv_app_is_iso
- category_theory.nat_iso.is_iso_app_of_is_iso
- category_theory.is_iso_whisker_left
- category_theory.is_iso_whisker_right
- category_theory.is_iso_op
- category_theory.is_iso_unop
- category_theory.eq_to_hom.is_iso
- category_theory.arrow.is_iso_left
- category_theory.arrow.is_iso_right
- category_theory.discrete.category_theory.is_iso
- category_theory.functor.repr_f.category_theory.is_iso
- category_theory.functor.corepr_f.category_theory.is_iso
- category_theory.limits.is_iso_π_initial
- category_theory.limits.is_iso_π_terminal
- category_theory.limits.is_iso_ι_terminal
- category_theory.limits.is_iso_ι_initial
- category_theory.bicategory.whisker_left_is_iso
- category_theory.bicategory.whisker_right_is_iso
- category_theory.limits.is_iso_prod
- category_theory.limits.is_iso_coprod
- category_theory.limits.pullback.map_is_iso
- category_theory.limits.pushout.map_is_iso
- category_theory.limits.pullback_snd_iso_of_left_iso
- category_theory.limits.pullback_snd_iso_of_right_factors_mono
- category_theory.limits.pullback_snd_iso_of_right_iso
- category_theory.limits.pullback_snd_iso_of_left_factors_mono
- category_theory.limits.pushout_inr_iso_of_left_iso
- category_theory.limits.pushout_inr_iso_of_right_factors_epi
- category_theory.limits.pushout_inl_iso_of_right_iso
- category_theory.limits.pushout_inl_iso_of_left_factors_epi
- category_theory.limits.fst_iso_of_mono_eq
- category_theory.limits.snd_iso_of_mono_eq
- category_theory.limits.inl_iso_of_epi_eq
- category_theory.limits.inr_iso_of_epi_eq
- category_theory.limits.pullback_comparison.category_theory.is_iso
- category_theory.limits.pushout_comparison.category_theory.is_iso
- category_theory.monoidal_category.tensor_is_iso
- category_theory.monoidal_functor.ε_is_iso
- category_theory.monoidal_functor.μ_is_iso
- category_theory.bicategory.bicategorical_coherence.is_iso
- category_theory.monoidal_category.monoidal_coherence.is_iso
- category_theory.monoidal_nat_iso.is_iso_of_is_iso_app
- category_theory.monoidal_unit.is_iso
- category_theory.monoidal_counit.is_iso
- category_theory.transfer_nat_trans_self_iso
- category_theory.transfer_nat_trans_self_symm_iso
- category_theory.limits.equalizer.ι_of_self
- category_theory.limits.coequalizer.π_of_self
- category_theory.limits.terminal_comparison.category_theory.is_iso
- category_theory.limits.initial_comparison.category_theory.is_iso
- category_theory.limits.image.eq_to_hom.category_theory.is_iso
- category_theory.limits.image.is_iso_precomp_iso
- category_theory.limits.has_zero_object.zero_to_zero_is_iso
- category_theory.limits.kernel.ι_zero_is_iso
- category_theory.limits.cokernel.π_zero_is_iso
- category_theory.limits.kernel.of_cokernel_of_epi
- category_theory.limits.cokernel.of_kernel_of_mono
- category_theory.limits.prod_comparison.category_theory.is_iso
- category_theory.limits.coprod_comparison.category_theory.is_iso
- category_theory.limits.pi_comparison.category_theory.is_iso
- category_theory.limits.sigma_comparison.category_theory.is_iso
- category_theory.limits.equalizer_comparison.category_theory.is_iso
- category_theory.limits.coequalizer_comparison.category_theory.is_iso
- category_theory.non_preadditive_abelian.is_iso_factor_thru_image
- category_theory.non_preadditive_abelian.is_iso_factor_thru_coimage
- category_theory.non_preadditive_abelian.is_iso_r
- category_theory.abelian.of_coimage_image_comparison_is_iso.e.category_theory.is_iso
- category_theory.abelian.of_coimage_image_comparison_is_iso.m.category_theory.is_iso
- category_theory.abelian.is_iso_factor_thru_image
- category_theory.abelian.is_iso_factor_thru_coimage
- category_theory.abelian.coimage_image_comparison.category_theory.is_iso
- category_theory.limits.kernel_comparison.category_theory.is_iso
- category_theory.limits.cokernel_comparison.category_theory.is_iso
- category_theory.abelian.functor_category.functor_category_is_iso_coimage_image_comparison
- Action.is_iso_hom_mk
- category_theory.unit_is_iso_of_L_fully_faithful
- category_theory.counit_is_iso_of_R_fully_faithful
- category_theory.whisker_left_counit_iso_of_L_fully_faithful
- category_theory.whisker_right_counit_iso_of_L_fully_faithful
- category_theory.whisker_left_unit_iso_of_R_fully_faithful
- category_theory.whisker_right_unit_iso_of_R_fully_faithful
- category_theory.is_iso_unit_obj
- category_theory.subobject.top_arrow_is_iso
- category_theory.subobject.is_iso_top_arrow
- category_theory.limits.is_iso_kernel_subobject_zero_arrow
- category_theory.limits.kernel_subobject_comp_mono_is_iso
- category_theory.abelian.category_theory.limits.cokernel.desc.category_theory.is_iso
- category_theory.abelian.category_theory.limits.kernel.lift.category_theory.is_iso
- Module.free.category_theory.lax_monoidal.ε.category_theory.is_iso
- category_theory.abelian.homology_c_to_k.category_theory.is_iso
- quasi_iso.is_iso
- category_theory.glue_data.f_id
- category_theory.glue_data.t_is_iso
- category_theory.glue_data.t'_is_iso
- Top.glue_data.mk_core.t.category_theory.is_iso
- category_theory.μ_iso_of_reflective
- category_theory.reflective.app.category_theory.is_iso
- Profinite.is_iso_as_limit_cone_lift
- category_theory.sieve.functor_inclusion_top_is_iso
- category_theory.limits.colimit_limit_to_limit_colimit_is_iso
- category_theory.limits.colimit_limit_to_limit_colimit_cone_iso
- category_theory.functor.final.colimit_pre_is_iso
- category_theory.functor.initial.limit_pre_is_iso
- localization_unit_is_iso
- localization_unit_is_iso'
- category_theory.limits.initial_is_iso_to
- category_theory.limits.terminal_is_iso_from
- category_theory.is_iso_sheafification_adjunction_counit
- category_theory.sheafification_reflective
- category_theory.grothendieck_topology.subpresheaf.ι.category_theory.is_iso
- category_theory.grothendieck_topology.to_image_presheaf.category_theory.is_iso
- category_theory.with_terminal.is_iso_of_from_star
- category_theory.with_initial.is_iso_of_to_star
- category_theory.limits.pullback.diagonal.category_theory.is_iso
- category_theory.to_initial_is_iso
- category_theory.frobenius_morphism_iso_of_preserves_binary_products
- category_theory.cartesian_closed_functor.comparison_iso
- Mon_.quiver.hom.hom.category_theory.is_iso
- category_theory.center.is_iso_of_f_is_iso
- simplicial_object.splitting.map_is_iso
- fundamental_groupoid_functor.pi_Top_to_pi_cone.category_theory.is_iso
- fundamental_groupoid_functor.homotopic_maps_nat_iso.category_theory.is_iso
- algebraic_topology.dold_kan.Γ₂N₂.nat_trans.category_theory.is_iso
- algebraic_topology.dold_kan.Γ₂N₁.nat_trans.category_theory.is_iso
- algebraic_geometry.PresheafedSpace.base_is_iso_of_iso
- algebraic_geometry.PresheafedSpace.c_is_iso_of_iso
- algebraic_geometry.PresheafedSpace.of_restrict_stalk_map_is_iso
- algebraic_geometry.PresheafedSpace.stalk_map.is_iso
- algebraic_geometry.SheafedSpace.is_PresheafedSpace_iso
- algebraic_geometry.LocallyRingedSpace.is_SheafedSpace_iso
- algebraic_geometry.structure_sheaf.stalk_to_fiber_ring_hom.category_theory.is_iso
- algebraic_geometry.structure_sheaf.localization_to_stalk.category_theory.is_iso
- algebraic_geometry.structure_sheaf.is_iso_to_basic_open
- algebraic_geometry.structure_sheaf.is_iso_to_global
- algebraic_geometry.is_iso_to_Spec_Γ
- algebraic_geometry.Scheme.is_LocallyRingedSpace_iso
- algebraic_geometry.PresheafedSpace.is_open_immersion.c_iso
- algebraic_geometry.PresheafedSpace.is_open_immersion.inv_app.category_theory.is_iso
- algebraic_geometry.PresheafedSpace.is_open_immersion.stalk_iso
- algebraic_geometry.PresheafedSpace.glue_data.componentwise_diagram_π_is_iso
- algebraic_geometry.Scheme.val_base_is_iso
- algebraic_geometry.morphism_restrict.category_theory.is_iso
- algebraic_geometry.Scheme.open_cover.from_glued_stalk_iso
- algebraic_geometry.Scheme.open_cover.from_glued.category_theory.is_iso
- algebraic_geometry.Γ_Spec.is_iso_LocallyRingedSpace_adjunction_counit
- algebraic_geometry.Γ_Spec.is_iso_adjunction_counit
- algebraic_geometry.is_affine.affine
- algebraic_geometry.basic_open_sections_to_affine.category_theory.is_iso
The inverse of a morphism f
when we have [is_iso f]
.
Equations
Instances for category_theory.inv
Reinterpret a morphism f
with an is_iso f
instance as an iso
.
Equations
- category_theory.as_iso f = {hom := f, inv := category_theory.inv f h, hom_inv_id' := _, inv_hom_id' := _}
All these cancellation lemmas can be solved by simp [cancel_mono]
(or simp [cancel_epi]
),
but with the current design cancel_mono
is not a good simp
lemma,
because it generates a typeclass search.
When we can see syntactically that a morphism is a mono
or an epi
because it came from an isomorphism, it's fine to do the cancellation via simp
.
In the longer term, it might be worth exploring making mono
and epi
structures,
rather than typeclasses, with coercions back to X ⟶ Y
.
Presumably we could write X ↪ Y
and X ↠ Y
.
A functor F : C ⥤ D
sends isomorphisms i : X ≅ Y
to isomorphisms F.obj X ≅ F.obj Y