module Cat.Instances.Sets.Complete where
Sets is complete🔗
We prove that the category of is for any universe levels and Inverting this to speak of maxima rather than ordering, to admit all we must be in at least the category of but any extra adjustment is also acceptable. So, suppose we have an indexing category and a diagram Let’s build a limit for it!
: ∀ {ι κ o} → is-complete ι κ (Sets (ι ⊔ κ ⊔ o))
Sets-is-complete {J = D} F = to-limit (to-is-limit lim) module Sets-is-complete where
Sets-is-complete module D = Precategory D
module F = Functor F
open make-is-limit
Since Set
is closed
under (arbitrary) products, we can build the
limit of an arbitrary diagram
— which we will write
— by first taking the product
(which is a set of dependent functions), then restricting ourselves to
the subset of those for which
i.e., those which are cones over
: Set _
apex = el! $
apex ((j : D.Ob) → ∣ F.₀ j ∣) ]
Σ[ f ∈ (∀ x y (g : D.Hom x y) → F.₁ g (f x) ≡ (f y))
To form a cone, given an object
and an inhabitant
of the type underlying f-apex
, we
must cough up (for ψ
) an object of
But this is exactly what
gives us. Similarly, since
witnesses that
commutes
, we can project it
directly.
Given some other cone to build a cone homomorphism recall that comes equipped with its own function which we can simply flip around to get a function This function is in the subset carved out by since is a cone, hence as required.
-- open Terminal
: make-is-limit F apex
lim .ψ x (f , p) = f x
lim .commutes f = funext λ where
lim (_ , p) → p _ _ f
.universal eta p x =
lim (λ j → eta j x) , λ x y f → p f $ₚ _
.factors _ _ = refl
lim .unique eta p other q = funext λ x →
lim (funext λ j → q j $ₚ x) Σ-prop-path!
module _ {ℓ} where
open Precategory (Sets ℓ)
private variable
: Set ℓ
A B : ⌞ A ⌟ → ⌞ B ⌟
f g
open Terminal
open is-product
open Product
open is-pullback
open Pullback
open is-equaliser
open Equaliser
Finite set-limits🔗
For expository reasons, we present the computation of the most famous shapes of finite limit (terminal objects, products, pullbacks, and equalisers) in the category of sets. All the definitions below are redundant, since finite limits are always small, and thus the category of sets of any level admits them.
: Terminal (Sets ℓ)
Sets-terminal .top = el! (Lift _ ⊤)
Sets-terminal .has⊤ _ = hlevel 0 Sets-terminal
Products are given by product sets:
: (A B : Set ℓ) → Product (Sets ℓ) A B
Sets-products .apex = el! (∣ A ∣ × ∣ B ∣)
Sets-products A B .π₁ = fst
Sets-products A B .π₂ = snd
Sets-products A B .has-is-product .⟨_,_⟩ f g x = f x , g x
Sets-products A B .has-is-product .π₁∘⟨⟩ = refl
Sets-products A B .has-is-product .π₂∘⟨⟩ = refl
Sets-products A B .has-is-product .unique p q i x = p i x , q i x Sets-products A B
Equalisers are given by carving out the subset of where and agree using
: (f g : Hom A B) → Equaliser (Sets ℓ) {A = A} {B = B} f g
Sets-equalisers {A = A} {B = B} f g = eq where
Sets-equalisers : Equaliser (Sets ℓ) f g
eq .apex .∣_∣ = Σ[ x ∈ A ] (f x ≡ g x)
eq .apex .is-tr = hlevel 2
eq .equ = fst
eq .has-is-eq .equal = funext snd
eq .has-is-eq .universal {e' = e'} p x = e' x , p $ₚ x
eq .has-is-eq .factors = refl
eq .has-is-eq .unique {p = p} q =
eq λ x → Σ-prop-path! (happly q x) funext
Pullbacks are the same, but carving out a subset of
: ∀ {A B C} (f : Hom A C) (g : Hom B C)
Sets-pullbacks → Pullback (Sets ℓ) {X = A} {Y = B} {Z = C} f g
{A = A} {B = B} {C = C} f g = pb where
Sets-pullbacks : Pullback (Sets ℓ) f g
pb .apex .∣_∣ = Σ[ x ∈ A ] Σ[ y ∈ B ] (f x ≡ g y)
pb .apex .is-tr = hlevel 2
pb .p₁ (x , _ , _) = x
pb .p₂ (_ , y , _) = y
pb .has-is-pb .square = funext (snd ⊙ snd)
pb .has-is-pb .universal {p₁' = p₁'} {p₂'} p a = p₁' a , p₂' a , happly p a
pb .has-is-pb .p₁∘universal = refl
pb .has-is-pb .p₂∘universal = refl
pb .has-is-pb .unique {p = p} {lim' = lim'} q r i x =
pb
q i x , r i x ,λ j → is-set→squarep (λ i j → C .is-tr)
(λ j → f (q j x)) (λ j → lim' x .snd .snd j) (happly p x) (λ j → g (r j x)) i j
Hence, Sets
is finitely
complete:
open Finitely-complete
: Finitely-complete (Sets ℓ)
Sets-finitely-complete .terminal = Sets-terminal
Sets-finitely-complete .products = Sets-products
Sets-finitely-complete .equalisers = Sets-equalisers
Sets-finitely-complete .pullbacks = Sets-pullbacks Sets-finitely-complete