From f7afdb1823fe8d785849f817d022efa100007560 Mon Sep 17 00:00:00 2001 From: Jacques Comeaux Date: Wed, 23 Apr 2025 10:09:32 -0500 Subject: Category of decorated cospans is symmetric monoidal --- Functor/Exact/Instance/Swap.agda | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Functor/Exact/Instance/Swap.agda (limited to 'Functor/Exact/Instance/Swap.agda') 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 + } + } -- cgit v1.2.3