Isomorphisms
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 usually not aProp
, because it holds the inverse morphism;as_iso
: convert fromis_iso
toiso
;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' : c.hom ≫ c.inv = 𝟙 X . "obviously"
- inv_hom_id' : c.inv ≫ c.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.
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
- inv : Y ⟶ X
- hom_inv_id' : f ≫ category_theory.is_iso.inv f = 𝟙 X . "obviously"
- inv_hom_id' : category_theory.is_iso.inv f ≫ f = 𝟙 Y . "obviously"
is_iso
typeclass expressing that a morphism is invertible.
This contains the data of the inverse, but is a subsingleton type.
Instances
- category_theory.is_iso.of_groupoid
- category_theory.is_iso.category_theory.is_iso
- category_theory.is_iso.of_iso
- category_theory.is_iso.of_iso_inverse
- category_theory.is_iso.inv_is_iso
- category_theory.is_iso.comp_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_of_is_iso_app'
- category_theory.is_iso_whisker_left
- category_theory.is_iso_whisker_right
- category_theory.limits.equalizer.ι_of_self
- category_theory.limits.coequalizer.π_of_self
- category_theory.limits.category_theory.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.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.images.is_iso_factor_thru_image
- category_theory.abelian.coimages.is_iso_factor_thru_coimage
- category_theory.monoidal_category.tensor_is_iso
- category_theory.unit_is_iso_of_L_fully_faithful
- category_theory.counit_is_iso_of_R_fully_faithful
- category_theory.limits.prod_comparison_iso_of_preserves_binary_prods
- category_theory.strict_initial
- category_theory.μ_iso_of_reflective
- category_theory.reflective.category_theory.is_iso
Reinterpret a morphism f
with an is_iso f
instance as an iso
.
Equations
- category_theory.as_iso f = {hom := f, inv := category_theory.is_iso.inv f h, hom_inv_id' := _, inv_hom_id' := _}
Equations
- category_theory.is_iso.category_theory.is_iso X = {inv := 𝟙 X, hom_inv_id' := _, inv_hom_id' := _}
Equations
- category_theory.is_iso.of_iso f = {inv := f.inv, hom_inv_id' := _, inv_hom_id' := _}
Equations
- _ = _
Equations
- _ = _
Equations
- _ = _
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