diff options
Diffstat (limited to 'Functor/Exact/Instance/Swap.agda')
-rw-r--r-- | Functor/Exact/Instance/Swap.agda | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Functor/Exact/Instance/Swap.agda b/Functor/Exact/Instance/Swap.agda new file mode 100644 index 0000000..99a27c5 --- /dev/null +++ b/Functor/Exact/Instance/Swap.agda @@ -0,0 +1,79 @@ +{-# OPTIONS --without-K --safe #-} + +open import Level using (Level) +open import Category.Cocomplete.Finitely.Bundle using (FinitelyCocompleteCategory) + +module Functor.Exact.Instance.Swap {o β e : Level} (π π : FinitelyCocompleteCategory o β e) where + +open import Categories.Category using (_[_,_]) +open import Categories.Category.BinaryProducts using (BinaryProducts) +open import Categories.Category.Product using (Product) renaming (Swap to Swapβ²) +open import Categories.Category.Cartesian using (Cartesian) +open import Categories.Diagram.Coequalizer using (IsCoequalizer) +open import Categories.Object.Initial using (IsInitial) +open import Categories.Object.Coproduct using (IsCoproduct) +open import Data.Product.Base using (_,_; projβ; projβ; swap) + +open import Category.Instance.FinitelyCocompletes {o} {β} {e} using (FinitelyCocompletes-Cartesian) +open import Functor.Exact using (RightExactFunctor) + +module FCC = Cartesian FinitelyCocompletes-Cartesian +open BinaryProducts (FCC.products) using (_Γ_) -- ; Οβ; Οβ; _β_; assocΛ‘) + + +module π = FinitelyCocompleteCategory π +module π = FinitelyCocompleteCategory π + +swap-resp-β₯ : {A : π.Obj} {B : π.Obj} β IsInitial (Product π.U π.U) (A , B) β IsInitial (Product π.U π.U) (B , A) +swap-resp-β₯ {A} {B} isInitial = record + { ! = swap ! + ; !-unique = Ξ» { (f , g) β swap (!-unique (g , f)) } + } + where + open IsInitial isInitial + +swap-resp-+ + : {Aβ Bβ A+Bβ : π.Obj} + β {Aβ Bβ A+Bβ : π.Obj} + β {iββ : π.U [ Aβ , A+Bβ ]} + β {iββ : π.U [ Bβ , A+Bβ ]} + β {iββ : π.U [ Aβ , A+Bβ ]} + β {iββ : π.U [ Bβ , A+Bβ ]} + β IsCoproduct (Product π.U π.U) (iββ , iββ) (iββ , iββ) + β IsCoproduct (Product π.U π.U) (iββ , iββ) (iββ , iββ) +swap-resp-+ {Aβ} {Bβ} {A+Bβ} {Aβ} {Bβ} {A+Bβ} {iββ} {iββ} {iββ} {iββ} isCoproduct = record + { [_,_] = Ξ» { X Y β swap ([ swap X , swap Y ]) } + ; injectβ = swap injectβ + ; injectβ = swap injectβ + ; unique = Ξ» { ββ ββ β swap (unique (swap ββ) (swap ββ)) } + } + where + open IsCoproduct isCoproduct + +swap-resp-coeq + : {Aβ Bβ Cβ : π.Obj}Β + {Aβ Bβ Cβ : π.Obj} + {fβ gβ : π.U [ Aβ , Bβ ]} + {hβ : π.U [ Bβ , Cβ ]} + {fβ gβ : π.U [ Aβ , Bβ ]} + {hβ : π.U [ Bβ , Cβ ]} + β IsCoequalizer (Product π.U π.U) (fβ , fβ) (gβ , gβ) (hβ , hβ) + β IsCoequalizer (Product π.U π.U) (fβ , fβ) (gβ , gβ) (hβ , hβ) +swap-resp-coeq isCoequalizer = record + { equality = swap equality + ; coequalize = Ξ» { x β swap (coequalize (swap x)) } + ; universal = swap universal + ; unique = Ξ» { x β swap (unique (swap x)) } + } + where + open IsCoequalizer isCoequalizer + +Swap : RightExactFunctor (π Γ π) (π Γ π) +Swap = record + { F = Swapβ² + ; isRightExact = record + { F-resp-β₯ = swap-resp-β₯ + ; F-resp-+ = swap-resp-+ + ; F-resp-coeq = swap-resp-coeq + } + } |