aboutsummaryrefslogtreecommitdiff
path: root/Functor/Exact/Instance/Swap.agda
diff options
context:
space:
mode:
Diffstat (limited to 'Functor/Exact/Instance/Swap.agda')
-rw-r--r--Functor/Exact/Instance/Swap.agda79
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
+ }
+ }