{-# OPTIONS --safe --without-K --sized-types #-} module GlobSet.Examples.Terminal where open import Agda.Builtin.Unit open import GlobSet open import GlobSet.Product open import GlobSet.Composition open import GlobSet.Invertible open import GlobSet.HCat terminal : (i : Size) → GlobSet 0ℓ i terminal i .cells = ⊤ terminal i .morphisms j _ _ = terminal j terminalCompHelper : (j : Size) → GlobSetMorphism (terminal j ×G terminal j) (terminal j) terminalCompHelper j .func (f , g) = tt terminalCompHelper j .funcMorphisms k (f , g) (f' , g') = terminalCompHelper k compTerminal : (i : Size) → Composable i (terminal i) compTerminal i .id j x = tt compTerminal i .comp j x y z = terminalCompHelper j compTerminal i .compHigher j x y = (compTerminal j) terminalInvertibleMorphisms : (i : Size) (j : Size< i) → InvertibleCell i (compTerminal i) j tt tt terminalInvertibleMorphisms i j .cell = tt terminalInvertibleMorphisms i j .invert .finv = tt terminalInvertibleMorphisms i j .invert .fR = terminalInvertibleMorphisms j terminalInvertibleMorphisms i j .invert .fL = terminalInvertibleMorphisms j hCatTerminal : (i : Size) → HCat (terminal i) (compTerminal i) hCatTerminal i .compPreserveId j x y z = γ i j where γ : (i : Size) → (j : Size< i) → PreserveIden (prodComp (compTerminal j) (compTerminal j)) (compTerminal j) (terminalCompHelper j) γ i j .idPreserve k l w = terminalInvertibleMorphisms k l γ i j .idPreserveCoin k w₁ w₂ = γ j k hCatTerminal i .compPreserveComp j x y z = γ i j where γ : (i : Size) → (j : Size< i) → PreserveComp (prodComp (compTerminal j) (compTerminal j)) (compTerminal j) (terminalCompHelper j) γ i j .compPreserve k l x y z .eq m w = terminalInvertibleMorphisms k m γ i j .compPreserveCoin k x y = γ j k hCatTerminal i .ƛ {j} k f = terminalInvertibleMorphisms j k hCatTerminal i .ρ {j} k f = terminalInvertibleMorphisms j k hCatTerminal i .assoc {j} {k} a b c = terminalInvertibleMorphisms j k hCatTerminal i .hcoin j x y = hCatTerminal j