diff options
Diffstat (limited to 'Category/Dagger/Semiadditive.agda')
| -rw-r--r-- | Category/Dagger/Semiadditive.agda | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/Category/Dagger/Semiadditive.agda b/Category/Dagger/Semiadditive.agda index a5b03ab..424f8df 100644 --- a/Category/Dagger/Semiadditive.agda +++ b/Category/Dagger/Semiadditive.agda @@ -5,11 +5,21 @@ open import Categories.Category using (Category) module Category.Dagger.Semiadditive {o β e : Level} (π : Category o β e) where +import Categories.Morphism as Morphism import Categories.Morphism.Reasoning π as β-Reasoning +import Category.Semiadditive.Monoidal as SemiadditiveMonoidal open import Categories.Category.Dagger using (HasDagger) +open import Categories.Category.Monoidal using (Monoidal) +open import Categories.Category.Monoidal.Bundle using (MonoidalCategory; SymmetricMonoidalCategory) +open import Categories.Functor.Bifunctor using (Bifunctor) +open import Categories.Morphism using (Iso) +open import Categories.Morphism.Properties π using (Iso-resp-β; Iso-swap) +open import Category.Dagger.2-Poset using (Dagger-2-Poset; Map; Maps; unitary-isMap) open import Category.Semiadditive using (Semiadditive) +open import Data.Product using (_,_) open import Relation.Binary using (Rel) +open import Relation.Binary.Morphism.Bundles using (PosetHomomorphism; mkPosetHomo) record SemiadditiveDagger : Set (suc (o β β β e)) where @@ -41,6 +51,42 @@ record SemiadditiveDagger : Set (suc (o β β β e)) where Ξ β β ββ¨ β -involutive Ξ β© Ξ β + iββ : {A B : Obj} β iβ {A} {B} β β Οβ + iββ = begin + iβ β ββ¨ β¨ Οββ β©β β¨ + Οβ β β ββ¨ β -involutive Οβ β© + Οβ β + + iββ : {A B : Obj} β iβ {A} {B} β β Οβ + iββ = begin + iβ β ββ¨ β¨ Οββ β©β β¨ + Οβ β β ββ¨ β -involutive Οβ β© + Οβ β + + module _ {A B C : Obj} where + + Ξ±ββ : assocΛ‘ {A} {B} {C} β β assocΚ³ + Ξ±ββ = begin + β¨ Οβ β Οβ , β¨ Οβ β Οβ , Οβ β© β© β ββ¨ β¨β©-β β© + [ (Οβ β Οβ) β , β¨ Οβ β Οβ , Οβ β© β ] ββ¨ []-congβ β -homomorphism β¨β©-β β© + [ Οβ β β Οβ β , [ (Οβ β Οβ) β , Οβ β ] ] ββ¨ []-congΛ‘ ([]-congΚ³ β -homomorphism) β© + [ Οβ β β Οβ β , [ Οβ β β Οβ β , Οβ β ] ] ββ¨ []-congβ (Οββ β©ββ¨ Οββ ) ([]-congβ (Οββ β©ββ¨ Οββ ) Οββ ) β© + [ iβ β iβ , [ iβ β iβ , iβ ] ] ββ¨ assocΚ³β+-assocΚ³ β¨ + assocΚ³ β + + Ξ±ββ : assocΚ³ {A} {B} {C} β β assocΛ‘ + Ξ±ββ = begin + assocΚ³ β ββ¨ β¨ Ξ±ββ β©β β¨ + assocΛ‘ β β ββ¨ β -involutive assocΛ‘ β© + assocΛ‘ β + + swapβ : {A B : Obj} β swap {A} {B} β β swap {B} {A} + swapβ {A} {B} = begin + β¨ Οβ , Οβ β© β ββ¨ β¨β©-β β© + [ Οβ β , Οβ β ] ββ¨ []-congβ Οββ Οββ β© + [ iβ , iβ ] ββ¨ swapβ+-swap β¨ + β¨ Οβ , Οβ β© β + β -resp-Γβ : {A B C D : Obj} {f : A β B} {g : C β D} β (f Γβ g) β β (f β ) Γβ (g β ) β -resp-Γβ {f = f} {g} = begin β¨ f β Οβ , g β Οβ β© β ββ¨ β¨β©-β β© @@ -77,6 +123,21 @@ record SemiadditiveDagger : Set (suc (o β β β e)) where id β f β h + id β g β h ββ¨ +-cong (pullΛ‘ identityΛ‘) (pullΛ‘ identityΛ‘) β© f β h + g β h β + open SemiadditiveMonoidal semiadditive using (monoidal; symmetric) + + monoidalCategory : MonoidalCategory o β e + monoidalCategory = record + { U = π + ; monoidal = monoidal + } + + symmetricMonoidalCategory : SymmetricMonoidalCategory o β e + symmetricMonoidalCategory = record + { U = π + ; monoidal = monoidal + ; symmetric = symmetric + } + record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where field @@ -127,6 +188,41 @@ record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where (f + h) + (g + i) ββ¨ +-cong fβ€h gβ€i β© h + i β + Ξ-β : {X Y : Obj} β Ξ {X β Y} β Οββ β Ξ Γβ Ξ + Ξ-β {X} {Y} = begin + β¨ id , id β© ββ¨ β¨β©-congβ idΓβid idΓβid β¨ + β¨ id Γβ id , id Γβ id β© ββ¨ β¨β©-congβ (Γβ-congβ projectβ projectβ) (Γβ-congβ projectβ projectβ) β¨ + β¨ (Οβ β Ξ) Γβ (Οβ β Ξ) , (Οβ β Ξ) Γβ (Οβ β Ξ) β© ββ¨ β¨β©-congβ ΓββΓβ ΓββΓβ β¨ + β¨ Οβ Γβ Οβ β Ξ Γβ Ξ , Οβ Γβ Οβ β Ξ Γβ Ξ β© ββ¨ β¨β©β β¨ + Οββ β Ξ Γβ Ξ β + + β-β : {X Y : Obj} β β {X β Y} β β Γβ β β Οββ + β-β {X} {Y} = begin + [ id , id ] ββ¨ []-congβ idΓβid idΓβid β¨ + [ id Γβ id , id Γβ id ] ββ¨ []-congβ (Γβ-congβ injectβ injectβ) (Γβ-congβ injectβ injectβ) β¨ + [ (β β iβ) Γβ (β β iβ) , (β β iβ) Γβ (β β iβ) ] ββ¨ []-congβ ΓββΓβ ΓββΓβ β¨ + [ β Γβ β β iβ Γβ iβ , β Γβ β β iβ Γβ iβ ] ββ¨ β[] β¨ + β Γβ β β [ iβ Γβ iβ , iβ Γβ iβ ] ββ¨ reflβ©ββ¨ β¨β©-unique (β[] β []-congβ ΟββΓβ ΟββΓβ) (β[] β []-congβ ΟββΓβ ΟββΓβ) β¨ + β Γβ β β β¨ Οβ +β Οβ , Οβ +β Οβ β© ββ¨ reflβ©ββ¨ β¨β©-congβ (Γβ-+β Οβ Οβ) (Γβ-+β Οβ Οβ) β¨ + β Γβ β β Οββ β + + β€-resp-Γβ + : {A B C D : Obj} + {f h : A β B} + {g i : C β D} + β f β€ h + β g β€ i + β (f Γβ g) β€ (h Γβ i) + β€-resp-Γβ {f = f} {h} {g} {i} fβ€h gβ€i = begin + β β (f Γβ g) Γβ (h Γβ i) β Ξ ββ¨ reflβ©ββ¨ reflβ©ββ¨ Ξ-β β© + β β (f Γβ g) Γβ (h Γβ i) β Οββ β Ξ Γβ Ξ ββ¨ reflβ©ββ¨ extendΚ³ Οββ-Γβ β© + β β Οββ β (f Γβ h) Γβ (g Γβ i) β Ξ Γβ Ξ ββ¨ pushΛ‘ β-β β© + β Γβ β β Οββ β Οββ β (f Γβ h) Γβ (g Γβ i) β Ξ Γβ Ξ ββ¨ reflβ©ββ¨ cancelΛ‘ Οββ-Οββ β© + β Γβ β β (f Γβ h) Γβ (g Γβ i) β Ξ Γβ Ξ ββ¨ reflβ©ββ¨ ΓββΓβ β© + β Γβ β β (f Γβ h β Ξ) Γβ (g Γβ i β Ξ) ββ¨ ΓββΓβ β© + (β β f Γβ h β Ξ) Γβ (β β g Γβ i β Ξ) ββ¨ Γβ-congβ fβ€h gβ€i β© + h Γβ i β + β€-resp-β : {A B C : Obj} {f h : B β C} @@ -156,3 +252,160 @@ record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where β β Ξ ββ¨ reflβ©ββ¨ introΛ‘ idΓβid β© β β id Γβ id β Ξ ββ¨ idempotent β© id β + + dagger-2-poset : Dagger-2-Poset + dagger-2-poset = record + { 2-poset = record + { Obj = Obj + ; hom = Ξ» A B β record + { Carrier = A β B + ; _β_ = _β_ + ; _β€_ = _β€_ + ; isPartialOrder = record + { isPreorder = record + { isEquivalence = equiv + ; reflexive = Ξ» xβy β Equiv.trans (+-congΚ³ xβy) β€-refl + ; trans = β€-trans + } + ; antisym = β€-antisym + } + } + ; id = mkPosetHomo _ _ (Ξ» _ β id) (Ξ» _ β β€-refl) + ; β = mkPosetHomo _ _ (Ξ» (f , g) β f β g) (Ξ» (β€β , β€β) β β€-resp-β β€β β€β) + ; β-assoc = assoc + ; unitΛ‘ = identityΛ‘ + ; unitΚ³ = identityΚ³ + } + ; hasDagger = record + { _β = _β + ; β -identity = β -identity + ; β -homomorphism = β -homomorphism + ; β -resp-β = β¨_β©β + ; β -involutive = β -involutive + } + ; β -resp-β€ = β -resp-β€ + } + + maps : Category o (β β e) e + maps = Maps dagger-2-poset + + open Dagger-2-Poset dagger-2-poset using (category) + open SemiadditiveMonoidal semiadditive using (monoidal) + + module M = Monoidal monoidal + + Γβ-functional + : {A B C D : Obj} + {f : A β B} + {g : C β D} + β (f β f β ) β€ id + β (g β g β ) β€ id + β (f Γβ g β (f Γβ g) β ) β€ id + Γβ-functional {f = f} {g} fβfβ β€id gβgβ β€id = begin + f Γβ g β (f Γβ g) β + id ββ¨ +-congΚ³ (reflβ©ββ¨ β -resp-Γβ) β© + f Γβ g β (f β ) Γβ (g β ) + id ββ¨ +-cong ΓββΓβ (Equiv.sym idΓβid) β© + (f β f β ) Γβ (g β g β ) + id Γβ id ββ¨ β€-resp-Γβ fβfβ β€id gβgβ β€id β© + id Γβ id ββ¨ idΓβid β© + id β + + Γβ-entire + : {A B C D : Obj} + {f : A β B} + {g : C β D} + β id β€ (f β β f) + β id β€ (g β β g) + β id β€ ((f Γβ g) β β f Γβ g) + Γβ-entire {f = f} {g} idβ€fβ βf idβ€gβ βg = begin + id + (f Γβ g) β β (f Γβ g) ββ¨ +-congΛ‘ (β -resp-Γβ β©ββ¨refl) β© + id + (f β ) Γβ (g β ) β f Γβ g ββ¨ +-cong (Equiv.sym idΓβid) ΓββΓβ β© + id Γβ id + (f β β f) Γβ (g β β g) ββ¨ β€-resp-Γβ idβ€fβ βf idβ€gβ βg β© + (f β β f) Γβ (g β β g) ββ¨ ΓββΓβ β¨ + (f β ) Γβ (g β ) β f Γβ g ββ¨ β -resp-Γβ β©ββ¨refl β¨ + (f Γβ g) β β f Γβ g β + + open Map + + β : Bifunctor maps maps maps + β = record + { Fβ = M.β.β + ; Fβ = Ξ» (f , g) β record + { map = map f M.ββ map g + ; isMap = record + { functional = Γβ-functional (functional f) (functional g) + ; entire = Γβ-entire (entire f) (entire g) + } + } + ; identity = M.β.identity + ; homomorphism = M.β.homomorphism + ; F-resp-β = M.β.F-resp-β + } + + open Morphism maps using (_β
_) + open Equiv + + Ξ»β-unitary : {X : Obj} β Iso category (Οβ {π} {X}) (Οβ β ) + Ξ»β-unitary = record { Iso (Iso-resp-β M.unitorΛ‘.iso refl (sym Οββ )) } + + Ξ»β-unitary : {X : Obj} β Iso category (iβ {π} {X}) (iβ β ) + Ξ»β-unitary = record { Iso (Iso-swap (Iso-resp-β M.unitorΛ‘.iso (sym iββ ) refl)) } + + Οβ-unitary : {X : Obj} β Iso category (Οβ {X} {π}) (Οβ β ) + Οβ-unitary = record { Iso (Iso-resp-β M.unitorΚ³.iso refl (sym Οββ )) } + + Οβ-unitary : {X : Obj} β Iso category (iβ {X} {π}) (iβ β ) + Οβ-unitary = record { Iso (Iso-swap (Iso-resp-β M.unitorΚ³.iso (sym iββ ) refl)) } + + Ξ±β-unitary : {X Y Z : Obj} β Iso category (assocΛ‘ {X} {Y} {Z}) (assocΛ‘ β ) + Ξ±β-unitary = record { Iso (Iso-resp-β M.associator.iso refl (sym Ξ±ββ )) } + + Ξ±β-unitary : {X Y Z : Obj} β Iso category (assocΚ³ {X} {Y} {Z}) (assocΚ³ β ) + Ξ±β-unitary = record { Iso (Iso-swap (Iso-resp-β M.associator.iso (sym Ξ±ββ ) refl)) } + + unitorΛ‘ : {X : Obj} β π M.ββ X β
X + unitorΛ‘ = record + { from = record + { map = M.unitorΛ‘.from + ; isMap = unitary-isMap dagger-2-poset Ξ»β-unitary + } + ; to = record + { map = M.unitorΛ‘.to + ; isMap = unitary-isMap dagger-2-poset Ξ»β-unitary + } + ; iso = record { M.unitorΛ‘ } + } + + unitorΚ³ : {X : Obj} β X M.ββ π β
X + unitorΚ³ = record + { from = record + { map = M.unitorΚ³.from + ; isMap = unitary-isMap dagger-2-poset Οβ-unitary + } + ; to = record + { map = M.unitorΚ³.to + ; isMap = unitary-isMap dagger-2-poset Οβ-unitary + } + ; iso = record { M.unitorΚ³ } + } + + associator : {X Y Z : Obj} β (X M.ββ Y) M.ββ Z β
X M.ββ (Y M.ββ Z) + associator = record + { from = record + { map = M.associator.from + ; isMap = unitary-isMap dagger-2-poset Ξ±β-unitary + } + ; to = record + { map = M.associator.to + ; isMap = unitary-isMap dagger-2-poset Ξ±β-unitary + } + ; iso = record { M.associator } + } + + maps-monoidal : Monoidal maps + maps-monoidal = record + { β = β + ; unit = π + ; unitorΛ‘ = unitorΛ‘ + ; unitorΚ³ = unitorΚ³ + ; associator = associator + ; M + } |
