open import category-theory.category
module category-theory.isomorphism {o h} (𝒞 : Category o h) where
open import foundations.universe open import foundations.identity-type open import foundations.groupoid-laws open import foundations.identity-type-reasoning open import foundations.proposition open import foundations.functions-are-functors open import foundations.transport open import foundations.sigma-type open Category 𝒞
private variable A B : Ob
record isIso (f : Hom A B) : Type h where
field
g : Hom B A
invˡ : g ∘ f = id A
invʳ : f ∘ g = id B
Iso : Ob → Ob → Type h
Iso A B = Σ (Hom A B) isIso
「同型射である」ということは命題である。
isPropIsIso : (f : Hom A B) → isProp (isIso f)
isPropIsIso {A = A} {B = B} f I J = q
where
module I = isIso I
module J = isIso J
p1 : I.g = J.g
p1 =
I.g
=⟨ sym (identʳ I.g) ⟩
I.g ∘ id B
=⟨ ap (I.g ∘_) (sym J.invʳ) ⟩
I.g ∘ (f ∘ J.g)
=⟨ sym assoc ⟩
(I.g ∘ f) ∘ J.g
=⟨ ap (_∘ J.g) I.invˡ ⟩
id A ∘ J.g
=⟨ identˡ J.g ⟩
J.g
∎
p2 : subst (λ g → g ∘ f = id A) p1 I.invˡ = J.invˡ
p2 = is-set-hom _ _ _ _
p3 : subst (λ g → f ∘ g = id B) p1 I.invʳ = J.invʳ
p3 = is-set-hom _ _ _ _
q : I = J
q with p1 | p2 | p3
... | refl | refl | refl = refl