57 lines
1.8 KiB
Agda
57 lines
1.8 KiB
Agda
{-# OPTIONS --allow-unsolved-metas #-}
|
||
|
||
module Cat.Categories.Sets where
|
||
|
||
open import Cubical.PathPrelude
|
||
open import Agda.Primitive
|
||
open import Data.Product
|
||
open import Data.Product renaming (proj₁ to fst ; proj₂ to snd)
|
||
|
||
open import Cat.Category
|
||
open import Cat.Functor
|
||
|
||
-- Sets are built-in to Agda. The set of all small sets is called Set.
|
||
|
||
Fun : {ℓ : Level} → ( T U : Set ℓ ) → Set ℓ
|
||
Fun T U = T → U
|
||
|
||
Sets : {ℓ : Level} → Category {lsuc ℓ} {ℓ}
|
||
Sets {ℓ} = record
|
||
{ Object = Set ℓ
|
||
; Arrow = λ T U → Fun {ℓ} T U
|
||
; 𝟙 = λ x → x
|
||
; _⊕_ = λ g f x → g ( f x )
|
||
; assoc = refl
|
||
; ident = funExt (λ x → refl) , funExt (λ x → refl)
|
||
}
|
||
|
||
-- Covariant Presheaf
|
||
Representable : {ℓ ℓ' : Level} → (ℂ : Category {ℓ} {ℓ'}) → Set (ℓ ⊔ lsuc ℓ')
|
||
Representable {ℓ' = ℓ'} ℂ = Functor ℂ (Sets {ℓ'})
|
||
|
||
-- The "co-yoneda" embedding.
|
||
representable : {ℓ ℓ' : Level} → {ℂ : Category {ℓ} {ℓ'}} → Category.Object ℂ → Representable ℂ
|
||
representable {ℂ = ℂ} A = record
|
||
{ func* = λ B → ℂ.Arrow A B
|
||
; func→ = λ f g → f ℂ.⊕ g
|
||
; ident = funExt λ _ → snd ℂ.ident
|
||
; distrib = funExt λ x → sym ℂ.assoc
|
||
}
|
||
where
|
||
open module ℂ = Category ℂ
|
||
|
||
-- Contravariant Presheaf
|
||
Presheaf : {ℓ ℓ' : Level} → (ℂ : Category {ℓ} {ℓ'}) → Set (ℓ ⊔ lsuc ℓ')
|
||
Presheaf {ℓ' = ℓ'} ℂ = Functor (Opposite ℂ) (Sets {ℓ'})
|
||
|
||
-- Alternate name: `yoneda`
|
||
presheaf : {ℓ ℓ' : Level} → {ℂ : Category {ℓ} {ℓ'}} → Category.Object (Opposite ℂ) → Presheaf ℂ
|
||
presheaf {ℂ = ℂ} B = record
|
||
{ func* = λ A → ℂ.Arrow A B
|
||
; func→ = λ f g → g ℂ.⊕ f
|
||
; ident = funExt λ x → fst ℂ.ident
|
||
; distrib = funExt λ x → ℂ.assoc
|
||
}
|
||
where
|
||
open module ℂ = Category ℂ
|