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 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.
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
- 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
The inverse of a morphism f
when we have [is_iso f]
.
Equations
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