{-# OPTIONS --without-K --safe #-}
open import Categories.Category
module Categories.Morphism.Duality {o ℓ e} (C : Category o ℓ e) where
open import Relation.Binary.PropositionalEquality using (_≡_; refl)
open Category C
import Categories.Morphism as M
private
module Op = M op
open M C
open import Categories.Morphism.Properties C
private
variable
A B X Y : Obj
f g h : A ⇒ B
Mono⇒op-Epi : Mono f → Op.Epi f
Mono⇒op-Epi mono = mono
Epi⇒op-Mono : Epi f → Op.Mono f
Epi⇒op-Mono epi = epi
Iso⇒op-Iso : Iso f g → Op.Iso g f
Iso⇒op-Iso iso = record
{ isoˡ = isoˡ
; isoʳ = isoʳ
}
where open Iso iso
op-Iso⇒Iso : Op.Iso g f → Iso f g
op-Iso⇒Iso iso = record
{ isoˡ = isoˡ
; isoʳ = isoʳ
}
where open Op.Iso iso
≅⇒op-≅ : A ≅ B → A Op.≅ B
≅⇒op-≅ A≅B = record
{ from = to
; to = from
; iso = Iso⇒op-Iso iso
}
where open _≅_ A≅B
op-≅⇒≅ : A Op.≅ B → A ≅ B
op-≅⇒≅ A≅B = record
{ from = to
; to = from
; iso = op-Iso⇒Iso iso
}
where open Op._≅_ A≅B
module MorphismDualityConversionProperties where
private
op-Iso-involutive : ∀(iso : Iso f g) → op-Iso⇒Iso (Iso⇒op-Iso iso) ≡ iso
op-Iso-involutive _ = refl
op-≅-involutive : ∀(A′ B′ : Obj) → (A′≅B′ : A′ ≅ B′)
→ op-≅⇒≅ (≅⇒op-≅ A′≅B′) ≡ A′≅B′
op-≅-involutive _ _ _ = refl