module Cat.Instances.Comma where
Comma categories🔗
The comma category of two functors and with common codomain, written , is the directed, bicategorical analogue of a pullback square. It consists of maps in which all have their domain in the image of , and codomain in the image of .
The comma category is the universal way of completing a cospan of functors to a square, like the one below, which commutes up to a natural transformation . Note the similarity with a pullback square.
The objects in are given by triples where , , and .
record ↓Obj : Type (h ⊔ ao ⊔ bo) where
no-eta-equality
constructor ↓obj
field
{x} : Ob A
{y} : Ob B
: Hom C (F₀ F x) (F₀ G y) map
A morphism from is given by a pair of maps and , such that the square below commutes. Note that this is exactly the data of one component of a naturality square.
record ↓Hom (a b : ↓Obj) : Type (h ⊔ bh ⊔ ah) where
no-eta-equality
constructor ↓hom
private
module a = ↓Obj a
module b = ↓Obj b
field
{α} : Hom A a.x b.x
{β} : Hom B a.y b.y
: b.map C.∘ F₁ F α ≡ F₁ G β C.∘ a.map sq
We omit routine characterisations of equality in ↓Hom
from the page: ↓Hom-path
and ↓Hom-set
.
Identities and compositions are given componentwise:
: ∀ {a} → ↓Hom a a
↓id .↓Hom.α = A.id
↓id .↓Hom.β = B.id
↓id .↓Hom.sq = ap (_ C.∘_) (F-id F) ·· C.id-comm ·· ap (C._∘ _) (sym (F-id G))
↓id
: ∀ {a b c} → ↓Hom b c → ↓Hom a b → ↓Hom a c
↓∘ {a} {b} {c} g f = composite where
↓∘ open ↓Hom
module a = ↓Obj a
module b = ↓Obj b
module c = ↓Obj c
module f = ↓Hom f
module g = ↓Hom g
: ↓Hom a c
composite .α = g.α A.∘ f.α
composite .β = g.β B.∘ f.β
composite .sq =
composite .map C.∘ F₁ F (g.α A.∘ f.α) ≡⟨ ap (_ C.∘_) (F-∘ F _ _) ⟩
c.map C.∘ F₁ F g.α C.∘ F₁ F f.α ≡⟨ C.extendl g.sq ⟩
c.β C.∘ b.map C.∘ F₁ F f.α ≡⟨ ap (_ C.∘_) f.sq ⟩
F₁ G g.β C.∘ F₁ G f.β C.∘ a.map ≡⟨ C.pulll (sym (F-∘ G _ _)) ⟩
F₁ G g(g.β B.∘ f.β) C.∘ a.map ∎ F₁ G
This assembles into a precategory.
_↓_ : Precategory _ _
_↓_ .Ob = ↓Obj
_↓_ .Hom = ↓Hom
_↓_ .Hom-set = ↓Hom-set
_↓_ .id = ↓id
_↓_ ._∘_ = ↓∘
_↓_ .idr f = ↓Hom-path (A.idr _) (B.idr _)
_↓_ .idl f = ↓Hom-path (A.idl _) (B.idl _)
_↓_ .assoc f g h = ↓Hom-path (A.assoc _ _ _) (B.assoc _ _ _)
We also have the projection functors onto the factors, and the natural transformation witnessing “directed commutativity” of the square.
: Functor _↓_ A
Dom .F₀ = ↓Obj.x
Dom .F₁ = ↓Hom.α
Dom .F-id = refl
Dom .F-∘ _ _ = refl
Dom
: Functor _↓_ B
Cod .F₀ = ↓Obj.y
Cod .F₁ = ↓Hom.β
Cod .F-id = refl
Cod .F-∘ _ _ = refl
Cod
: (F F∘ Dom) => (G F∘ Cod)
θ = NT (λ x → x .↓Obj.map) λ x y f → f .↓Hom.sq θ