diff options
| -rw-r--r-- | Category/BinaryBiproducts.agda | 6 | ||||
| -rw-r--r-- | Category/Dagger/Semiadditive.agda | 507 | ||||
| -rw-r--r-- | Category/Semiadditive.agda | 20 | ||||
| -rw-r--r-- | Data/Matrix/Dagger-2-Poset.agda | 34 | ||||
| -rw-r--r-- | Data/Matrix/SemiadditiveDagger.agda | 430 |
5 files changed, 312 insertions, 685 deletions
diff --git a/Category/BinaryBiproducts.agda b/Category/BinaryBiproducts.agda index 5b59df4..790c73a 100644 --- a/Category/BinaryBiproducts.agda +++ b/Category/BinaryBiproducts.agda @@ -54,6 +54,12 @@ record BinaryBiproducts : Set (levelOfTerm π) where open β-Reasoning π open HomReasoning + Γβ-congΛ‘ : {A B C D : Obj} β {f : A β B} {g h : C β D} β g β h β f Γβ g β f Γβ h + Γβ-congΛ‘ gβh = Γβ-congβ Equiv.refl gβh + + Γβ-congΚ³ : {A B C D : Obj} β {f g : A β B} {h : C β D} β f β g β f Γβ h β g Γβ h + Γβ-congΚ³ fβg = Γβ-congβ fβg Equiv.refl + ΟβiββΟβiβ : {A B : Obj} β Οβ β iβ β ΟβΒ {A} {B} β iβ ΟβiββΟβiβ {A} {B} = begin Οβ β iβ ββ¨ identityΚ³ β¨ diff --git a/Category/Dagger/Semiadditive.agda b/Category/Dagger/Semiadditive.agda index e8a9b39..a5b03ab 100644 --- a/Category/Dagger/Semiadditive.agda +++ b/Category/Dagger/Semiadditive.agda @@ -5,446 +5,77 @@ open import Categories.Category using (Category) module Category.Dagger.Semiadditive {o β e : Level} (π : Category o β e) where -import Categories.Category.Monoidal.Reasoning as β-Reasoning -import Categories.Morphism.Reasoning as β-Reasoning +import Categories.Morphism.Reasoning π as β-Reasoning -open import Categories.Category.BinaryProducts π using (BinaryProducts) -open import Categories.Category.Cartesian π using (Cartesian) -open import Categories.Category.Cartesian.Monoidal using (module CartesianMonoidal) -open import Categories.Category.Cocartesian π using (Cocartesian) -open import Categories.Category.Cocartesian.Monoidal using (module CocartesianMonoidal) -open import Categories.Category.Cocartesian.SymmetricMonoidal using (module CocartesianSymmetricMonoidal) open import Categories.Category.Dagger using (HasDagger) -open import Categories.Category.Monoidal using (Monoidal) -open import Categories.Category.Monoidal.Symmetric using (module Symmetric) -open import Categories.Category.Monoidal.Symmetric.Properties using () renaming (module Shorthands to Ο-Shorthands) -open import Categories.Category.Monoidal.Utilities using (module Shorthands) -open import Categories.Functor using (Functor) -open import Categories.Object.Duality using (CoproductβcoProduct) -open import Categories.Object.Terminal π using (Terminal) +open import Category.Semiadditive using (Semiadditive) open import Relation.Binary using (Rel) -record DaggerCocartesianMonoidal : Set (suc (o β β β e)) where +record SemiadditiveDagger : Set (suc (o β β β e)) where field - cocartesian : Cocartesian + semiadditive : Semiadditive π dagger : HasDagger π - open Cocartesian cocartesian using (iβ; iβ) renaming (_+β_ to _ββ_) - open CocartesianMonoidal cocartesian using (+-monoidal) - open CocartesianSymmetricMonoidal π cocartesian using (+-symmetric) - open HasDagger dagger using (_β ; isUnitary; isSelfAdjoint) - open Shorthands +-monoidal using (Ξ»β; Ξ»β; Οβ; Οβ; Ξ±β; Ξ±β) - open Ο-Shorthands +-symmetric using (Οβ) open Category π - - -- dagger and cocartesian monoidal structure are compatible - field - Ξ»β
β : {A : Obj} β Ξ»β {A} β β Ξ»β - Οβ
β : {A : Obj} β Οβ {A} β β Οβ - Ξ±β
β : {A B C : Obj} β Ξ±β {A} {B} {C} β β Ξ±β - Οβ
β : {A B : Obj} β Οβ {A} {B} β β Οβ - β -resp-β : {A B C D : Obj} {f : A β B} {g : C β D} β (f ββ g) β β (f β ) ββ (g β ) - -record SemiadditiveDagger : Set (suc (o β β β e)) where + open HasDagger dagger public + open Semiadditive semiadditive public field - daggerCocartesianMonoidal : DaggerCocartesianMonoidal - - open DaggerCocartesianMonoidal daggerCocartesianMonoidal public - open Cocartesian cocartesian using ([]β+-assocΚ³; []β+-swap) renaming (_+_ to _ββ_; _+β_ to infixr 10 _ββ_; -+- to β) public - open CocartesianMonoidal cocartesian using (+-monoidal) public - open Cocartesian cocartesian using (iβ; iβ; Β‘) public - open Cocartesian cocartesian using (β₯; [_,_]; β[]; []β+β; []-congΛ‘; []-congβ; coproduct; Β‘-unique; injectβ; injectβ; +-unique; +-Ξ·) renaming (ββ+β to β½β+β) - open CocartesianSymmetricMonoidal π cocartesian using (+-symmetric) - open HasDagger dagger using (_β ; β -involutive; β¨_β©β ; β -identity; β -homomorphism) public - open Monoidal +-monoidal using (unitorΛ‘-commute-from; unitorΚ³-commute-from; assoc-commute-from; module unitorΛ‘; module unitorΚ³; module associator) - open Ο-Shorthands +-symmetric using (Οβ) - open Symmetric +-symmetric using (module braiding) - open Shorthands +-monoidal using (Ξ»β; Ξ»β; Οβ; Οβ; Ξ±β; Ξ±β) - open Category π - - module β = Functor β - - -- projection maps - pβ : {A B : Obj} β A ββ B β A - pβ = iβ β - - pβ : {A B : Obj} β A ββ B β B - pβ = iβ β - - -- codiagonal - β½ : {A : Obj} β A ββ A β A - β½ = [ id , id ] - - -- diagonal - β³ : {A : Obj} β A β A ββ A - β³ = β½ β - - open β-Reasoning +-monoidal - open β-Reasoning π - - β½-assoc : {A : Obj} β β½ {A} β β½ ββ id β β½ β id ββ β½ β Ξ±β - β½-assoc = begin - [ id , id ] β [ id , id ] ββ id ββ¨ []β+β β© - [ id β [ id , id ] , id β id ] ββ¨ []-congβ identityΛ‘ identityΛ‘ β© - [ [ id , id ] , id ] ββ¨ []β+-assocΚ³ β¨ - [ id , [ id , id ] ] β Ξ±β ββ¨ []-congβ identityΛ‘ identityΛ‘ β©ββ¨refl β¨ - [ id β id , id β [ id , id ] ] β Ξ±β ββ¨ pushΛ‘ (Equiv.sym []β+β) β© - [ id , id ] β id ββ [ id , id ] β Ξ±β β - - β³-assoc : {A : Obj} β id ββ β³ β β³ {A} β Ξ±β β β³ ββ id β β³ - β³-assoc = begin - id ββ β³ β β³ ββ¨ β -involutive (id ββ β³ β β³) β¨ - (id ββ β³ β β³) β β ββ¨ β¨ β -homomorphism β©β β© - (β³ β β (id ββ β³) β ) β ββ¨ β¨ (β -involutive β½ β©ββ¨ β -resp-β) β©β β© - (β½ β (id β ) ββ (β³ β )) β ββ¨ β¨ reflβ©ββ¨ β -identity β©ββ¨ β -involutive β½ β©β β© - (β½ β id ββ β½) β ββ¨ β¨ reflβ©ββ¨ introΚ³ associator.isoΚ³ β©β β© - (β½ β id ββ β½ β Ξ±β β Ξ±β) β ββ¨ β¨ reflβ©ββ¨ assoc β©β β¨ - (β½ β (id ββ β½ β Ξ±β) β Ξ±β) β ββ¨ β¨ extendΚ³ β½-assoc β©β β¨ - (β½ β β½ ββ id β Ξ±β) β ββ¨ β -homomorphism β© - (β½ ββ id β Ξ±β) β β β½ β ββ¨ pushΛ‘ β -homomorphism β© - Ξ±β β β (β½ ββ id) β β β³ ββ¨ β¨ Ξ±β
β β©β β©ββ¨refl β¨ - Ξ±β β β β (β½ ββ id) β β β³ ββ¨ β -involutive Ξ±β β©ββ¨refl β© - Ξ±β β (β½ ββ id) β β β³ ββ¨ reflβ©ββ¨ β -resp-β β©ββ¨refl β© - Ξ±β β (β½ β ) ββ (id β ) β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ β -identity β©ββ¨refl β© - Ξ±β β β³ ββ id β β³ β - - ! : {A : Obj} β A β β₯ - ! = Β‘ β - - β½-identityΛ‘ : {A : Obj} β β½ {A} β Β‘ ββ id β Ξ»β - β½-identityΛ‘ = begin - [ id , id ] β Β‘ ββ id ββ¨ []β+β β© - [ id β Β‘ , id β id ] ββ¨ []-congβ identityΛ‘ identityΒ² β© - [ Β‘ , id ] β - - β³-identityΛ‘ : {A : Obj} β ! {A} ββ id β β³ β Ξ»β - β³-identityΛ‘ = begin - ! ββ id β β³ ββ¨ reflβ©ββ¨ β -identity β©ββ¨refl β¨ - (Β‘ β ) ββ (id β ) β β½ β ββ¨ β -resp-β β©ββ¨refl β¨ - (Β‘ ββ id) β β β½ β ββ¨ β -homomorphism β¨ - (β½ β Β‘ ββ id) β ββ¨ β¨ β½-identityΛ‘ β©β β© - Ξ»β β ββ¨ Ξ»β
β β© - Ξ»β β - - β½-identityΚ³ : {A : Obj} β β½ {A} β id ββ Β‘ β Οβ - β½-identityΚ³ = begin - [ id , id ] β id ββ Β‘ ββ¨ []β+β β© - [ id β id , id β Β‘ ] ββ¨ []-congβ identityΒ² identityΛ‘ β© - [ id , Β‘ ] β - - β³-identityΚ³ : {A : Obj} β id {A} ββ ! β β³ β Οβ - β³-identityΚ³ = begin - id ββ (Β‘ β ) β β½ β ββ¨ β -identity β©ββ¨refl β©ββ¨refl β¨ - (id β ) ββ (Β‘ β ) β β½ β ββ¨ β -resp-β β©ββ¨refl β¨ - (id ββ Β‘) β β β½ β ββ¨ β -homomorphism β¨ - (β½ β id ββ Β‘) β ββ¨ β¨ β½-identityΚ³ β©β β© - Οβ β ββ¨ Οβ
β β© - ΟβΒ β - - β½-comm : {A : Obj} β β½ {A} β Οβ β β½ - β½-comm = []β+-swap - - β³-comm : {A : Obj} β Οβ β β³ {A} β β³ - β³-comm = begin - Οβ β β½ β ββ¨ Οβ
β β©ββ¨refl β¨ - Οβ β β β½ β ββ¨ β -homomorphism β¨ - (β½ β Οβ) β ββ¨ β¨ β½-comm β©β β© - β½ β β - - ββ½ : {A B : Obj} {f : A β B} β f β β½ β β½ β f ββ f - ββ½ {A} {B} {f} = begin - f β [ id , id ] ββ¨ β[] β© - [ f β id , f β id ] ββ¨ []-congβ identityΚ³ identityΚ³ β© - [ f , f ] ββ¨ []-congβ identityΛ‘ identityΛ‘ β¨ - [ id β f , id β f ] ββ¨ []β+β β¨ - [ id , id ] β f ββ f β - - ββ³ : {A B : Obj} {f : A β B} β β³ β f β f ββ f β β³ - ββ³ {A} {B} {f} = begin - β½ β β f ββ¨ reflβ©ββ¨ β -involutive f β¨ - β½ β β f β β ββ¨ β -homomorphism β¨ - (f β β β½) β ββ¨ β¨ ββ½ β©β β© - (β½ β (f β ) ββ (f β )) β ββ¨ β -homomorphism β© - ((f β ) ββ (f β )) β β β½ β ββ¨ β -resp-β β©ββ¨refl β© - (f β β ) ββ (f β β ) β β½ β ββ¨ β -involutive f β©ββ¨ β -involutive f β©ββ¨refl β© - f ββ f β β½ β β - - βΒ‘ : {A B : Obj} {f : A β B} β f β Β‘ β Β‘ - βΒ‘ {A} {B} {f} = Equiv.sym (Β‘-unique (f β Β‘)) - - β! : {A B : Obj} {f : A β B} β ! β f β ! - β! {A} {B} {f} = begin - Β‘ β β f ββ¨ reflβ©ββ¨ β -involutive f β¨ - Β‘ β β f β β ββ¨ β -homomorphism β¨ - (f β β Β‘) β ββ¨ β¨ βΒ‘ β©β β© - Β‘ β β - - Οββiβ : {A : Obj} β Οβ {A} β iβ - Οββiβ = Equiv.refl - - Ξ»ββiβ : {A : Obj} β Ξ»β {A} β iβ - Ξ»ββiβ = Equiv.refl - - Ξ»ββpβ : {A : Obj} β Ξ»β {A} β pβ - Ξ»ββpβ = begin - Ξ»β ββ¨ β -involutive Ξ»β β¨ - Ξ»β β β ββ¨ β¨ Ξ»β
β β©β β© - Ξ»β β ββ¨ β¨ Ξ»ββiβ β©β β© - iβ β β - - Οββpβ : {A : Obj} β Οβ {A} β pβ - Οββpβ = begin - Οβ ββ¨ β -involutive Οβ β¨ - Οβ β β ββ¨ β¨ Οβ
β β©β β© - Οβ β ββ¨ β¨ Οββiβ β©β β© - iβ β β - - iβ-β : {A B : Obj} β iβ {A} {B} β id ββ Β‘ β Οβ - iβ-β = begin - iβ ββ¨ identityΚ³Β β¨ - iβ β id ββ¨ injectβ β¨ - id ββ Β‘ β iβ ββ¨ reflβ©ββ¨ Οββiβ β¨ - id ββ Β‘ β Οβ β - - iβ-β : {A B : Obj} β iβ {A} {B} β Β‘ ββ id β Ξ»β - iβ-β = begin - iβ ββ¨ identityΚ³ β¨ - iβ β id ββ¨ injectβ β¨ - Β‘ ββ id β iβ ββ¨ reflβ©ββ¨ Ξ»ββiβ β¨ - Β‘ ββ id β Ξ»β β - - pβ-β : {A B : Obj} β pβ {A} {B} β Οβ β id ββ ! - pβ-β {A} {B} = begin - iβ β ββ¨ β¨ iβ-β β©β β© - (id ββ Β‘ β Οβ) β ββ¨ β -homomorphism β© - Οβ β β (id ββ Β‘) β ββ¨ reflβ©ββ¨ β -resp-β β© - Οβ β β (id β ) ββ (Β‘ β ) ββ¨ β¨ Οβ
β β©β β©ββ¨refl β¨ - Οβ β β β (id β ) ββ (Β‘ β ) ββ¨ β -involutive Οβ β©ββ¨ β -identity β©ββ¨refl β© - Οβ β id ββ (Β‘ β ) β - - pβ-β : {A B : Obj} β pβ {A} {B} β Ξ»β β ! ββ id - pβ-β {A} {B} = begin - iβ β ββ¨ β¨ iβ-β β©β β© - (Β‘ ββ id β Ξ»β) β ββ¨ β -homomorphism β© - Ξ»β β β (Β‘ ββ id) β ββ¨ reflβ©ββ¨ β -resp-β β© - Ξ»β β β (Β‘ β ) ββ (id β ) ββ¨ β¨ Ξ»β
β β©β β©ββ¨refl β¨ - Ξ»β β β β (Β‘ β ) ββ (id β ) ββ¨ β -involutive Ξ»β β©ββ¨ reflβ©ββ¨ β -identity β© - Ξ»β β (Β‘ β ) ββ id β - - β½βiβ : {A : Obj} β β½ β iβ β id {A} - β½βiβ = begin - β½ β iβ ββ¨ reflβ©ββ¨ iβ-β β© - β½ β id ββ Β‘ β Οβ ββ¨ pullΛ‘ β½-identityΚ³ β© - Οβ β Οβ ββ¨ unitorΚ³.isoΚ³ β© - id β - - β½βiβ : {A : Obj} β β½ β iβ β id {A} - β½βiβ = begin - β½ β iβ ββ¨ reflβ©ββ¨ iβ-β β© - β½ β Β‘ ββ id β Ξ»β ββ¨ pullΛ‘ β½-identityΛ‘ β© - Ξ»β β Ξ»β ββ¨ unitorΛ‘.isoΚ³ β© - id β - - pβββ³ : {A : Obj} β pβ β β³ β id {A} - pβββ³ = begin - pβ β β³ ββ¨ pushΛ‘ pβ-β β© - Οβ β id ββ ! β β³ ββ¨ reflβ©ββ¨ β³-identityΚ³ β© - Οβ β Οβ ββ¨ unitorΚ³.isoΚ³ β© - id β - - pβββ³ : {A : Obj} β pβ β β³ β id {A} - pβββ³ = begin - pβ β β³ ββ¨ pushΛ‘ pβ-β β© - Β Ξ»β β ! ββ id β β³ ββ¨ reflβ©ββ¨ β³-identityΛ‘ β© - Β Ξ»β βΒ Ξ»β ββ¨ unitorΛ‘.isoΚ³ β© - id β - - -- zero arrows - z : {A B : Obj} β A β B - z = ‘ β ! - - field - -- orthogonality conditions: pα΅’iβ±ΌΒ β Ξ΄α΅’β±Ό - pβ-iβ : {A B : Obj} β pβ {A} {B} β iβ β id {A} - pβ-iβ : {A B : Obj} β pβ {A} {B} β iβ β id {B} - pβ-iβ : {A B : Obj} β pβ {A} {B} β iβ β z {A} {B} - pβ-iβ : {A B : Obj} β pβ {A} {B} β iβ β z {B} {A} - - -- commutative monoid structure on homs - module _ {A B : Obj} where - - _+_ : A β B β A β B β A β B - _+_ f g = β½ β f ββ g β β³ - - infixl 6 _+_ - - +-associative : {f g h : A β B} β (f + g) + h β f + (g + h) - +-associative {f} {g} {h} = begin - β½ β (β½ β f ββ g β β³) ββ h β β³ ββ¨ reflβ©ββ¨ pushΛ‘ splitβΛ‘ β© - β½ β β½ ββ id β (f ββ g β β³) ββ h β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ pushΛ‘ splitβΚ³ β© - β½ β β½ ββ id β (f ββ g) ββ h β β³ ββ id β β³ ββ¨ extendΚ³ β½-assoc β© - β½ β (id ββ β½ β Ξ±β) β (f ββ g) ββ h β β³ ββ id β β³ ββ¨ reflβ©ββ¨ pullΚ³ (extendΚ³ assoc-commute-from) β© - β½ β id ββ β½ β f ββ g ββ h β Ξ±β β β³ ββ id β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ β³-assoc β¨ - β½ β id ββ β½ β f ββ g ββ h β id ββ β³ β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ pullΛ‘ mergeβΚ³ β© - β½ β id ββ β½ β f ββ (g ββ h β β³) β β³ ββ¨ reflβ©ββ¨ pullΛ‘ mergeβΛ‘ β© - β½ β f ββ (β½ β g ββ h β β³) β β³ β - - +-identityΛ‘ : {f : A β B} β z + f β f - +-identityΛ‘ {f} = begin - β½ β (Β‘ β !) ββ f β β³ ββ¨ reflβ©ββ¨ pushΛ‘ splitβΛ‘ β© - β½ β Β‘ ββ id β ! ββ f β β³ ββ¨ pullΛ‘ β½-identityΛ‘ β© - Ξ»β β ! ββ f β β³ ββ¨ reflβ©ββ¨ pushΛ‘ serializeββ β© - Ξ»β β id ββ f β ! ββ id β β³ ββ¨ extendΚ³ unitorΛ‘-commute-from β© - f β Ξ»β β ! ββ id β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨Β β³-identityΛ‘ β© - f β Ξ»β β Ξ»β ββ¨ elimΚ³ unitorΛ‘.isoΚ³ β© - f β - - +-identityΚ³ : {f : A β B} β f + z β f - +-identityΚ³ {f} = begin - β½ β f ββ (Β‘ β !) β β³ ββ¨ reflβ©ββ¨ pushΛ‘ splitβΛ‘ β© - β½ β id ββ Β‘ β (f ββ !) β β³ ββ¨ pullΛ‘ β½-identityΚ³ β© - Οβ β f ββ ! β β³ ββ¨ reflβ©ββ¨ pushΛ‘ serializeββ β© - Οβ β f ββ id β id ββ ! β β³ ββ¨ extendΚ³ unitorΚ³-commute-from β© - f β Οβ β id ββ ! β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ β³-identityΚ³ β© - f β Οβ β Οβ ββ¨ elimΚ³ unitorΚ³.isoΚ³ β© - f β - - +-commutative : {f g : A β B} β f + g β g + f - +-commutative {f} {g} = begin - β½ β f ββ g β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ β³-comm β¨ - β½ β f ββ g β Οβ β β³ ββ¨ reflβ©ββ¨ extendΚ³ (braiding.β.sym-commute _) β© - β½ β Οβ β g ββ f β β³ ββ¨ pullΛ‘ β½-comm β© - β½ β g ββ f β β³ β - - +-cong : {f g h i : A β B} β f β h β g β i β f + g β h + i - +-cong fβh gβi = reflβ©ββ¨ fβh β©ββ¨ gβi β©ββ¨refl - - +-congΛ‘ : {f g i : A β B} β g β i β f + g β f + i - +-congΛ‘ gβi = +-cong Equiv.refl gβi - - +-congΚ³ : {f g h : A β B} β f β h β f + g β h + g - +-congΚ³ fβh = +-cong fβh Equiv.refl + Οββ : {A B : Obj} β Οβ {A} {B} β β iβ + Οββ : {A B : Obj} β Οβ {A} {B} β β iβ + β¨β©-β : {A B C : Obj} {f : A β B} {g : A β C} β β¨ f , g β© β β [ f β , g β ] + + open HomReasoning + open β-Reasoning + + Ξβ : {A : Obj} β Ξ {A} β β β + Ξβ = begin + β¨ id , id β© β ββ¨ β¨β©-β β© + [ id β , id β ] ββ¨ []-congβ β -identity β -identity β© + [ id , id ] β + + ββ : {A : Obj} β β {A} β β Ξ + ββ = begin + β β ββ¨ β¨ Ξβ β©β β¨ + Ξ β β ββ¨ β -involutive Ξ β© + Ξ β + + β -resp-Γβ : {A B C D : Obj} {f : A β B} {g : C β D} β (f Γβ g) β β (f β ) Γβ (g β ) + β -resp-Γβ {f = f} {g} = begin + β¨ f β Οβ , g β Οβ β© β ββ¨ β¨β©-β β© + [ (f β Οβ) β , (g β Οβ) β ] ββ¨ []-congβ β -homomorphism β -homomorphism β© + [ Οβ β β f β , Οβ β β g β ] ββ¨ []-congβ (Οββ β©ββ¨refl) (Οββ β©ββ¨refl) β© + [ iβ β f β , iβ β g β ] ββ¨ Γβ-+β (f β ) (g β ) β¨ + β¨ f β β Οβ , g β β Οβ β© β + + +-congΛ‘ : {A B : Obj} {f g h : A β B} β g β h β f + g β f + h + +-congΛ‘ gβh = +-cong Equiv.refl gβh + + +-congΚ³ : {A B : Obj} {f g h : A β B} β f β g β f + h β g + h + +-congΚ³ fβg = +-cong fβg Equiv.refl +-β : {A B : Obj} {f g : A β B} β (f + g) β β (f β ) + (g β ) +-β {f = f} {g} = begin - (β½ β f ββ g β β³) β ββ¨ β -homomorphism β© - (f ββ g β β³) β β β½ β ββ¨ pushΛ‘ β -homomorphism β© - β³ β β (f ββ g) β β β½ β ββ¨ β -involutive β½ β©ββ¨refl β© - β½ β (f ββ g) β β β³ ββ¨ reflβ©ββ¨ β -resp-β β©ββ¨refl β© - β½ β (f β ) ββ (g β ) β β³ β + (β β f Γβ g β Ξ) β ββ¨ β -homomorphism β© + (f Γβ g β Ξ) β β β β ββ¨ pushΛ‘ β -homomorphism β© + Ξ β β (f Γβ g) β β β β ββ¨ Ξβ β©ββ¨ β -resp-Γβ β©ββ¨ ββ β© + β β (f β ) Γβ (g β ) β Ξ β -- bilinearity of composition β-distribΛ‘ : {A B C : Obj} {f : B β C} {g h : A β B} β f β (g + h) β f β g + f β h β-distribΛ‘ {f = f} {g} {h} = begin - f β β½ β g ββ h β β³ ββ¨ extendΚ³ ββ½ β© - β½ β f ββ f β g ββ h β β³ ββ¨ reflβ©ββ¨ pullΛ‘ (Equiv.sym β-distrib-over-β) β© - β½ β (f β g) ββ (f β h) β β³ β + f β (g + h) ββ¨ reflβ©ββ¨ identityΚ³ β¨ + f β (g + h) β id ββ¨ +-resp-β β© + f β g β id + f β h β id ββ¨ +-cong (reflβ©ββ¨ identityΚ³) (reflβ©ββ¨ identityΚ³) β© + f β g + f β h β β-distribΚ³ : {A B C : Obj} {f g : B β C} {h : A β B} β (f + g) β h β f β h + g β h β-distribΚ³ {f = f} {g} {h} = begin - (β½ β f ββ g β β³) β h ββ¨ pullΚ³ (pullΚ³ ββ³) β© - β½ β f ββ g β h ββ h β β³ ββ¨ reflβ©ββ¨ pullΛ‘ (Equiv.sym β-distrib-over-β) β© - β½ β (f β h) ββ (g β h) β β³ β - - terminal : Terminal - terminal = record - { β€ = β₯ - ; β€-is-terminal = record - { ! = ! - ; !-unique = Ξ» f β β¨ Β‘-unique (f β ) β©β β β -involutive f - } - } - - β½βiββiβ : {A B : Obj} β β½ β iβ ββ iβ β id {A ββ B} - β½βiββiβ = begin - β½ β iβ ββ iβ ββ¨ []β+β β© - [ id β iβ , id β iβ ] ββ¨ []-congβ identityΛ‘ identityΛ‘ β© - [ iβ , iβ ] ββ¨ +-Ξ· β© - id β - - pββpβββ³ : {A B : Obj} β pβ ββ pβ β β³ β id {A ββ B} - pββpβββ³ = begin - (iβ β ) ββ (iβ β ) β β½ β ββ¨ β -resp-β β©ββ¨refl β¨ - (iβ ββ iβ) β β β½ β ββ¨ β -homomorphism β¨ - (β½ β iβ ββ iβ) β ββ¨ β¨ β½βiββiβ β©β β© - id β ββ¨ β -identity β© - id β - - products : BinaryProducts - products = record - { product = Ξ» {A B} β record - { AΓB = A ββ B - ; Οβ = pβ - ; Οβ = pβ - ; β¨_,_β© = Ξ» f g β f ββ g β β³ - ; projectβ = projβ - ; projectβ = projβ - ; unique = uniq - } - } - where - module _ {A B X : Obj} where - module _ {h : X β A} {i : X β B} where - projβ : pβ β h ββ i β β³ β h - projβ = begin - pβ β h ββ i β β³ ββ¨ pushΛ‘ pβ-β β© - Οβ β id ββ ! β h ββ i β β³ ββ¨ reflβ©ββ¨ pullΛ‘ mergeβΛ‘ β© - Οβ β h ββ (! β i) β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ β! β©ββ¨refl β© - Οβ β h ββ ! β β³ ββ¨ reflβ©ββ¨ pushΛ‘ serializeββ β© - Οβ β h ββ id β id ββ ! β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ β³-identityΚ³ β© - Οβ β h ββ id β Οβ ββ¨ extendΚ³ unitorΚ³-commute-from β© - h β Οβ β Οβ ββ¨ elimΚ³ unitorΚ³.isoΚ³ β© - h β - projβ : pβ β h ββ i β β³ β i - projβ = begin - pβ β h ββ i β β³ ββ¨ pushΛ‘ pβ-β β© - Ξ»β β ! ββ id β h ββ i β β³ ββ¨ reflβ©ββ¨ pullΛ‘ mergeβΛ‘ β© - Ξ»β β (! β h) ββ i β β³ ββ¨ reflβ©ββ¨ β! β©ββ¨refl β©ββ¨refl β© - Ξ»β β ! ββ i β β³ ββ¨ reflβ©ββ¨ pushΛ‘ serializeββ β© - Ξ»β β id ββ i β ! ββ id β β³ ββ¨ reflβ©ββ¨ reflβ©ββ¨ β³-identityΛ‘ β© - Ξ»β β id ββ i β Ξ»β ββ¨ extendΚ³ unitorΛ‘-commute-from β© - i β Ξ»β β Ξ»β ββ¨ elimΚ³ unitorΛ‘.isoΚ³ β© - i β - module _ {h : X β A ββ B} {i : X β A} {j : X β B} where - uniq : pβ β h β i β pβ β h β j β i ββ j β β³ β h - uniq pββhβi pββhβj = begin - i ββ j β β³ ββ¨ pββhβi β©ββ¨ pββhβj β©ββ¨refl β¨ - (pβ β h) ββ (pβ β h) β β³ ββ¨ pushΛ‘ β-distrib-over-β β© - pβ ββ pβ β h ββ h β β³ ββ¨ pushΚ³ (Equiv.sym ββ³) β© - (pβ ββ pβ β β³) β h ββ¨ elimΛ‘ pββpβββ³ β© - h β - - cartesian : Cartesian - cartesian = record - { terminal = terminal - ; products = products - } - - open Cartesian cartesian using (_Γβ_) - open CartesianMonoidal cartesian using (monoidal) - open Shorthands monoidal using () renaming (Ξ±β to Ξ±ββ²) - - Γβ-ββ : {A B C D : Obj} (f : A β B) (g : C β D) β f Γβ g β f ββ g - Γβ-ββ f g = begin - (f β pβ) ββ (g β pβ) β β³ ββ¨ pushΛ‘ β-distrib-over-β β© - f ββ g β pβ ββ pβ β β³ ββ¨ elimΚ³ pββpβββ³ β© - f ββ g β - - βΞ±β : {A B C : Obj} β Ξ±ββ² {A} {B} {C} β Ξ±β {A} {B} {C} - βΞ±β {A} {B} {C} = begin - (pβ β pβ) ββ ((pβ β pβ) ββ pβ β β³) β β³ ββ¨ reflβ©ββ¨ pushΛ‘ splitβΛ‘ β©ββ¨refl β© - (pβ β pβ) ββ ((pβ ββ id) β (pβ ββ pβ) β β³) β β³ ββ¨ reflβ©ββ¨ elimΚ³ pββpβββ³ β©ββ¨refl β© - (pβ β pβ) ββ (pβ ββ id) β β³ ββ¨ β -homomorphism β©ββ¨ (reflβ©ββ¨ β -identity ) β©ββ¨refl β¨ - ((iβ β iβ) β ) ββ (pβ ββ (id β )) β β³ ββ¨ reflβ©ββ¨ β -resp-β β©ββ¨refl β¨ - ((iβ β iβ) β ) ββ ((iβ ββ id) β ) β β³ ββ¨ β -resp-β β©ββ¨refl β¨ - ((iβ β iβ) ββ (iβ ββ id)) β β β³ ββ¨ β -homomorphism β¨ - (β½ β ((iβ β iβ) ββ (iβ ββ id))) β ββ¨ β¨ β½β+β β©β β© - [ iβ β iβ , iβ ββ id ] β ββ¨ β¨ []-congΛ‘ ([]-congΛ‘ identityΚ³) β©β β© - Ξ±β β ββ¨ β¨ Ξ±β
β β©β β¨ - Ξ±β β β ββ¨ β -involutive Ξ±β β© - Ξ±β β + (f + g) β h ββ¨ pushΛ‘ (Equiv.sym identityΛ‘) β© + id β (f + g) β h ββ¨ +-resp-β β© + id β f β h + id β g β h ββ¨ +-cong (pullΛ‘ identityΛ‘) (pullΛ‘ identityΛ‘) β© + f β h + g β h β record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where @@ -452,10 +83,10 @@ record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where semiadditiveDagger : SemiadditiveDagger open SemiadditiveDagger semiadditiveDagger public - open Category π - open β-Reasoning +-monoidal - open β-Reasoning π + open Category π + open HomReasoning + open β-Reasoning field idempotent : {A B : Obj} {f : AΒ β B} β f + f β f @@ -469,15 +100,15 @@ record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where β€-antisym : {A B : Obj} {f g : A β B} β f β€ g β g β€ f β f β g β€-antisym {A} {B} {f} {g} fβ€g gβ€f = begin f ββ¨ gβ€f β¨ - g + f ββ¨ +-commutative β© + g + f ββ¨ +-comm g f β© f + g ββ¨ fβ€g β© g β β€-trans : {A B : Obj} {f g h : A β B} β f β€ g β g β€ h β f β€ h β€-trans {A} {B} {f} {g} {h} fβ€g gβ€h = begin - f + h ββ¨ reflβ©ββ¨ reflβ©ββ¨ gβ€h β©ββ¨refl β¨ - f + (g + h) ββ¨ +-associative β¨ - (f + g) + h ββ¨ reflβ©ββ¨ fβ€g β©ββ¨refl β©ββ¨refl β© + f + h ββ¨ reflβ©ββ¨ Γβ-congΛ‘ gβ€h β©ββ¨refl β¨ + f + (g + h) ββ¨ +-assoc f g h β¨ + (f + g) + h ββ¨ reflβ©ββ¨ Γβ-congΚ³ fβ€g β©ββ¨refl β© g + h ββ¨ gβ€h β© h β @@ -488,12 +119,12 @@ record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where β g β€ i β (f + g) β€ (h + i) β€-resp-+ {f = f} {g} {h} {i} fβ€h gβ€i = begin - f + g + (h + i) ββ¨ +-associative β© - f + (g + (h + i)) ββ¨ +-congΛ‘ +-associative β¨ - f + (g + h + i) ββ¨ +-congΛ‘ (+-congΚ³ +-commutative) β© - f + (h + g + i) ββ¨ +-congΛ‘ +-associative β© - f + (h + (g + i)) ββ¨ +-associative β¨ - f + h + (g + i) ββ¨ +-cong fβ€h gβ€i β© + (f + g) + (h + i) ββ¨ +-assoc f g (h + i) β© + f + (g + (h + i)) ββ¨ +-congΛ‘ (+-assoc g h i) β¨ + f + ((g + h) + i) ββ¨ +-congΛ‘ (+-congΚ³ (+-comm g h)) β© + f + ((h + g) + i) ββ¨ +-congΛ‘ (+-assoc h g i) β© + f + (h + (g + i)) ββ¨ +-assoc f h (g + i) β¨ + (f + h) + (g + i) ββ¨ +-cong fβ€h gβ€i β© h + i β β€-resp-β @@ -506,8 +137,8 @@ record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where β€-resp-β {f = f} {h} {g} {i} fβ€h gβ€i = begin f β g + (h β i) ββ¨ +-congΛ‘ (fβ€h β©ββ¨refl) β¨ f β g + ((f + h) β i) ββ¨ +-congΛ‘ β-distribΚ³ β© - f β g + (f β i + h β i) ββ¨ +-associative β¨ - f β g + f β i + h β i ββ¨ +-congΚ³ β-distribΛ‘ β¨ + f β g + (f β i + h β i) ββ¨ +-assoc (f β g) (f β i) (h β i) β¨ + (f β g + f β i) + h β i ββ¨ +-congΚ³ β-distribΛ‘ β¨ f β (g + i) + h β i ββ¨ +-congΚ³ (reflβ©ββ¨ gβ€i) β© f β i + h β i ββ¨ β-distribΚ³ β¨ (f + h) β i ββ¨ fβ€h β©ββ¨refl β© @@ -520,8 +151,8 @@ record IdempotentSemiadditiveDagger : Set (suc (o β β β e)) where g β β -- special law - β½ββ³ : {A : Obj} β β½ β β³ β id {A} - β½ββ³ = begin - β½ β β³ ββ¨ reflβ©ββ¨ introΛ‘ β.identity β© - β½ β id ββ id β β³ ββ¨ idempotent β© + ββΞ : {A : Obj} β β β Ξ β id {A} + ββΞ = begin + β β Ξ ββ¨ reflβ©ββ¨ introΛ‘ idΓβid β© + β β id Γβ id β Ξ ββ¨ idempotent β© id β diff --git a/Category/Semiadditive.agda b/Category/Semiadditive.agda index e7afc0e..3e8dbc4 100644 --- a/Category/Semiadditive.agda +++ b/Category/Semiadditive.agda @@ -32,6 +32,20 @@ record Semiadditive : Set (levelOfTerm π) where module _ {A B : Obj} where + Οββiββ0 : Οβ {A} {B} β iβ β zeroβ + Οββiββ0 = begin + Οβ β iβ ββ¨ Οβiβ-absorbΛ‘ zeroβ β¨ + zeroβ {A} β Οβ β iβ ββ¨ zero-βΚ³ (Οβ β iβ) β© + zeroβ β + + Οββiββ0 : Οβ {A} {B} β iβ β zeroβ + Οββiββ0 = begin + Οβ β iβ ββ¨ Οβiβ-absorbΛ‘ zeroβ β¨ + zeroβ {A} β Οβ β iβ ββ¨ zero-βΚ³ (Οβ β iβ) β© + zeroβ β + + module _ {A B : Obj} where + _+_ _+β²_Β : A β B β A β B β A β B f + g = β β f Γβ g β Ξ f +β² g = β β f +β g β Ξ @@ -61,8 +75,7 @@ record Semiadditive : Set (levelOfTerm π) where β β zeroβ Γβ x β Ξ ββ¨ reflβ©ββ¨ ΓββΞ β© β β β¨ zeroβ , x β© ββ¨ reflβ©ββ¨ β¨β©-congβ (zero-βΚ³ x) identityΛ‘ β¨ β β β¨ zeroβ β x , id β x β© ββ¨ reflβ©ββ¨ β¨β©β β¨ - β β β¨ zeroβ , id β© β x ββ¨ reflβ©ββ¨ β¨β©-congΚ³ (zero-βΚ³ πβ) β©ββ¨refl β¨ - β β β¨ zeroβ {A} β πβ , id β© β x ββ¨ reflβ©ββ¨ β¨β©-congβ (Οβiβ-absorbΛ‘ zeroβ) (Equiv.sym Οββiββid) β©ββ¨refl β© + β β β¨ zeroβ , id β© β x ββ¨ reflβ©ββ¨ β¨β©-congβ Οββiββ0 Οββiββid β©ββ¨refl β¨ β β β¨ Οβ β iβ , Οβ β iβ β© β x ββ¨ reflβ©ββ¨ g-Ξ· β©ββ¨refl β© β β iβ β x ββ¨ cancelΛ‘ β-identityΛ‘ β© x β @@ -72,8 +85,7 @@ record Semiadditive : Set (levelOfTerm π) where β β x Γβ zeroβ β Ξ ββ¨ reflβ©ββ¨ ΓββΞ β© β β β¨ x , zeroβ β© ββ¨ reflβ©ββ¨ β¨β©-congβ identityΛ‘ (zero-βΚ³ x) β¨ β β β¨ id β x , zeroβ β x β© ββ¨ reflβ©ββ¨ β¨β©β β¨ - β β β¨ id , zeroβ β© β x ββ¨ reflβ©ββ¨ β¨β©-congΛ‘ (zero-βΚ³ πβ) β©ββ¨refl β¨ - β β β¨ id , zeroβ {A} β πβ β© β x ββ¨ reflβ©ββ¨ β¨β©-congβ (Equiv.sym Οββiββid) (Οβiβ-absorbΛ‘ zeroβ) β©ββ¨refl β© + β β β¨ id , zeroβ β© β x ββ¨ reflβ©ββ¨ β¨β©-congβ Οββiββid Οββiββ0 β©ββ¨refl β¨ β β β¨ Οβ β iβ , Οβ β iβ β© β x ββ¨ reflβ©ββ¨ g-Ξ· β©ββ¨refl β© β β iβ β x ββ¨ cancelΛ‘ β-identityΚ³ β© x β diff --git a/Data/Matrix/Dagger-2-Poset.agda b/Data/Matrix/Dagger-2-Poset.agda index 400be2e..aff22d7 100644 --- a/Data/Matrix/Dagger-2-Poset.agda +++ b/Data/Matrix/Dagger-2-Poset.agda @@ -15,7 +15,7 @@ import Relation.Binary.Reasoning.Setoid as β-Reasoning open import Category.Dagger.2-Poset using (dagger-2-poset; Dagger-2-Poset) open import Category.Dagger.Semiadditive using (IdempotentSemiadditiveDagger) -open import Data.Matrix.Category R.semiring using (Mat; _Β·_; Β·-IΛ‘; Β·-IΚ³; Β·-resp-β; Β·-assoc; β₯-Β·-β; Β·-β₯; Β·-πΛ‘; β-Β·) +open import Data.Matrix.Category R.semiring using (Mat; _Β·_; Β·-IΛ‘; Β·-IΚ³; Β·-resp-β; Β·-assoc; β₯-Β·-β; Β·-β₯; Β·-πΚ³; β-Β·) open import Data.Matrix.Core R.setoid using (Matrix; Matrixβ; _β_; module β; β₯-cong; β-cong) open import Data.Matrix.Monoid R.+-monoid using (π; _[+]_; [+]-cong; [+]-πΛ‘; [+]-πΚ³) open import Data.Matrix.Raw using (_β₯_; _β_; _α΅) @@ -45,28 +45,26 @@ opaque [+]-idem [] = PW.[] [+]-idem (Mβ β· M) = β-idem Mβ PW.β· [+]-idem M -+-[+] : (M N : Matrix A B) β (I β₯ I) Β· (((I β π) Β· M) β₯ ((π β I) Β· N)) Β· (I β₯ I) α΅ β M [+] N ++-[+] : (M N : Matrix A B) β (I β₯ I) Β· ((M Β· (I β₯ π)) β (N Β· (π β₯ I))) Β· (I β I) β M [+] N +-[+] M N = begin - (I β₯ I) Β· (((I β π) Β· M) β₯ ((π β I) Β· N)) Β· (I β₯ I) α΅ β‘β¨ β‘.congβ (Ξ» hβ hβ β (I β₯ I) Β· (hβ β₯ hβ) Β· (I β₯ I) α΅) (β-Β· I π M) (β-Β· π I N) β© - (I β₯ I) Β· ((I Β· M β π Β· M) β₯ (π Β· N β I Β· N)) Β· (I β₯ I) α΅ ββ¨ Β·-resp-β β.refl (Β·-resp-β (β₯-cong (β-cong Β·-IΛ‘ (Β·-πΛ‘ M)) (β-cong (Β·-πΛ‘ N) Β·-IΛ‘)) β.refl) β© - (I β₯ I) Β· ((M β π) β₯ (π β N)) Β· (I β₯ I) α΅ β‘β¨ β‘.cong (Ξ» h β (I β₯ I) Β· ((M β π) β₯ (π β N)) Β· h) (β₯-α΅ I I) β© - (I β₯ I) Β· ((M β π) β₯ (π β N)) Β· (I α΅ β I α΅) β‘β¨ β‘.congβ (Ξ» hβ hβ β (I β₯ I) Β· ((M β π) β₯ (π β N)) Β· (hβ β hβ)) Iα΅ Iα΅ β© - (I β₯ I) Β· ((M β π) β₯ (π β N)) Β· (I β I) ββ¨ Β·-assoc β¨ - ((I β₯ I) Β· ((M β π) β₯ (π β N))) Β· (I β I) β‘β¨ β‘.cong (_Β· (I β I)) (Β·-β₯ (I β₯ I) (M β π) (π β N)) β© - (((I β₯ I) Β· (M β π)) β₯ ((I β₯ I) Β· (π β N))) Β· (I β I) ββ¨ β₯-Β·-β ((I β₯ I) Β· (M β π)) ((I β₯ I) Β· (π β N)) I I β© - (((I β₯ I) Β· (M β π)) Β· I) [+] (((I β₯ I) Β· (π β N)) Β· I) ββ¨ [+]-cong Β·-IΚ³ Β·-IΚ³ β© - ((I β₯ I) Β· (M β π)) [+] ((I β₯ I) Β· (π β N)) ββ¨ [+]-cong (β₯-Β·-β I I M π) (β₯-Β·-β I I π N) β© - ((I Β· M) [+] (I Β· π)) [+] ((I Β· π) [+] (I Β· N)) ββ¨ [+]-cong ([+]-cong Β·-IΛ‘ Β·-IΛ‘) ([+]-cong Β·-IΛ‘ Β·-IΛ‘) β© - (M [+] π) [+] (π [+] N) ββ¨ [+]-cong ([+]-πΚ³Β M) ([+]-πΛ‘Β N) β© - M [+] N β + (I β₯ I) Β· ((M Β· (I β₯ π)) β (N Β· (π β₯ I))) Β· (I β I) β‘β¨ β‘.congβ (Ξ» hβ hβ β (I β₯ I) Β· (hβ β hβ) Β· (I β I)) (Β·-β₯ M I π) (Β·-β₯ N π I) β© + (I β₯ I) Β· ((M Β· I) β₯ (M Β· π) β (N Β· π) β₯ (N Β· I)) Β· (I β I) ββ¨ Β·-resp-β β.refl (Β·-resp-β (β-cong (β₯-cong Β·-IΚ³ (Β·-πΚ³ M)) (β₯-cong (Β·-πΚ³ N) Β·-IΚ³)) β.refl) β© + (I β₯ I) Β· ((M β₯ π) β (π β₯ N)) Β· (I β I) β‘β¨ β‘.cong ((I β₯ I) Β·_) (β-Β· (M β₯ π) (π β₯ N) (I β I)) β© + (I β₯ I) Β· (((M β₯ π) Β· (I β I)) β ((π β₯ N) Β· (I β I))) ββ¨ β₯-Β·-β I I ((M β₯ π) Β· (I β I)) ((π β₯ N) Β· (I β I)) β© + (I Β· (M β₯ π) Β· (I β I)) [+] (I Β· (π β₯ N) Β· (I β I)) ββ¨ [+]-cong Β·-IΛ‘ Β·-IΛ‘ β© + ((M β₯ π) Β· (I β I)) [+] ((π β₯ N) Β· (I β I)) ββ¨ [+]-cong (β₯-Β·-β M π I I) (β₯-Β·-β π N I I) β© + ((M Β· I) [+] (π Β· I)) [+] ((π Β· I) [+] (N Β· I)) ββ¨ [+]-cong ([+]-cong Β·-IΚ³ Β·-IΚ³) ([+]-cong Β·-IΚ³ Β·-IΚ³) β© + (M [+] π) [+] (π [+] N) ββ¨ [+]-cong ([+]-πΚ³Β M) ([+]-πΛ‘Β N) β© + M [+] N β where open β-Reasoning (Matrixβ _ _) -idem : (M : Matrix A B) β (I β₯ I) Β· (((I β π) Β· M) β₯ ((π β I) Β· M)) Β· (I β₯ I) α΅ β M + +idem : (M : Matrix A B) β (I β₯ I) Β· ((M Β· (I β₯ π)) β (M Β· (π β₯ I))) Β· (I β I) β M idem M = begin - (I β₯ I) Β· (((I β π) Β· M) β₯ ((π β I) Β· M)) Β· (I β₯ I) α΅ ββ¨ +-[+] M M β© - M [+] M ββ¨ [+]-idem M β© - M β + (I β₯ I) Β· ((M Β· (I β₯ π)) β (M Β· (π β₯ I))) Β· (I β I) ββ¨ +-[+] M M β© + M [+] M ββ¨ [+]-idem M β© + M β where open β-Reasoning (Matrixβ _ _) diff --git a/Data/Matrix/SemiadditiveDagger.agda b/Data/Matrix/SemiadditiveDagger.agda index 1415c7e..3e13383 100644 --- a/Data/Matrix/SemiadditiveDagger.agda +++ b/Data/Matrix/SemiadditiveDagger.agda @@ -7,29 +7,34 @@ module Data.Matrix.SemiadditiveDagger {c β : Level} (R : CommutativeSemiring c module R = CommutativeSemiring R -import Relation.Binary.Reasoning.Setoid as β-Reasoning -import Data.Vec.Relation.Binary.Pointwise.Inductive as PW -import Data.Nat.Properties as β-Props import Data.Nat as β +import Data.Nat.Properties as β-Props +import Data.Vec.Relation.Binary.Pointwise.Inductive as PW +import Relation.Binary.Reasoning.Setoid as β-Reasoning open import Categories.Category.Cocartesian using (Cocartesian) -open import Categories.Object.Coproduct using (Coproduct) -open import Categories.Object.Initial using (Initial) -open import Category.Dagger.Semiadditive using (DaggerCocartesianMonoidal; SemiadditiveDagger) -open import Data.Matrix.Cast R.setoid using (castβ; castβ-β₯; β₯-β; β₯-ββ΄; β-sym-assoc) -open import Data.Matrix.Category R.semiring using (Mat; _Β·_; β-Β·; Β·-IΛ‘; Β·-IΚ³; Β·-πΛ‘; Β·-πΚ³; Β·-β₯; β₯-Β·-β) -open import Data.Matrix.Raw using (_α΅; _α΅α΅; mapRows; []α΅₯; []α΅₯-β₯; []β; []β-!; []β-β; _β·α΅₯_; _β·β_; β·α΅₯-α΅; _β₯_; _β_; β·β-α΅; β·β-β; []α΅₯-α΅; head-β·-tailβ; headβ; tailβ; β·β-β₯; []α΅₯-!) +open import Categories.Category.Dagger using (HasDagger) +open import Categories.Object.Biproduct using (Biproduct) +open import Categories.Object.Coproduct using (IsCoproduct) +open import Categories.Object.Initial using (IsInitial) +open import Categories.Object.Product using (IsProduct) +open import Categories.Object.Terminal using (IsTerminal) +open import Categories.Object.Zero using (Zero) +open import Category.Dagger.Semiadditive using (SemiadditiveDagger) +open import Category.Semiadditive using (Semiadditive) +open import Data.Matrix.Category R.semiring using (Mat; _Β·_; β-Β·; Β·-IΛ‘; Β·-IΚ³; Β·-πΛ‘; Β·-πΚ³; Β·-β₯; β₯-Β·-β; Β·-resp-β; Β·-assoc) open import Data.Matrix.Core R.setoid using (Matrix; Matrixβ; _β_; module β; β₯-cong; β-cong; α΅-cong) open import Data.Matrix.Monoid R.+-monoid using (π; πα΅; πβπ; πβ₯π; _[+]_; [+]-cong; [+]-πΛ‘; [+]-πΚ³) +open import Data.Matrix.Raw using (_α΅; _α΅α΅; mapRows; []α΅₯; []α΅₯-β₯; []β; []β-!; []β-β; _β·α΅₯_; _β·β_; β·α΅₯-α΅; _β₯_; _β_; β·β-α΅; β·β-β; []α΅₯-α΅; head-β·-tailβ; headβ; tailβ; β·β-β₯; β·α΅₯-β; []α΅₯-!) open import Data.Matrix.Transform R.semiring using (I; Iα΅; [_]_; _[_]; -[-]α΅; [-]--cong; [-]-[]α΅₯; [β¨β©]-[]β) open import Data.Nat using (β) open import Data.Product using (_,_; Ξ£-syntax) open import Data.Vec using (Vec; map; replicate; _++_) open import Data.Vec.Properties using (map-cong; map-const) open import Data.Vector.Bisemimodule R.semiring using (_β_ ; β-cong) -open import Data.Vector.Raw using (β¨β©) open import Data.Vector.Core R.setoid using (Vector; Vectorβ; module β; _β_) open import Data.Vector.Monoid R.+-monoid using () renaming (β¨Ξ΅β© to β¨0β©) +open import Data.Vector.Raw using (β¨β©) open import Data.Vector.Vec using (replicate-++) open import Function using (_β_) open import Relation.Binary.PropositionalEquality as β‘ using (_β‘_; module β‘-Reasoning) @@ -88,18 +93,6 @@ opaque α΅-involutive M = β.reflexive (M α΅α΅) opaque - unfolding _β_ - βΞ»α΅ : ([]α΅₯ β₯ I) α΅ β π β I {A} - βΞ»α΅ = begin - ([]α΅₯ β₯ I) α΅ β‘β¨ β‘.cong (_α΅) ([]α΅₯-β₯ I) β© - I α΅ β‘β¨ Iα΅ β© - I β‘β¨ []β-β I β¨ - []β β I β‘β¨ β‘.cong (_β I) ([]β-! π) β¨ - π β I β - where - open β-Reasoning (Matrixβ _ _) - -opaque unfolding Matrix _β₯_ _α΅ _β_ _β·β_ β₯-α΅ : (M : Matrix A C) (N : Matrix B C) β (M β₯ N) α΅ β‘ M α΅ β N α΅ β₯-α΅ {A} {zero} {B} [] [] = β‘.sym (replicate-++ A B []) @@ -119,110 +112,6 @@ opaque where open β‘-Reasoning -opaque - unfolding _β_ - βΟα΅ : (I β₯ []α΅₯) α΅ β I {A} β π - βΟα΅ {A} = begin - (I β₯ []α΅₯) α΅ β‘β¨ β₯-α΅ I []α΅₯ β© - I α΅ β []α΅₯ α΅ β‘β¨ β‘.cong (I α΅ β_) []α΅₯-α΅ β© - I α΅ β []β β‘β¨ β‘.cong (_β []β) Iα΅ β© - I β []β β‘β¨ β‘.cong (I β_) ([]β-! π) β¨ - I β π β - where - open β-Reasoning (Matrixβ _ _) - -opaque - unfolding _β_ - βΞ±α΅ : (((I {A} β π {A} {B β.+ C}) β₯ (π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π)) β₯ (π {_} {A} β I {B β.+ C}) Β· (π β I {C})) α΅ - β (I {A β.+ B} β π) Β· (I {A} β π) β₯ (I {A β.+ B} β π) Β· (π β I {B}) β₯ (π β I {C}) - βΞ±α΅ {A} {B} {C} = begin - (((I {A} β π {A} {B β.+ C}) β₯ (π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) β₯ (π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅ - β‘β¨ β₯-α΅ ((I {A} β π {A} {B β.+ C}) β₯ (π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) β© - ((I {A} β π {A} {B β.+ C}) β₯ (π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) α΅ β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅ - β‘β¨ β‘.cong (_β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅) (β₯-α΅ (I {A} β π {A} {B β.+ C}) ((π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C}))) β© - ((I {A} β π {A} {B β.+ C}) α΅ β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) α΅) β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅ - β‘β¨ β‘.cong (Ξ» h β (h β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) α΅) β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅) (β-α΅ I π) β© - (I {A} α΅ β₯ π {A} {B β.+ C} α΅ β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) α΅) β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅ - β‘β¨ β‘.cong (Ξ» h β (h β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) α΅) β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅) (β‘.congβ _β₯_ Iα΅ πα΅) β© - (I {A} β₯ π {B β.+ C} {A} β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (I {B} β π {B} {C})) α΅) β ((π {B β.+ C} {A} β I {B β.+ C}) Β· (π {C} {B} β I {C})) α΅ - ββ¨ β-cong (β-cong β.refl (Β·-α΅ (I β π) (π β I))) (Β·-α΅ (π β I) (π β I)) β© - (I {A} β₯ π {B β.+ C} {A} β (I {B} β π {B} {C}) α΅ Β· (π {B β.+ C} {A} β I {B β.+ C}) α΅) β (π {C} {B} β I {C}) α΅ Β· (π {B β.+ C} {A} β I {B β.+ C}) α΅ - β‘β¨ β‘.congβ _β_ (β‘.congβ (Ξ» hβ hβ β I {A} β₯ π {B β.+ C} {A} β hβ Β· hβ) (β-α΅ I π) (β-α΅ π I)) (β‘.congβ _Β·_ (β-α΅ π I) (β-α΅ π I)) β© - (I {A} β₯ π {B β.+ C} {A} β (I {B} α΅ β₯ π {B} {C} α΅) Β· (π {B β.+ C} {A} α΅ β₯ I {B β.+ C} α΅)) β (π {C} {B} α΅ β₯ I {C} α΅) Β· (π {B β.+ C} {A} α΅ β₯ I {B β.+ C} α΅) - β‘β¨ β‘.congβ _β_ (β‘.congβ (Ξ» hβ hβ β I {A} β₯ π β hβ Β· hβ) (β‘.congβ _β₯_ Iα΅ πα΅) (β‘.congβ _β₯_ πα΅ Iα΅)) (β‘.congβ _Β·_ (β‘.congβ _β₯_ πα΅ Iα΅) (β‘.congβ _β₯_ πα΅ Iα΅)) β© - (I {A} β₯ π {B β.+ C} {A} β (I {B} β₯ π {C} {B}) Β· (π {A} {B β.+ C} β₯ I {B β.+ C})) β (π {B} {C} β₯ I {C}) Β· (π {A} {B β.+ C} β₯ I {B β.+ C}) - β‘β¨ β‘.congΒ (Ξ» h β (I {A} β₯ π {B β.+ C} {A} β h) β (π {B} {C} β₯ I {C}) Β· (π {A} {B β.+ C} β₯ I {B β.+ C})) (Β·-β₯ (I β₯ π) π I) β© - (I {A} β₯ π {B β.+ C} {A} β (I {B} β₯ π {C} {B}) Β· π {A} {B β.+ C} β₯ (I {B} β₯ π {C} {B}) Β· I {B β.+ C}) β (π {B} {C} β₯ I {C}) Β· (π {A} {B β.+ C} β₯ I {B β.+ C}) - ββ¨ β-cong (β-cong β.refl (β₯-cong (Β·-πΚ³ (I β₯ π)) Β·-IΚ³)) (β.refl {x = (π {B} {C} β₯ I {C}) Β· (π {A} {B β.+ C} β₯ I {B β.+ C})}) β© - (I {A} β₯ π {B β.+ C} {A} β π {A} {B} β₯ I {B} β₯ π {C} {B}) β (π {B} {C} β₯ I {C}) Β· (π {A} {B β.+ C} β₯ I {B β.+ C}) - β‘β¨ β‘.congΒ ((I {A} β₯ π {B β.+ C} {A} β π {A} {B} β₯ I {B} β₯ π {C} {B}) β_) (Β·-β₯ (π β₯ I) π I) β© - (I {A} β₯ π {B β.+ C} {A} β π {A} {B} β₯ I {B} β₯ π {C} {B}) β (π {B} {C} β₯ I {C}) Β· (π {A} {B β.+ C}) β₯ (π {B} {C} β₯ I {C}) Β· I {B β.+ C} - ββ¨ β-cong β.refl (β₯-cong (Β·-πΚ³ (π β₯ I)) Β·-IΚ³) β© - (I {A} β₯ π {B β.+ C} {A} β π {A} {B} β₯ I {B} β₯ π {C} {B}) β π {A} {C} β₯ π {B} {C} β₯ I {C} - β‘β¨ β‘.cong (Ξ» h β (I {A} β₯ h β π {A} {B} β₯ I {B} β₯ π {C} {B}) β π {A} {C} β₯ π {B} {C} β₯ I {C}) πβ₯π β¨ - (I {A} β₯ π {B} β₯ π {C} β π {A} β₯ I {B} β₯ π {C}) β π {A} β₯ π {B} β₯ I {C} - β‘β¨ β-sym-assoc (I {A} β₯ π {B} β₯ π {C}) (π {A} β₯ I {B} β₯ π {C}) (π {A} β₯ π {B} β₯ I {C}) β¨ - castβ _ (I {A} β₯ π {B} β₯ π {C} β π {A} β₯ I {B} β₯ π {C} β π {A} β₯ π {B} β₯ I {C}) - β‘β¨ β‘.cong (castβ _) (β₯-ββ΄ I π π π I π π π I) β© - castβ (β‘.sym assoc) ((I {A} β π {A} {B} β (π {A} {C})) β₯ (π {B} {A} β I {B} β π {B} {C}) β₯ ((π {C} {A} β π {C} {B} β I {C}))) - β‘β¨ castβ-β₯ (β‘.sym assoc) ((I {A} β π {A} {B} β (π {A} {C}))) ((π {B} {A} β I {B} β π {B} {C}) β₯ ((π {C} {A} β π {C} {B} β I {C}))) β¨ - (castβ (β‘.sym assoc) (I {A} β π {A} {B} β (π {A} {C}))) β₯ castβ (β‘.sym assoc) ((π {B} {A} β I {B} β π {B} {C}) β₯ ((π {C} {A} β π {C} {B} β I {C}))) - β‘β¨ β‘.cong (castβ (β‘.sym assoc) (I {A} β π {A} {B} β (π {A} {C})) β₯_) (castβ-β₯ (β‘.sym assoc) (π {B} {A} β I {B} β π {B} {C}) (π {C} {A} β π {C} {B} β I {C})) β¨ - castβ (β‘.sym assoc) (I {A} β π {A} {B} β (π {A} {C})) β₯ castβ (β‘.sym assoc) (π {B} {A} β I {B} β π {B} {C}) β₯ castβ (β‘.sym assoc) (π {C} {A} β π {C} {B} β I {C}) - β‘β¨ β‘.congβ _β₯_ (β-sym-assoc I π π) (β‘.congβ _β₯_ (β-sym-assoc π I π) (β-sym-assoc π π I)) β© - ((I {A} β π {A} {B}) β (π {A} {C})) β₯ ((π {B} {A} β I {B}) β π {B} {C}) β₯ ((π {C} {A} β π {C} {B}) β I {C}) - β‘β¨ β‘.cong (Ξ» h β ((I {A} β π {A} {B}) β (π {A} {C})) β₯ ((π {B} {A} β I {B}) β π {B} {C}) β₯ (h β I {C})) πβπ β© - ((I {A} β π {A} {B}) β (π {A} {C})) β₯ ((π {B} {A} β I {B}) β π {B} {C}) β₯ (π {C} {A β.+ B} β I {C}) - ββ¨ β₯-cong β.refl (β₯-cong (β-cong Β·-IΛ‘ (Β·-πΛ‘ (π β I))) β.refl) β¨ - ((I {A} β π {A} {B}) β (π {A} {C})) β₯ (((I {A β.+ B} Β· (π {B} {A} β I {B})) β (π {A β.+ B} {C} Β· (π {B} {A} β I {B})))) β₯ (π {C} {A β.+ B} β I {C}) - β‘β¨ β‘.cong (Ξ» h β ((I {A} β π {A} {B}) β (π {A} {C})) β₯ h β₯ (π {C} {A β.+ B} β I {C})) (β-Β· I π (π β I)) β¨ - ((I {A} β π {A} {B}) β (π {A} {C})) β₯ ((I {A β.+ B} β π {A β.+ B} {C}) Β· (π {B} {A} β I {B})) β₯ (π {C} {A β.+ B} β I {C}) - ββ¨ β₯-cong (β-cong Β·-IΛ‘ (Β·-πΛ‘ (I β π))) β.refl β¨ - ((I {A β.+ B} Β· (I {A} β π {A} {B})) β (π {A β.+ B} {C} Β· (I {A} β π {A} {B}))) β₯ ((I {A β.+ B} β π {A β.+ B} {C}) Β· (π {B} {A} β I {B})) β₯ (π {C} {A β.+ B} β I {C}) - β‘β¨ β‘.cong (Ξ» h β h β₯ ((I {A β.+ B} β π {A β.+ B} {C}) Β· (π {B} {A} β I {B})) β₯ (π {C} {A β.+ B} β I {C})) (β-Β· I π (I β π)) β¨ - (I {A β.+ B} β π {A β.+ B} {C}) Β· (I {A} β π {A} {B}) β₯ ((I {A β.+ B} β π {A β.+ B} {C}) Β· (π {B} {A} β I {B})) β₯ (π {C} {A β.+ B} β I {C}) β - where - assoc : A β.+ B β.+ C β‘ A β.+ (B β.+ C) - assoc = β-Props.+-assoc A B C - open β-Reasoning (Matrixβ _ _) - -βΟα΅ : ((π β I {A}) β₯ (I {B} β π)) α΅ β (π β I {B}) β₯ (I {A} β π) -βΟα΅ {A} {B} = begin - ((π β I) β₯ (I β π)) α΅ β‘β¨ β₯-α΅ (π β I) (I β π) β© - (π β I {A}) α΅ β (I β π) α΅ β‘β¨ β‘.congβ _β_ (β-α΅ π I) (β-α΅ I π) β© - π α΅ β₯ (I {A}) α΅ β I α΅ β₯ π α΅ β‘β¨ β‘.congβ _β_ (β‘.congβ _β₯_ πα΅ Iα΅) (β‘.congβ _β₯_ Iα΅ πα΅) β© - π β₯ I {A} β I β₯ π β‘β¨ β₯-β π I I π β© - (π β I {B}) β₯ (I β π) β - where - open β-Reasoning (Matrixβ _ _) - -ββ : (M : Matrix A B) - (N : Matrix C D) - β (I β π) Β· M β₯ (π β I) Β· N - β (M β π) β₯ (π β N) -ββ M N = begin - (I β π) Β· M β₯ (π β I) Β· N β‘β¨ β‘.congβ _β₯_ (β-Β· I π M) (β-Β· π I N) β© - (I Β· M β π Β· M) β₯ (π Β· N β I Β· N) ββ¨ β₯-cong (β-cong Β·-IΛ‘ (Β·-πΛ‘ M)) (β-cong (Β·-πΛ‘ N) Β·-IΛ‘) β© - (M β π) β₯ (π β N) β - where - open β-Reasoning (Matrixβ _ _) - -α΅-resp-β - : {M : Matrix A B} - {N : Matrix C D} - β ((I β π) Β· M β₯ (π β I) Β· N) α΅ - β (I β π) Β· M α΅ β₯ (π β I) Β· N α΅ -α΅-resp-β {M = M} {N = N} = begin - ((I β π) Β· M β₯ (π β I) Β· N) α΅ ββ¨ α΅-cong (ββ M N) β© - ((M β π) β₯ (π β N)) α΅ β‘β¨ β‘.cong (_α΅) (β₯-β M π π N) β¨ - ((M β₯ π) β (π β₯ N)) α΅ β‘β¨ β-α΅ (M β₯ π) (π β₯ N) β© - (M β₯ π) α΅ β₯ (π β₯ N) α΅ β‘β¨ β‘.congβ _β₯_ (β₯-α΅ M π) (β₯-α΅ π N) β© - (M α΅ β π α΅) β₯ (π α΅ β N α΅) β‘β¨ β‘.congβ (Ξ» hβ hβ β (M α΅ β hβ) β₯ (hβ β N α΅)) πα΅ πα΅ β© - (M α΅ β π) β₯ (π β N α΅) ββ¨ ββ (M α΅) (N α΅) β¨ - (I β π) Β· M α΅ β₯ (π β I) Β· N α΅ β - where - open β-Reasoning (Matrixβ _ _) - injβ : (M : Matrix A C) (N : Matrix B C) β (M β₯ N) Β· (I β π) β M injβ {A} {C} M N = begin (M β₯ N) Β· (I β π) ββ¨ β₯-Β·-β M N I π β© @@ -242,8 +131,10 @@ injβ {A} {C} {B} M N = begin open β-Reasoning (Matrixβ B C) opaque - unfolding Matrix - split-β₯ : (A : β) β (M : Matrix (A β.+ B) C) β Ξ£[ Mβ β Matrix A C ] Ξ£[ Mβ β Matrix B C ] Mβ β₯ Mβ β‘ M + + unfolding Matrix _β·α΅₯_ + + split-β₯ : (A : β) (M : Matrix (A β.+ B) C) β Ξ£[ Mβ β Matrix A C ] Ξ£[ Mβ β Matrix B C ] Mβ β₯ Mβ β‘ M split-β₯ zero M = []α΅₯ , M , []α΅₯-β₯ M split-β₯ (suc A) Mβ² rewrite β‘.sym (head-β·-tailβ Mβ²) @@ -257,14 +148,24 @@ opaque where open β‘-Reasoning -uniq + split-β : (B : β) (M : Matrix A (B β.+ C)) β Ξ£[ Mβ β Matrix A B ] Ξ£[ Mβ β Matrix A C ] Mβ β Mβ β‘ M + split-β zero M = []β , M , []β-β M + split-β (suc B) (Mβ β· M) with split-β B M + ... | Mβ , Mβ , MββMββ‘M = Mβ β·α΅₯ Mβ , Mβ , (begin + (Mβ β·α΅₯ Mβ) β Mβ β‘β¨ β·α΅₯-β Mβ Mβ Mβ β¨ + Mβ β·α΅₯ Mβ β Mβ β‘β¨ β‘.cong (Mβ β·α΅₯_) MββMββ‘M β© + Mβ β·α΅₯ M β) + where + open β‘-Reasoning + +β₯-uniq : (H : Matrix (A β.+ B) C) (M : Matrix A C) (N : Matrix B C) β H Β· (I β π) β M β H Β· (π β I) β N β M β₯ N β H -uniq {A} {B} {C} H M N eqβ eqβ +β₯-uniq {A} {B} {C} H M N eqβ eqβ with (Hβ , Hβ , Hββ₯Hββ‘H) β split-β₯ A H rewrite β‘.sym Hββ₯Hββ‘H = begin M β₯ N ββ¨ β₯-cong eqβ eqβ β¨ @@ -273,119 +174,198 @@ uniq {A} {B} {C} H M N eqβ eqβ where open β-Reasoning (Matrixβ (A β.+ B) C) -coproduct : Coproduct Mat A B -coproduct {A} {B} = record - { A+B = A β.+ B - ; iβ = I β π - ; iβ = π β I - ; [_,_] = _β₯_ +projβ : (M : Matrix A B) (N : Matrix A C) β (I β₯ π) Β· (M β N) β M +projβ {A} {B} M N = begin + (I β₯ π) Β· (M β N) ββ¨ β₯-Β·-β I π M N β© + (I Β· M) [+] (π Β· N) ββ¨ [+]-cong Β·-IΛ‘ (Β·-πΛ‘ N) β© + M [+] π ββ¨ [+]-πΚ³ M β© + M β + where + open β-Reasoning (Matrixβ A B) + +projβ : (M : Matrix A B) (N : Matrix A C) β (π β₯ I) Β· (M β N) β N +projβ {A} {_} {C} M N = begin + (π β₯ I) Β· (M β N) ββ¨ β₯-Β·-β π I M N β© + (π Β· M) [+] (I Β· N) ββ¨ [+]-cong (Β·-πΛ‘ M) Β·-IΛ‘ β© + π [+] N ββ¨ [+]-πΛ‘ N β© + N β + where + open β-Reasoning (Matrixβ A C) + +β-uniq + : (H : Matrix A (B β.+ C)) + (M : Matrix A B) + (N : Matrix A C) + β (I β₯ π) Β· H β M + β (π β₯ I) Β· H β N + β M β N β H +β-uniq {A} {B} {C} H M N eqβ eqβ + with (Hβ , Hβ , HββHββ‘H) β split-β B H + rewrite β‘.sym HββHββ‘H = begin + M β N ββ¨ β-cong eqβ eqβ β¨ + (I {B} β₯ π) Β· (Hβ β Hβ) β (π β₯ I) Β· (Hβ β Hβ) ββ¨ β-cong (projβ Hβ Hβ) (projβ Hβ Hβ) β© + Hβ β Hβ β + where + open β-Reasoning (Matrixβ A (B β.+ C)) + + +isCoproduct : IsCoproduct Mat (I {A} β π) (π β I {B}) +isCoproduct {A} {B} = record + { [_,_] = _β₯_ ; injectβ = Ξ» {a} {b} {c} β injβ b c ; injectβ = Ξ» {a} {b} {c} β injβ b c - ; unique = Ξ» eqβ eqβ β uniq _ _ _ eqβ eqβ + ; unique = Ξ» eqβ eqβ β β₯-uniq _ _ _ eqβ eqβ } +isProduct : IsProduct Mat (I {A} β₯ π) (π β₯ I {B}) +isProduct {A} {B} = record + { β¨_,_β© = _β_ + ; projectβ = Ξ» {a} {b} {c} β projβ b c + ; projectβ = Ξ» {a} {b} {c} β projβ b c + ; unique = Ξ» eqβ eqβ β β-uniq _ _ _ eqβ eqβ + } + +opaque + + unfolding Matrix + + Οββiβ : (I {A} β₯ π {B}) Β· (I β π) β I + Οββiβ {A} = begin + (I β₯ π) Β· (I β π) ββ¨ β₯-Β·-β I π I π β© + (I Β· I) [+] (π Β· π) ββ¨ [+]-cong Β·-IΛ‘ (Β·-πΛ‘ π) β© + I [+] π ββ¨ [+]-πΚ³ I β© + I β + where + open β-Reasoning (Matrixβ A A) + + Οββiβ : (π {A} {B} β₯ I) Β· (π β I) β I + Οββiβ {A} {B} = begin + (π β₯ I) Β· (π β I) ββ¨ β₯-Β·-β π I π I β© + (π Β· π) [+] (I Β· I) ββ¨ [+]-cong (Β·-πΛ‘ π) Β·-IΛ‘ β© + π [+] I ββ¨ [+]-πΛ‘ I β© + I β + where + open β-Reasoning (Matrixβ B B) + + Οββiβ : (I {A} β₯ π {B}) Β· (π β I) β π {B} {A} + Οββiβ {A} {B} = begin + (I β₯ π) Β· (π β I) ββ¨ β₯-Β·-β I π π I β© + (I Β· π) [+] (π Β· I) ββ¨ [+]-cong (Β·-πΚ³ I) (Β·-πΛ‘ I) β© + π [+] π ββ¨ [+]-πΚ³ π β© + π β + where + open β-Reasoning (Matrixβ B A) + + Οββiβ : (π {A} {B} β₯ I) Β· (I β π) β π {A} {B} + Οββiβ {A} {B} = begin + (π β₯ I) Β· (I β π) ββ¨ β₯-Β·-β π I I π β© + (π Β· I) [+] (I Β· π) ββ¨ [+]-cong (Β·-πΛ‘ I) (Β·-πΚ³ I) β© + π [+] π ββ¨ [+]-πΚ³ π β© + π β + where + open β-Reasoning (Matrixβ A B) + + permute + : (I β π {A} {B}) Β· (I β₯ π {B} {A}) Β· (π {B} {A} β I) Β· (π {A} {B} β₯ I) + β (π {B} {A} β I) Β· (π {A} {B} β₯ I) Β· (I β π {A} {B}) Β· (I β₯ π {B} {A}) + permute {A} {B} = begin + (I β π) Β· (I β₯ π {B} {A}) Β· (π {B} {A} β I) Β· (π {A} {B} β₯ I) ββ¨ Β·-resp-β β.refl Β·-assoc β¨ + (I β π) Β· ((I β₯ π {B} {A}) Β· (π {B} {A} β I)) Β· (π {A} {B} β₯ I) ββ¨ Β·-resp-β β.refl (Β·-resp-β Οββiβ β.refl) β© + (I β π) Β· π {B} {A} Β· (π {A} {B} β₯ I) ββ¨ Β·-resp-β β.refl (Β·-πΛ‘ (π β₯ I)) β© + (I β π {A} {B}) Β· π ββ¨ Β·-πΚ³ (I β π) β© + π ββ¨ Β·-πΚ³ (π β I) β¨ + (π {B} {A} β I) Β· π ββ¨ Β·-resp-β β.refl (Β·-πΛ‘ (I β₯ π)) β¨ + (π β I) Β· π {A} {B} Β· (I β₯ π {B} {A}) ββ¨ Β·-resp-β β.refl (Β·-resp-β Οββiβ β.refl) β¨ + (π {B} {A} β I) Β· ((π β₯ I) Β· (I β π {A} {B})) Β· (I β₯ π {B} {A}) ββ¨ Β·-resp-β β.refl Β·-assoc β© + (π {B} {A} β I) Β· (π {A} {B} β₯ I) Β· (I β π {A} {B}) Β· (I β₯ π) β + where + open β-Reasoning (Matrixβ (A β.+ B) (A β.+ B)) + +biproduct : Biproduct Mat A B +biproduct {A} {B} = record + { AβB = A β.+ B + ; Οβ = I β₯ π + ; Οβ = π β₯ I + ; iβ = I β π + ; iβ = π β I + ; isBiproduct = record + { isCoproduct = isCoproduct + ; isProduct = isProduct + ; Οββiββid = Οββiβ + ; Οββiββid = Οββiβ + ; permute = permute + } + } + +[Iβ₯π]α΅ : (I β₯ π {B} {A}) α΅ β I β π +[Iβ₯π]α΅ {B} {A} = begin + (I β₯ π) α΅ β‘β¨ β₯-α΅ I π β© + I α΅ β π α΅ β‘β¨ β‘.congβ _β_ Iα΅ πα΅ β© + I β π β + where + open β-Reasoning (Matrixβ A (A β.+ B)) + +[πβ₯I]α΅ : (π {A} {B} β₯ I) α΅ β π β I +[πβ₯I]α΅ {A} {B} = begin + (π β₯ I) α΅ β‘β¨ β₯-α΅ π I β© + π α΅ β I α΅ β‘β¨ β‘.congβ _β_ πα΅ Iα΅ β© + π β I β + where + open β-Reasoning (Matrixβ B (A β.+ B)) + opaque + unfolding _β_ + Β‘-unique : (E : Matrix 0 B) β []α΅₯ β E Β‘-unique E = β.reflexive (β‘.sym ([]α΅₯-! E)) -initial : Initial Mat -initial = record - { β₯ = 0 - ; β₯-is-initial = record - { Β‘ = []α΅₯ - ; Β‘-unique = Β‘-unique - } + !-unique : (E : Matrix A 0) β []β β E + !-unique E = β.reflexive (β‘.sym ([]β-! E)) + +isInitial : IsInitial Mat 0 +isInitial = record + { Β‘ = []α΅₯ + ; Β‘-unique = Β‘-unique } -Mat-Cocartesian : Cocartesian Mat -Mat-Cocartesian = record - { initial = initial - ; coproducts = record - { coproduct = coproduct - } +isTerminal : IsTerminal Mat 0 +isTerminal = record + { ! = []β + ; !-unique = !-unique } -Mat-DaggerCocartesian : DaggerCocartesianMonoidal Mat -Mat-DaggerCocartesian = record - { cocartesian = Mat-Cocartesian - ; dagger = record - { _β = Ξ» M β M α΅ - ; β -identity = β.reflexive Iα΅ - ; β -homomorphism = Ξ» {f = f} {g} β Β·-α΅ f g - ; β -resp-β = α΅-cong - ; β -involutive = α΅-involutive +zeroObj : Zero Mat +zeroObj = record + { π = 0 + ; isZero = record + { isInitial = isInitial + ; isTerminal = isTerminal } - ; Ξ»β
β = βΞ»α΅ - ; Οβ
β = βΟα΅ - ; Ξ±β
β = βΞ±α΅ - ; Οβ
β = βΟα΅ - ; β -resp-β = α΅-resp-β } -pβ-iβ : (I β π) α΅ Β· (I β π {A} {B}) β I -pβ-iβ = begin - (I β π) α΅ Β· (I β π) β‘β¨ β‘.cong (_Β· (I β π)) (β-α΅ I π) β© - (I α΅ β₯ π α΅) Β· (I β π) β‘β¨ β‘.congβ (Ξ» hβ hβ β (hβ β₯ hβ) Β· (I β π)) Iα΅ πα΅ β© - (I β₯ π) Β· (I β π) ββ¨ β₯-Β·-β I π I π β© - (I Β· I) [+] (π Β· π) ββ¨ [+]-cong Β·-IΛ‘ (Β·-πΛ‘ π) β© - I [+] π ββ¨ [+]-πΚ³ I β© - I β - where - open β-Reasoning (Matrixβ _ _) - -pβ-iβ : (π {A} {B} β I) α΅ Β· (π β I) β I -pβ-iβ = begin - (π β I) α΅ Β· (π β I) β‘β¨ β‘.cong (_Β· (π β I)) (β-α΅ π I) β© - (π α΅ β₯ I α΅) Β· (π β I) β‘β¨ β‘.congβ (Ξ» hβ hβ β (hβ β₯ hβ) Β· (π β I)) πα΅ Iα΅ β© - (π β₯ I) Β· (π β I) ββ¨ β₯-Β·-β π I π I β© - (π Β· π) [+] (I Β· I) ββ¨ [+]-cong (Β·-πΛ‘ π) Β·-IΛ‘ β© - π [+] I ββ¨ [+]-πΛ‘ I β© - I β - where - open β-Reasoning (Matrixβ _ _) - -opaque - unfolding π mapRows - []α΅₯Β·[]β : []α΅₯ Β· []β β‘ π {A} {B} - []α΅₯Β·[]β {A} {B} = begin - map ([_] []β) []α΅₯ β‘β¨ map-cong (Ξ» { [] β [β¨β©]-[]β }) []α΅₯ β© - map (Ξ» _ β β¨0β©) []α΅₯ β‘β¨ map-const []α΅₯ β¨0β© β© - π β - where - open β‘-Reasoning +Mat-Semiadditive : Semiadditive Mat +Mat-Semiadditive = record + { zero = zeroObj + ; biproducts = record + { biproduct = biproduct + } + } -pβ-iβ : (π {A} β I) α΅ Β· (I β π {B}) β []α΅₯ Β· []α΅₯ α΅ -pβ-iβ = begin - (π β I) α΅ Β· (I β π) β‘β¨ β‘.cong (_Β· (I β π)) (β-α΅ π I) β© - (π α΅ β₯ I α΅) Β· (I β π) β‘β¨ β‘.congβ (Ξ» hβ hβ β (hβ β₯ hβ) Β· (I β π)) πα΅ Iα΅ β© - (π β₯ I) Β· (I β π) ββ¨ β₯-Β·-β π I I π β© - (π Β· I) [+] (I Β· π) ββ¨ [+]-cong (Β·-πΛ‘ I) (Β·-πΚ³ I) β© - π [+] π ββ¨ [+]-πΛ‘ π β© - π β‘β¨ []α΅₯Β·[]β β¨ - []α΅₯ Β· []β β‘β¨ β‘.cong ([]α΅₯ Β·_) []α΅₯-α΅ β¨ - []α΅₯ Β· []α΅₯ α΅ β - where - open β-Reasoning (Matrixβ _ _) - -pβ-iβ : (I β π {A}) α΅ Β· (π {B} β I) β []α΅₯ Β· []α΅₯ α΅ -pβ-iβ = begin - (I β π) α΅ Β· (π β I) β‘β¨ β‘.cong (_Β· (π β I)) (β-α΅ I π) β© - (I α΅ β₯ π α΅) Β· (π β I) β‘β¨ β‘.congβ (Ξ» hβ hβ β (hβ β₯ hβ) Β· (π β I)) Iα΅ πα΅ β© - (I β₯ π) Β· (π β I) ββ¨ β₯-Β·-β I π π I β© - (I Β· π) [+] (π Β· I) ββ¨ [+]-cong (Β·-πΚ³ I) (Β·-πΛ‘ I) β© - π [+] π ββ¨ [+]-πΛ‘ π β© - π β‘β¨ []α΅₯Β·[]β β¨ - []α΅₯ Β· []β β‘β¨ β‘.cong ([]α΅₯ Β·_) []α΅₯-α΅ β¨ - []α΅₯ Β· []α΅₯ α΅ β - where - open β-Reasoning (Matrixβ _ _) +Mat-HasDagger : HasDagger Mat +Mat-HasDagger = record + { _β = Ξ» M β M α΅ + ; β -identity = β.reflexive Iα΅ + ; β -homomorphism = Ξ» {f = f} {g} β Β·-α΅ f g + ; β -resp-β = α΅-cong + ; β -involutive = α΅-involutive + } Mat-SemiadditiveDagger : SemiadditiveDagger Mat Mat-SemiadditiveDagger = record - { daggerCocartesianMonoidal = Mat-DaggerCocartesian - ; pβ-iβ = pβ-iβ - ; pβ-iβ = pβ-iβ - ; pβ-iβ = pβ-iβ - ; pβ-iβ = pβ-iβ + { semiadditive = Mat-Semiadditive + ; dagger = Mat-HasDagger + ; Οββ = [Iβ₯π]α΅ + ; Οββ = [πβ₯I]α΅ + ; β¨β©-β = Ξ» {f = M} {N} β β.reflexive (β-α΅ M N) } |
