# The terminal category ```agda module category-theory.terminal-category where ``` <details><summary>Imports</summary> ```agda open import category-theory.categories open import category-theory.constant-functors open import category-theory.functors-categories open import category-theory.functors-precategories open import category-theory.gaunt-categories open import category-theory.isomorphisms-in-categories open import category-theory.isomorphisms-in-precategories open import category-theory.natural-transformations-functors-precategories open import category-theory.precategories open import category-theory.preunivalent-categories open import category-theory.strict-categories open import foundation.action-on-identifications-functions open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.homotopies open import foundation.identity-types open import foundation.propositions open import foundation.sets open import foundation.unit-type open import foundation.universe-levels ``` </details> ## Idea The **terminal category** is the [category](category-theory.categories.md) with one object and only the identity on that object. This category [represents](category-theory.representable-functors-categories.md) objects. ## Definition ### The objects and hom-sets of the terminal category ```agda obj-terminal-Category : UU lzero obj-terminal-Category = unit hom-set-terminal-Category : obj-terminal-Category → obj-terminal-Category → Set lzero hom-set-terminal-Category _ _ = unit-Set hom-terminal-Category : obj-terminal-Category → obj-terminal-Category → UU lzero hom-terminal-Category x y = type-Set (hom-set-terminal-Category x y) ``` ### The underlying precategory of the terminal category ```agda comp-hom-terminal-Category : {x y z : obj-terminal-Category} → hom-terminal-Category y z → hom-terminal-Category x y → hom-terminal-Category x z comp-hom-terminal-Category _ _ = star associative-comp-hom-terminal-Category : {x y z w : obj-terminal-Category} → (h : hom-terminal-Category z w) (g : hom-terminal-Category y z) (f : hom-terminal-Category x y) → comp-hom-terminal-Category {x} (comp-hom-terminal-Category {y} h g) f = comp-hom-terminal-Category {x} h (comp-hom-terminal-Category {x} g f) associative-comp-hom-terminal-Category h g f = refl id-hom-terminal-Category : {x : obj-terminal-Category} → hom-terminal-Category x x id-hom-terminal-Category = star left-unit-law-comp-hom-terminal-Category : {x y : obj-terminal-Category} → (f : hom-terminal-Category x y) → comp-hom-terminal-Category {x} (id-hom-terminal-Category {y}) f = f left-unit-law-comp-hom-terminal-Category f = refl right-unit-law-comp-hom-terminal-Category : {x y : obj-terminal-Category} → (f : hom-terminal-Category x y) → comp-hom-terminal-Category {x} f (id-hom-terminal-Category {x}) = f right-unit-law-comp-hom-terminal-Category f = refl terminal-Precategory : Precategory lzero lzero terminal-Precategory = make-Precategory ( obj-terminal-Category) ( hom-set-terminal-Category) ( comp-hom-terminal-Category) ( λ x → id-hom-terminal-Category {x}) ( associative-comp-hom-terminal-Category) ( left-unit-law-comp-hom-terminal-Category) ( right-unit-law-comp-hom-terminal-Category) ``` ### The terminal category ```agda is-category-terminal-Category : is-category-Precategory terminal-Precategory is-category-terminal-Category x y = is-equiv-is-contr ( iso-eq-Precategory terminal-Precategory x y) ( is-prop-unit x y) ( is-contr-Σ is-contr-unit star ( is-proof-irrelevant-is-prop ( is-prop-is-iso-Precategory terminal-Precategory star) ( star , refl , refl))) terminal-Category : Category lzero lzero pr1 terminal-Category = terminal-Precategory pr2 terminal-Category = is-category-terminal-Category ``` ### The terminal preunivalent category ```agda is-preunivalent-terminal-Category : is-preunivalent-Precategory terminal-Precategory is-preunivalent-terminal-Category = is-preunivalent-category-Category terminal-Category terminal-Preunivalent-Category : Preunivalent-Category lzero lzero terminal-Preunivalent-Category = preunivalent-category-Category terminal-Category ``` ### The terminal strict category ```agda is-strict-category-terminal-Category : is-strict-category-Precategory terminal-Precategory is-strict-category-terminal-Category = is-set-unit terminal-Strict-Category : Strict-Category lzero lzero pr1 terminal-Strict-Category = terminal-Precategory pr2 terminal-Strict-Category = is-strict-category-terminal-Category ``` ### The terminal gaunt category ```agda is-gaunt-terminal-Category : is-gaunt-Category terminal-Category is-gaunt-terminal-Category _ _ = is-prop-Σ is-prop-unit (λ _ → is-prop-is-iso-Category terminal-Category star) terminal-Gaunt-Category : Gaunt-Category lzero lzero pr1 terminal-Gaunt-Category = terminal-Category pr2 terminal-Gaunt-Category = is-gaunt-terminal-Category ``` ### Points in categories Using the terminal category as the representing category of objects, we can define, given an object in a category `x ∈ C`, the _point_ at `x` as the [constant functor](category-theory.constant-functors.md) from the terminal category to `C` at `x`. ```agda point-Precategory : {l1 l2 : Level} (C : Precategory l1 l2) (x : obj-Precategory C) → functor-Precategory terminal-Precategory C point-Precategory = constant-functor-Precategory terminal-Precategory point-Category : {l1 l2 : Level} (C : Category l1 l2) (x : obj-Category C) → functor-Category terminal-Category C point-Category C = point-Precategory (precategory-Category C) ``` ## Properties ### The terminal category represents objects ```agda module _ {l1 l2 : Level} (C : Precategory l1 l2) where is-equiv-point-Precategory : is-equiv (point-Precategory C) is-equiv-point-Precategory = is-equiv-is-invertible ( λ F → obj-functor-Precategory terminal-Precategory C F star) ( λ F → eq-htpy-functor-Precategory terminal-Precategory C _ F ( ( refl-htpy) , ( λ _ → ap ( λ f → comp-hom-Precategory C f (id-hom-Precategory C)) ( preserves-id-functor-Precategory terminal-Precategory C F ( star))))) ( refl-htpy) equiv-point-Precategory : obj-Precategory C ≃ functor-Precategory terminal-Precategory C pr1 equiv-point-Precategory = point-Precategory C pr2 equiv-point-Precategory = is-equiv-point-Precategory inv-equiv-point-Precategory : functor-Precategory terminal-Precategory C ≃ obj-Precategory C inv-equiv-point-Precategory = inv-equiv equiv-point-Precategory ``` It remains to show functoriality of `point-Precategory`. ### The terminal category is terminal ```agda module _ {l1 l2 : Level} (C : Precategory l1 l2) where terminal-functor-Precategory : functor-Precategory C terminal-Precategory terminal-functor-Precategory = constant-functor-Precategory C terminal-Precategory star uniqueness-terminal-functor-Precategory : (F : functor-Precategory C terminal-Precategory) → terminal-functor-Precategory = F uniqueness-terminal-functor-Precategory F = eq-htpy-functor-Precategory ( C) ( terminal-Precategory) ( terminal-functor-Precategory) ( F) ( refl-htpy , refl-htpy) is-contr-functor-terminal-Precategory : is-contr (functor-Precategory C terminal-Precategory) pr1 is-contr-functor-terminal-Precategory = terminal-functor-Precategory pr2 is-contr-functor-terminal-Precategory = uniqueness-terminal-functor-Precategory ``` ### A morphism in a precategory is equivalent to a natural transformation from the terminal precategory ```agda module _ {l1 l2 : Level} (C : Precategory l1 l2) where is-equiv-natural-transformation-constant-functor-Precategory : (a b : obj-Precategory C) → is-equiv ( natural-transformation-constant-functor-Precategory terminal-Precategory C {a} {b}) is-equiv-natural-transformation-constant-functor-Precategory a b = is-equiv-is-invertible ( λ τ → hom-family-natural-transformation-Precategory terminal-Precategory C ( point-Precategory C a) (point-Precategory C b) τ star) ( λ τ → eq-htpy-hom-family-natural-transformation-Precategory terminal-Precategory C ( point-Precategory C a) (point-Precategory C b) _ _ ( λ _ → refl)) ( λ f → refl) equiv-natural-transformation-constant-functor-Precategory : (a b : obj-Precategory C) → hom-Precategory C a b ≃ natural-transformation-Precategory terminal-Precategory C (point-Precategory C a) (point-Precategory C b) pr1 (equiv-natural-transformation-constant-functor-Precategory a b) = natural-transformation-constant-functor-Precategory terminal-Precategory C {a} {b} pr2 (equiv-natural-transformation-constant-functor-Precategory a b) = is-equiv-natural-transformation-constant-functor-Precategory a b ``` ## See also - [The initial category](category-theory.initial-category.md) ## External links - [Terminal category](https://1lab.dev/Cat.Instances.Shape.Terminal.html) at 1lab - [Terminal category](https://ncatlab.org/nlab/show/terminal+category) at $n$Lab A wikidata identifier was not available for this concept.