module Cat.Instances.FinSets where
The category of finite sets🔗
Throughout this page, let be a natural number and denote the standard ordinal. The category of finite sets, is the category with set of objects the natural numbers, with set of maps the set of functions This category is not univalent, but it is weakly equivalent to the full subcategory of on those objects which are merely isomorphic to a finite ordinal. The reason for this “skeletal” definition is that is a small category, so that presheaves on are a Grothendieck topos.
FinSets : Precategory lzero lzero FinSets .Precategory.Ob = Nat FinSets .Precategory.Hom j k = Fin j → Fin k FinSets .Precategory.Hom-set x y = hlevel 2 FinSets .Precategory.id x = x FinSets .Precategory._∘_ f g x = f (g x) FinSets .Precategory.idr f = refl FinSets .Precategory.idl f = refl FinSets .Precategory.assoc f g h = refl
The category of finite sets can be seen as a full subcategory of the category of sets via the fully faithful inclusion functor that sends to
Fin→Sets : Functor FinSets (Sets lzero) Fin→Sets .F₀ n = el! (Fin n) Fin→Sets .F₁ f = f Fin→Sets .F-id = refl Fin→Sets .F-∘ _ _ = refl Fin→Sets-is-ff : is-fully-faithful Fin→Sets Fin→Sets-is-ff = id-equiv
As we said earlier, FinSets
is skeletal: this
follows directly from the injectivity of Fin
.
FinSets-is-skeletal : is-skeletal FinSets FinSets-is-skeletal = path-from-has-iso→is-skeletal _ $ rec! λ is → Fin-injective (iso→equiv (F-map-iso Fin→Sets is))
Finite limits and colimits🔗
The nice closure properties of finite sets, along with the fact that fully faithful functors reflect (co)limits, imply that the category admits finite products and coproducts, equalisers and coequalisers, making it finitely complete and finitely cocomplete.
FinSets-finitely-complete : Finitely-complete FinSets FinSets-finitely-complete = with-equalisers _ terminal products equalisers where terminal : Terminal FinSets terminal = ff→reflects-Terminal Fin→Sets Fin→Sets-is-ff Sets-terminal (equiv→iso (is-contr→≃ (hlevel 0) Finite-one-is-contr)) products : has-products FinSets products a b = ff→reflects-Product Fin→Sets Fin→Sets-is-ff (Sets-products _ _) (equiv→iso Finite-multiply) equalisers : has-equalisers FinSets equalisers f g = ff→reflects-Equaliser Fin→Sets Fin→Sets-is-ff (Sets-equalisers f g) (equiv→iso (Finite-subset (λ x → f x ≡ g x) .snd e⁻¹)) FinSets-finitely-cocomplete : Finitely-cocomplete FinSets FinSets-finitely-cocomplete = with-coequalisers _ initial coproducts coequalisers where initial : Initial FinSets initial = ff→reflects-Initial Fin→Sets Fin→Sets-is-ff Sets-initial (equiv→iso (Lift-≃ ∙e Finite-zero-is-initial e⁻¹)) coproducts : has-coproducts FinSets coproducts a b = ff→reflects-Coproduct Fin→Sets Fin→Sets-is-ff (Sets-coproducts _ _) (equiv→iso Finite-coproduct) coequalisers : has-coequalisers FinSets coequalisers f g = ff→reflects-Coequaliser Fin→Sets Fin→Sets-is-ff (Sets-coequalisers f g) (equiv→iso (Finite-coequaliser f g .snd e⁻¹))