Adjoint.agda 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. module Adjoint where
  2. import Category
  3. import Functor
  4. open Category
  5. open Functor using (Functor)
  6. module Adj where
  7. open Functor.Projections using (Map; map)
  8. data _⊢_ {ℂ ⅅ : Cat}(F : Functor ℂ ⅅ)(G : Functor ⅅ ℂ) : Set1 where
  9. adjunction :
  10. (_* : {X : Obj ℂ}{Y : Obj ⅅ} -> Map F X ─→ Y -> X ─→ Map G Y)
  11. (_# : {X : Obj ℂ}{Y : Obj ⅅ} -> X ─→ Map G Y -> Map F X ─→ Y)
  12. (inv₁ : {X : Obj ℂ}{Y : Obj ⅅ}(g : X ─→ Map G Y) -> g # * == g)
  13. (inv₂ : {X : Obj ℂ}{Y : Obj ⅅ}(f : Map F X ─→ Y) -> f * # == f)
  14. (nat₁ : {X₁ X₂ : Obj ℂ}{Y₁ Y₂ : Obj ⅅ}
  15. (f : Y₁ ─→ Y₂)(g : X₂ ─→ X₁)(h : Map F X₁ ─→ Y₁) ->
  16. (f ∘ h ∘ map F g) * == map G f ∘ (h *) ∘ g
  17. )
  18. (nat₂ : {X₁ X₂ : Obj ℂ}{Y₁ Y₂ : Obj ⅅ}
  19. (f : Y₁ ─→ Y₂)(g : X₂ ─→ X₁)(h : X₁ ─→ Map G Y₁) ->
  20. (map G f ∘ h ∘ g) # == f ∘ (h #) ∘ map F g
  21. )
  22. -> F ⊢ G
  23. open Adj public