Isomorphisms in categories
Content created by Fredrik Bakke and Egbert Rijke.
Created on 2023-09-13.
Last modified on 2024-04-11.
module category-theory.isomorphisms-in-categories where
Imports
open import category-theory.categories open import category-theory.isomorphisms-in-precategories open import foundation.action-on-identifications-binary-functions open import foundation.action-on-identifications-functions open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.functoriality-dependent-pair-types open import foundation.identity-types open import foundation.propositions open import foundation.sets open import foundation.torsorial-type-families open import foundation.universe-levels
Idea
An isomorphism in a category C
is a
morphism f : x → y
in C
for which there exists a morphism g : y → x
such
that f ∘ g = id
and g ∘ f = id
.
Definitions
The predicate of being an isomorphism in a category
is-iso-Category : {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} (f : hom-Category C x y) → UU l2 is-iso-Category C = is-iso-Precategory (precategory-Category C) module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} {f : hom-Category C x y} where hom-inv-is-iso-Category : is-iso-Category C f → hom-Category C y x hom-inv-is-iso-Category = hom-inv-is-iso-Precategory (precategory-Category C) is-section-hom-inv-is-iso-Category : (H : is-iso-Category C f) → comp-hom-Category C f (hom-inv-is-iso-Category H) = id-hom-Category C is-section-hom-inv-is-iso-Category = is-section-hom-inv-is-iso-Precategory (precategory-Category C) is-retraction-hom-inv-is-iso-Category : (H : is-iso-Category C f) → comp-hom-Category C (hom-inv-is-iso-Category H) f = id-hom-Category C is-retraction-hom-inv-is-iso-Category = is-retraction-hom-inv-is-iso-Precategory (precategory-Category C)
Isomorphisms in a category
module _ {l1 l2 : Level} (C : Category l1 l2) (x y : obj-Category C) where iso-Category : UU l2 iso-Category = iso-Precategory (precategory-Category C) x y module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} (f : iso-Category C x y) where hom-iso-Category : hom-Category C x y hom-iso-Category = hom-iso-Precategory (precategory-Category C) f is-iso-iso-Category : is-iso-Category C hom-iso-Category is-iso-iso-Category = is-iso-iso-Precategory (precategory-Category C) f hom-inv-iso-Category : hom-Category C y x hom-inv-iso-Category = hom-inv-iso-Precategory (precategory-Category C) f is-section-hom-inv-iso-Category : ( comp-hom-Category C ( hom-iso-Category) ( hom-inv-iso-Category)) = ( id-hom-Category C) is-section-hom-inv-iso-Category = is-section-hom-inv-iso-Precategory (precategory-Category C) f is-retraction-hom-inv-iso-Category : ( comp-hom-Category C ( hom-inv-iso-Category) ( hom-iso-Category)) = ( id-hom-Category C) is-retraction-hom-inv-iso-Category = is-retraction-hom-inv-iso-Precategory (precategory-Category C) f
Examples
The identity isomorphisms
For any object x : A
, the identity morphism id_x : hom x x
is an isomorphism
from x
to x
since id_x ∘ id_x = id_x
(it is its own inverse).
module _ {l1 l2 : Level} (C : Category l1 l2) {x : obj-Category C} where is-iso-id-hom-Category : is-iso-Category C (id-hom-Category C {x}) is-iso-id-hom-Category = is-iso-id-hom-Precategory (precategory-Category C) id-iso-Category : iso-Category C x x id-iso-Category = id-iso-Precategory (precategory-Category C)
Equalities induce isomorphisms
An equality between objects x y : A
gives rise to an isomorphism between them.
This is because, by the J-rule, it is enough to construct an isomorphism given
refl : x = x
, from x
to itself. We take the identity morphism as such an
isomorphism.
module _ {l1 l2 : Level} (C : Category l1 l2) where iso-eq-Category : (x y : obj-Category C) → x = y → iso-Category C x y iso-eq-Category = iso-eq-Precategory (precategory-Category C) compute-hom-iso-eq-Category : {x y : obj-Category C} → (p : x = y) → hom-eq-Category C x y p = hom-iso-Category C (iso-eq-Category x y p) compute-hom-iso-eq-Category = compute-hom-iso-eq-Precategory (precategory-Category C)
Properties
Being an isomorphism is a proposition
Let f : hom x y
and suppose g g' : hom y x
are both two-sided inverses to
f
. It is enough to show that g = g'
since the equalities are
propositions (since the hom-types are sets).
But we have the following chain of equalities:
g = g ∘ id_y = g ∘ (f ∘ g') = (g ∘ f) ∘ g' = id_x ∘ g' = g'
.
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} where is-prop-is-iso-Category : (f : hom-Category C x y) → is-prop (is-iso-Category C f) is-prop-is-iso-Category = is-prop-is-iso-Precategory (precategory-Category C) is-iso-prop-Category : (f : hom-Category C x y) → Prop l2 is-iso-prop-Category = is-iso-prop-Precategory (precategory-Category C)
Equality of isomorphism is equality of their underlying morphisms
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} where eq-iso-eq-hom-Category : (f g : iso-Category C x y) → hom-iso-Category C f = hom-iso-Category C g → f = g eq-iso-eq-hom-Category = eq-iso-eq-hom-Precategory (precategory-Category C)
The type of isomorphisms form a set
The type of isomorphisms between objects x y : A
is a
subtype of the set
hom x y
since being an isomorphism is a proposition.
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} where is-set-iso-Category : is-set (iso-Category C x y) is-set-iso-Category = is-set-iso-Precategory (precategory-Category C) iso-set-Category : Set l2 pr1 iso-set-Category = iso-Category C x y pr2 iso-set-Category = is-set-iso-Category
Isomorphisms are closed under composition
module _ {l1 l2 : Level} (C : Category l1 l2) {x y z : obj-Category C} {g : hom-Category C y z} {f : hom-Category C x y} where hom-comp-is-iso-Category : is-iso-Category C g → is-iso-Category C f → hom-Category C z x hom-comp-is-iso-Category = hom-comp-is-iso-Precategory (precategory-Category C) is-section-comp-is-iso-Category : (q : is-iso-Category C g) (p : is-iso-Category C f) → comp-hom-Category C ( comp-hom-Category C g f) ( hom-comp-is-iso-Category q p) = id-hom-Category C is-section-comp-is-iso-Category = is-section-comp-is-iso-Precategory (precategory-Category C) is-retraction-comp-is-iso-Category : (q : is-iso-Category C g) (p : is-iso-Category C f) → ( comp-hom-Category C ( hom-comp-is-iso-Category q p) ( comp-hom-Category C g f)) = ( id-hom-Category C) is-retraction-comp-is-iso-Category = is-retraction-comp-is-iso-Precategory (precategory-Category C) is-iso-comp-is-iso-Category : is-iso-Category C g → is-iso-Category C f → is-iso-Category C (comp-hom-Category C g f) is-iso-comp-is-iso-Category = is-iso-comp-is-iso-Precategory (precategory-Category C)
Composition of isomorphisms
module _ {l1 l2 : Level} (C : Category l1 l2) {x y z : obj-Category C} (g : iso-Category C y z) (f : iso-Category C x y) where hom-comp-iso-Category : hom-Category C x z hom-comp-iso-Category = hom-comp-iso-Precategory (precategory-Category C) g f is-iso-comp-iso-Category : is-iso-Category C hom-comp-iso-Category is-iso-comp-iso-Category = is-iso-comp-iso-Precategory (precategory-Category C) g f comp-iso-Category : iso-Category C x z comp-iso-Category = comp-iso-Precategory (precategory-Category C) g f hom-inv-comp-iso-Category : hom-Category C z x hom-inv-comp-iso-Category = hom-inv-comp-iso-Precategory (precategory-Category C) g f is-section-inv-comp-iso-Category : ( comp-hom-Category C ( hom-comp-iso-Category) ( hom-inv-comp-iso-Category)) = ( id-hom-Category C) is-section-inv-comp-iso-Category = is-section-inv-comp-iso-Precategory (precategory-Category C) g f is-retraction-inv-comp-iso-Category : ( comp-hom-Category C ( hom-inv-comp-iso-Category) ( hom-comp-iso-Category)) = ( id-hom-Category C) is-retraction-inv-comp-iso-Category = is-retraction-inv-comp-iso-Precategory (precategory-Category C) g f
Inverses of isomorphisms are isomorphisms
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} {f : hom-Category C x y} where is-iso-inv-is-iso-Category : (p : is-iso-Category C f) → is-iso-Category C (hom-inv-iso-Category C (f , p)) is-iso-inv-is-iso-Category = is-iso-inv-is-iso-Precategory (precategory-Category C)
Inverses of isomorphisms
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} where inv-iso-Category : iso-Category C x y → iso-Category C y x inv-iso-Category = inv-iso-Precategory (precategory-Category C)
Groupoid laws of isomorphisms in categories
Composition of isomorphisms satisfies the unit laws
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} (f : iso-Category C x y) where left-unit-law-comp-iso-Category : comp-iso-Category C (id-iso-Category C) f = f left-unit-law-comp-iso-Category = left-unit-law-comp-iso-Precategory (precategory-Category C) f right-unit-law-comp-iso-Category : comp-iso-Category C f (id-iso-Category C) = f right-unit-law-comp-iso-Category = right-unit-law-comp-iso-Precategory (precategory-Category C) f
Composition of isomorphisms is associative
module _ {l1 l2 : Level} (C : Category l1 l2) {x y z w : obj-Category C} (h : iso-Category C z w) (g : iso-Category C y z) (f : iso-Category C x y) where associative-comp-iso-Category : ( comp-iso-Category C (comp-iso-Category C h g) f) = ( comp-iso-Category C h (comp-iso-Category C g f)) associative-comp-iso-Category = associative-comp-iso-Precategory (precategory-Category C) h g f
Composition of isomorphisms satisfies inverse laws
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} (f : iso-Category C x y) where left-inverse-law-comp-iso-Category : ( comp-iso-Category C (inv-iso-Category C f) f) = ( id-iso-Category C) left-inverse-law-comp-iso-Category = left-inverse-law-comp-iso-Precategory (precategory-Category C) f right-inverse-law-comp-iso-Category : ( comp-iso-Category C f (inv-iso-Category C f)) = ( id-iso-Category C) right-inverse-law-comp-iso-Category = right-inverse-law-comp-iso-Precategory (precategory-Category C) f
A morphism f
is an isomorphism if and only if precomposition by f
is an equivalence
Proof: If f
is an isomorphism with inverse f⁻¹
, then precomposing with
f⁻¹
is an inverse of precomposing with f
. The only interesting direction is
therefore the converse.
Suppose that precomposing with f
is an equivalence, for any object z
. Then
- ∘ f : hom y x → hom x x
is an equivalence. In particular, there is a unique morphism g : y → x
such
that g ∘ f = id
. Thus we have a retraction of f
. To see that g
is also a
section, note that the map
- ∘ f : hom y y → hom x y
is an equivalence. In particular, it is injective. Therefore it suffices to show
that (f ∘ g) ∘ f = id ∘ f
. To see this, we calculate
(f ∘ g) ∘ f = f ∘ (g ∘ f) = f ∘ id = f = id ∘ f.
This completes the proof.
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} {f : hom-Category C x y} (H : (z : obj-Category C) → is-equiv (precomp-hom-Category C f z)) where hom-inv-is-iso-is-equiv-precomp-hom-Category : hom-Category C y x hom-inv-is-iso-is-equiv-precomp-hom-Category = hom-inv-is-iso-is-equiv-precomp-hom-Precategory (precategory-Category C) H is-retraction-hom-inv-is-iso-is-equiv-precomp-hom-Category : ( comp-hom-Category C ( hom-inv-is-iso-is-equiv-precomp-hom-Category) ( f)) = ( id-hom-Category C) is-retraction-hom-inv-is-iso-is-equiv-precomp-hom-Category = is-retraction-hom-inv-is-iso-is-equiv-precomp-hom-Precategory ( precategory-Category C) H is-section-hom-inv-is-iso-is-equiv-precomp-hom-Category : ( comp-hom-Category C ( f) ( hom-inv-is-iso-is-equiv-precomp-hom-Category)) = ( id-hom-Category C) is-section-hom-inv-is-iso-is-equiv-precomp-hom-Category = is-section-hom-inv-is-iso-is-equiv-precomp-hom-Precategory ( precategory-Category C) H is-iso-is-equiv-precomp-hom-Category : is-iso-Category C f is-iso-is-equiv-precomp-hom-Category = is-iso-is-equiv-precomp-hom-Precategory (precategory-Category C) H module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} {f : hom-Category C x y} (is-iso-f : is-iso-Category C f) (z : obj-Category C) where map-inv-precomp-hom-is-iso-Category : hom-Category C x z → hom-Category C y z map-inv-precomp-hom-is-iso-Category = precomp-hom-Category C (hom-inv-is-iso-Category C is-iso-f) z is-equiv-precomp-hom-is-iso-Category : is-equiv (precomp-hom-Category C f z) is-equiv-precomp-hom-is-iso-Category = is-equiv-precomp-hom-is-iso-Precategory (precategory-Category C) is-iso-f z equiv-precomp-hom-is-iso-Category : hom-Category C y z ≃ hom-Category C x z equiv-precomp-hom-is-iso-Category = equiv-precomp-hom-is-iso-Precategory (precategory-Category C) is-iso-f z module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} (f : iso-Category C x y) (z : obj-Category C) where is-equiv-precomp-hom-iso-Category : is-equiv (precomp-hom-Category C (hom-iso-Category C f) z) is-equiv-precomp-hom-iso-Category = is-equiv-precomp-hom-is-iso-Category C (is-iso-iso-Category C f) z equiv-precomp-hom-iso-Category : hom-Category C y z ≃ hom-Category C x z equiv-precomp-hom-iso-Category = equiv-precomp-hom-is-iso-Category C (is-iso-iso-Category C f) z
A morphism f
is an isomorphism if and only if postcomposition by f
is an equivalence
Proof: If f
is an isomorphism with inverse f⁻¹
, then postcomposing with
f⁻¹
is an inverse of postcomposing with f
. The only interesting direction is
therefore the converse.
Suppose that postcomposing with f
is an equivalence, for any object z
. Then
f ∘ - : hom y x → hom y y
is an equivalence. In particular, there is a unique morphism g : y → x
such
that f ∘ g = id
. Thus we have a section of f
. To see that g
is also a
retraction, note that the map
f ∘ - : hom x x → hom x y
is an equivalence. In particular, it is injective. Therefore it suffices to show
that f ∘ (g ∘ f) = f ∘ id
. To see this, we calculate
f ∘ (g ∘ f) = (f ∘ g) ∘ f = id ∘ f = f = f ∘ id.
This completes the proof.
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} {f : hom-Category C x y} (H : (z : obj-Category C) → is-equiv (postcomp-hom-Category C f z)) where hom-inv-is-iso-is-equiv-postcomp-hom-Category : hom-Category C y x hom-inv-is-iso-is-equiv-postcomp-hom-Category = hom-inv-is-iso-is-equiv-postcomp-hom-Precategory (precategory-Category C) H is-section-hom-inv-is-iso-is-equiv-postcomp-hom-Category : ( comp-hom-Category C ( f) ( hom-inv-is-iso-is-equiv-postcomp-hom-Category)) = ( id-hom-Category C) is-section-hom-inv-is-iso-is-equiv-postcomp-hom-Category = is-section-hom-inv-is-iso-is-equiv-postcomp-hom-Precategory ( precategory-Category C) H is-retraction-hom-inv-is-iso-is-equiv-postcomp-hom-Category : comp-hom-Category C ( hom-inv-is-iso-is-equiv-postcomp-hom-Category) ( f) = ( id-hom-Category C) is-retraction-hom-inv-is-iso-is-equiv-postcomp-hom-Category = is-retraction-hom-inv-is-iso-is-equiv-postcomp-hom-Precategory ( precategory-Category C) H is-iso-is-equiv-postcomp-hom-Category : is-iso-Category C f is-iso-is-equiv-postcomp-hom-Category = is-iso-is-equiv-postcomp-hom-Precategory ( precategory-Category C) H module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} {f : hom-Category C x y} (is-iso-f : is-iso-Category C f) (z : obj-Category C) where map-inv-postcomp-hom-is-iso-Category : hom-Category C z y → hom-Category C z x map-inv-postcomp-hom-is-iso-Category = postcomp-hom-Category C (hom-inv-is-iso-Category C is-iso-f) z is-equiv-postcomp-hom-is-iso-Category : is-equiv (postcomp-hom-Category C f z) is-equiv-postcomp-hom-is-iso-Category = is-equiv-postcomp-hom-is-iso-Precategory (precategory-Category C) is-iso-f z equiv-postcomp-hom-is-iso-Category : hom-Category C z x ≃ hom-Category C z y equiv-postcomp-hom-is-iso-Category = equiv-postcomp-hom-is-iso-Precategory (precategory-Category C) is-iso-f z module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} (f : iso-Category C x y) (z : obj-Category C) where is-equiv-postcomp-hom-iso-Category : is-equiv (postcomp-hom-Category C (hom-iso-Category C f) z) is-equiv-postcomp-hom-iso-Category = is-equiv-postcomp-hom-is-iso-Category C (is-iso-iso-Category C f) z equiv-postcomp-hom-iso-Category : hom-Category C z x ≃ hom-Category C z y equiv-postcomp-hom-iso-Category = equiv-postcomp-hom-is-iso-Category C (is-iso-iso-Category C f) z
When hom x y
is a proposition, the type of isomorphisms from x
to y
is a proposition
The type of isomorphisms between objects x y : A
is a subtype of hom x y
, so
when this type is a proposition, then the type of isomorphisms from x
to y
form a proposition.
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} where is-prop-iso-is-prop-hom-Category : is-prop (hom-Category C x y) → is-prop (iso-Category C x y) is-prop-iso-is-prop-hom-Category = is-prop-iso-is-prop-hom-Precategory (precategory-Category C) iso-prop-is-prop-hom-Category : is-prop (hom-Category C x y) → Prop l2 iso-prop-is-prop-hom-Category = iso-prop-is-prop-hom-Precategory (precategory-Category C)
When hom x y
and hom y x
are propositions, it suffices to provide a morphism in each direction to construct an isomorphism
module _ {l1 l2 : Level} (C : Category l1 l2) {x y : obj-Category C} where is-iso-is-prop-hom-Category' : is-prop (hom-Category C x x) → is-prop (hom-Category C y y) → (f : hom-Category C x y) → hom-Category C y x → is-iso-Category C f is-iso-is-prop-hom-Category' = is-iso-is-prop-hom-Precategory' (precategory-Category C) iso-is-prop-hom-Category' : is-prop (hom-Category C x x) → is-prop (hom-Category C y y) → hom-Category C x y → hom-Category C y x → iso-Category C x y iso-is-prop-hom-Category' = iso-is-prop-hom-Precategory' (precategory-Category C) is-iso-is-prop-hom-Category : ((x' y' : obj-Category C) → is-prop (hom-Category C x' y')) → (f : hom-Category C x y) → hom-Category C y x → is-iso-Category C f is-iso-is-prop-hom-Category = is-iso-is-prop-hom-Precategory (precategory-Category C) iso-is-prop-hom-Category : ((x' y' : obj-Category C) → is-prop (hom-Category C x' y')) → hom-Category C x y → hom-Category C y x → iso-Category C x y iso-is-prop-hom-Category = iso-is-prop-hom-Precategory (precategory-Category C)
Functoriality of iso-eq
module _ {l1 l2 : Level} (C : Category l1 l2) {x y z : obj-Category C} where preserves-concat-iso-eq-Category : (p : x = y) (q : y = z) → iso-eq-Category C x z (p ∙ q) = comp-iso-Category C (iso-eq-Category C y z q) (iso-eq-Category C x y p) preserves-concat-iso-eq-Category = preserves-concat-iso-eq-Precategory (precategory-Category C)
Extensionality of the type of objects in a category
module _ {l1 l2 : Level} (C : Category l1 l2) where extensionality-obj-Category : (x y : obj-Category C) → (x = y) ≃ iso-Category C x y pr1 (extensionality-obj-Category x y) = iso-eq-Category C x y pr2 (extensionality-obj-Category x y) = is-category-Category C x y eq-iso-Category : {x y : obj-Category C} → iso-Category C x y → x = y eq-iso-Category {x} {y} = map-inv-equiv (extensionality-obj-Category x y) is-section-eq-iso-Category : {x y : obj-Category C} (f : iso-Category C x y) → iso-eq-Category C x y (eq-iso-Category f) = f is-section-eq-iso-Category {x} {y} = is-section-map-inv-equiv (extensionality-obj-Category x y) is-retraction-eq-iso-Category : {x y : obj-Category C} (p : x = y) → eq-iso-Category (iso-eq-Category C x y p) = p is-retraction-eq-iso-Category {x} {y} = is-retraction-map-inv-equiv (extensionality-obj-Category x y) module _ {l1 l2 : Level} (C : Category l1 l2) (X : obj-Category C) where is-torsorial-iso-Category : is-torsorial (iso-Category C X) is-torsorial-iso-Category = is-contr-equiv' ( Σ (obj-Category C) (X =_)) ( equiv-tot (extensionality-obj-Category C X)) ( is-torsorial-Id X) is-torsorial-iso-Category' : is-torsorial (λ Y → iso-Category C Y X) is-torsorial-iso-Category' = is-contr-equiv' ( Σ (obj-Category C) (_= X)) ( equiv-tot (λ Y → extensionality-obj-Category C Y X)) ( is-torsorial-Id' X)
Functoriality of eq-iso
module _ {l1 l2 : Level} (C : Category l1 l2) where preserves-comp-eq-iso-Category : { x y z : obj-Category C} ( g : iso-Category C y z) ( f : iso-Category C x y) → ( eq-iso-Category C (comp-iso-Category C g f)) = ( eq-iso-Category C f ∙ eq-iso-Category C g) preserves-comp-eq-iso-Category g f = ( ap ( eq-iso-Category C) ( ap-binary ( comp-iso-Category C) ( inv (is-section-eq-iso-Category C g)) ( inv (is-section-eq-iso-Category C f)))) ∙ ( ap ( eq-iso-Category C) ( inv ( preserves-concat-iso-eq-Category C ( eq-iso-Category C f) ( eq-iso-Category C g)))) ∙ ( is-retraction-eq-iso-Category C ( eq-iso-Category C f ∙ eq-iso-Category C g))
Recent changes
- 2024-04-11. Fredrik Bakke and Egbert Rijke. Propositional operations (#1008).
- 2024-01-31. Fredrik Bakke. Rename
is-torsorial-path
tois-torsorial-Id
(#1016). - 2023-11-11. Fredrik Bakke. Isomorphisms induce equivalences by pre- and postcomposition (#912).
- 2023-11-01. Fredrik Bakke. Opposite categories, gaunt categories, replete subprecategories, large Yoneda, and miscellaneous additions (#880).
- 2023-10-21. Egbert Rijke and Fredrik Bakke. Implement
is-torsorial
throughout the library (#875).