Other Agda modules in this section (6)

Complete compiler-highlighted source. Follow a symbol to its declaration.

Corresponding book passages
# Contractible categories and contractions

The characterization in `rmk:Characterization_Contractible_Category` is
implemented in both directions. A contraction retains its chosen absolute
object and natural isomorphism; no uniqueness of the witness record is assumed.

```agda
{-# OPTIONS --safe --without-K #-}
open import Agda.Primitive using (Level)
open import SCT.VolumeI.Chapter01.Section01.Vocabulary
import SCT.VolumeI.Chapter01.Section01.Terminal as Terminal

module SCT.VolumeI.Chapter01.Section01.Contractibility
  {c m a : Level} (V : Vocabulary c m a)
  (T : Terminal.TerminalStructure V) where

open Vocabulary V
open Operations V
open Terminal.TerminalStructure T
open Terminal.Constructions V T

record Contraction (C : CAT) : Set m where
  field
    center : Obj-abs C
    contraction : (id C) =₁ (const center)

contractible-to-contraction : {C : CAT} → IsContractible C → Contraction C
contractible-to-contraction e = record
  { center = IsEquiv.inverse e
  ; contraction = IsEquiv.sectionIso e
  }

contraction-to-contractible : {C : CAT} → Contraction C → IsContractible C
contraction-to-contractible {C} H = record
  { inverse = Contraction.center H
  ; sectionIso = Contraction.contraction H
  ; retractionIso = terminal-iso (id One) (terminate C ∘ Contraction.center H)
  }

terminalIso-contractible : {X : CAT} (f g : MAP X One) → IsContractible (f = g)
terminalIso-contractible = terminalIso-isEquiv
```