Other Agda modules in this section (16)

Chapter 1, rebuild2, checked 14 October 2026 · source revision b982f5a.

Corresponding book passages
# Functors from the initial category

Initiality and strictness are used separately. Strictness identifies
`T × Zero` with `Zero`; the chosen inverse transports the initial
identification, retaining its restriction triangle. Native reflection then
contracts `Fun Zero D` (`lem:Functors_Out_Of_Empty_Category`).

```agda
{-# OPTIONS --without-K #-}
module SCT.VolumeI.Chapter01.Section07.InitialDomain where

open import SCT.VolumeI.Chapter01.Section01.Vocabulary hiding (_=_)
open Operations
open import SCT.VolumeI.Chapter01.Section01.Terminal
open Constructions
open import SCT.VolumeI.Chapter01.Section02.Coherence using (module Composition)
open Composition
open import SCT.VolumeI.Chapter01.Section03.Equivalences using (equiv-inverse)
open import SCT.VolumeI.Chapter01.Section03.Factorizations using (factor; triangle)
open import SCT.VolumeI.Chapter01.Section03.WhiskeringEquivalence using (factor-through-preWhisker)
open import SCT.VolumeI.Chapter01.Section05.Initial
open import SCT.VolumeI.Chapter01.Section07.Evaluation
open import SCT.VolumeI.Chapter01.Section07.FunctorCategories
open import SCT.VolumeI.Chapter01.Section07.Currying

module _ {Γ : Context} where
  zeroProductInverse : (T : CAT Γ) → MAP Zero (T × Zero)
  zeroProductInverse T = IsEquiv.inverse (product-zero-isEquiv T)

  initial-product-comparison : {T D : CAT Γ} (f g : MAP (T × Zero) D) → f =₁ g
  initial-product-comparison {T} f g = factor (factor-through-preWhisker (zeroProductInverse T)
    (equiv-inverse (product-zero-isEquiv T)) (initial-unique (f ∘ zeroProductInverse T) (g ∘ zeroProductInverse T)))

  initial-product-comparison-restriction : {T D : CAT Γ} (f g : MAP (T × Zero) D)
    → (initial-product-comparison f g ▷ zeroProductInverse T) =₂
        initial-unique (f ∘ zeroProductInverse T) (g ∘ zeroProductInverse T)
  initial-product-comparison-restriction {T} f g = triangle
    (factor-through-preWhisker (zeroProductInverse T) (equiv-inverse (product-zero-isEquiv T))
      (initial-unique (f ∘ zeroProductInverse T) (g ∘ zeroProductInverse T)))

  funInitialPoint : (D : CAT Γ) → MAP One (Fun Zero D)
  funInitialPoint D = funCurry {C = Zero} {D = D} (initiate D ∘ pr₂ {C = One} {D = Zero})

  funInitial-contraction-evaluation : (D : CAT Γ)
    → funUncurry {C = Zero} {D = D} (funInitialPoint D ∘ terminate (Fun Zero D)) =₁
        funUncurry {C = Zero} {D = D} (id (Fun Zero D))
  funInitial-contraction-evaluation D = initial-product-comparison _ _

  funInitial-contraction : (D : CAT Γ)
    → (funInitialPoint D ∘ terminate (Fun Zero D)) =₁ id (Fun Zero D)
  funInitial-contraction D = reflect (funEval {C = Zero} {D = D}) (funUniversal Zero D) _ _
    (funInitial-contraction-evaluation D)

  funInitial-contraction-image : (D : CAT Γ)
    → evaluate-cong (funEval {C = Zero} {D = D}) (funInitial-contraction D) =₂
        funInitial-contraction-evaluation D
  funInitial-contraction-image D = reflect-β-One (funEval {C = Zero} {D = D}) (funUniversal Zero D) _ _
    (funInitial-contraction-evaluation D)

  funInitial-isEquiv : (D : CAT Γ) → IsEquiv (terminate (Fun Zero D))
  funInitial-isEquiv D = record
    { inverse = funInitialPoint D
    ; left-inverse-law = (funInitial-contraction D) ⁻¹
    ; right-inverse-law = terminal-identification _ _ }
```