Agda-2.3.2.2: examples/outdated-and-incorrect/cat/Terminal.agda
module Terminal where
open import Base
open import Category
open import Unique
open import Dual
import Iso
module Term (ℂ : Cat) where
private ℂ' = η-Cat ℂ
private open module C = Cat ℂ'
private open module U = Uniq ℂ'
private open module I = Iso ℂ'
Terminal : (A : Obj) -> Set1
Terminal A = (B : Obj) -> ∃! \(f : B ─→ A) -> True
toTerminal : {A B : Obj} -> Terminal A -> B ─→ A
toTerminal term = getWitness (term _)
terminalIso : {A B : Obj} -> Terminal A -> Terminal B -> A ≅ B
terminalIso tA tB = iso (toTerminal tB)
(toTerminal tA)
p q
where
p : toTerminal tB ∘ toTerminal tA == id
p = witnessEqual (tB _) tt tt
q : toTerminal tA ∘ toTerminal tB == id
q = witnessEqual (tA _) tt tt
module Init (ℂ : Cat) = Term (η-Cat ℂ op)
renaming
( Terminal to Initial
; toTerminal to fromInitial
; terminalIso to initialIso
)