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
- 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.limits.terminal_comparison.category_theory.is_iso
- category_theory.limits.initial_comparison.category_theory.is_iso
- category_theory.limits.equalizer.ι_of_self
- category_theory.limits.coequalizer.π_of_self
- 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
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