diff options
| -rw-r--r-- | Category/KaroubiComplete.agda | 16 | ||||
| -rw-r--r-- | Data/WiringDiagram/Equalities.agda | 6 | ||||
| -rw-r--r-- | Data/WiringDiagram/Looped.agda | 106 |
3 files changed, 125 insertions, 3 deletions
diff --git a/Category/KaroubiComplete.agda b/Category/KaroubiComplete.agda new file mode 100644 index 0000000..e4005d1 --- /dev/null +++ b/Category/KaroubiComplete.agda @@ -0,0 +1,16 @@ +{-# OPTIONS --without-K --safe #-} + +open import Categories.Category using (Category) +open import Level using (Level; suc; _β_) + +module Category.KaroubiComplete {o β e : Level} (π : Category o β e) where + +open import Categories.Morphism.Idempotent π using (IsSplitIdempotent) + +open Category π + +-- A Karoubi complete category is one in which all idempotents split +record KaroubiComplete : Set (suc (oΒ β β β e)) where + + field + split : {A : Obj} {f : A β A} β f β f β f β IsSplitIdempotent f diff --git a/Data/WiringDiagram/Equalities.agda b/Data/WiringDiagram/Equalities.agda index 37b8f38..1e5eb47 100644 --- a/Data/WiringDiagram/Equalities.agda +++ b/Data/WiringDiagram/Equalities.agda @@ -102,7 +102,7 @@ loopβpullβloopβsplit f fβfβ β€id = βα΅’ βΈ (identityΛ‘ β identity β β½ β id ββ f βα΅’ = begin (β½ β (id ββ ((f β pβ) β id ββ id) β Ξ±β β β³ ββ id)) β id ββ (β½ β (f β β id) ββ id) β Ξ±β β β³ ββ id ββ¨ (reflβ©ββ¨ reflβ©ββ¨ elimΚ³ β.identity β©ββ¨refl) β©ββ¨refl β© - (β½ β (id ββ (f β pβ) β Ξ±β β β³ ββ id)) β id ββ (β½ β (f β β id) ββ id) β Ξ±β β β³ ββ id ββ¨ pullΚ³ (pullΚ³ (pullΚ³ (reflβ©ββ¨ reflβ©ββ¨ (reflβ©ββ¨ identityΚ³ β©ββ¨refl) β©ββ¨refl)))β© + (β½ β (id ββ (f β pβ) β Ξ±β β β³ ββ id)) β id ββ (β½ β (f β β id) ββ id) β Ξ±β β β³ ββ id ββ¨ pullΚ³ (pullΚ³ (pullΚ³ (reflβ©ββ¨ reflβ©ββ¨ (reflβ©ββ¨ identityΚ³ β©ββ¨refl) β©ββ¨refl)))β© β½ β id ββ (f β pβ) β Ξ±β β β³ ββ id β id ββ (β½ β (f β ) ββ id) β Ξ±β β β³ ββ id ββ¨ reflβ©ββ¨ pushΛ‘ splitβΛ‘ β© β½ β id ββ f β id ββ pβ β Ξ±β β β³ ββ id β id ββ (β½ β (f β ) ββ id) β Ξ±β β β³ ββ id ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ pβ-β β©ββ¨refl β© β½ β id ββ f β id ββ (Ξ»β β ! ββ id) β Ξ±β β β³ ββ id β id ββ (β½ β (f β ) ββ id) β Ξ±β β β³ ββ id ββ¨ reflβ©ββ¨ reflβ©ββ¨ pushΛ‘ splitβΛ‘ β© @@ -121,8 +121,8 @@ loopβpullβloopβsplit f fβfβ β€id = βα΅’ βΈ (identityΛ‘ β identity β½ β (id ββ β½ β Ξ±β) β (id ββ (f β f β )) ββ f β β³ ββ id ββ¨ extendΚ³ β½-assoc β¨ β½ β β½ ββ id β (id ββ (f β f β )) ββ f β β³ ββ id ββ¨ reflβ©ββ¨ reflβ©ββ¨ mergeβΚ³ β© β½ β β½ ββ id β (id ββ (f β f β ) β β³) ββ f ββ¨ reflβ©ββ¨ mergeβΛ‘ β© - β½ β id + (f β f β ) ββ f ββ¨ reflβ©ββ¨ +-commutative β©ββ¨refl β© - β½ β (f β f β ) + id ββ f ββ¨ reflβ©ββ¨ fβfβ β€id β©ββ¨refl β© + β½ β (id + (f β f β )) ββ f ββ¨ reflβ©ββ¨ +-commutative β©ββ¨refl β© + β½ β ((f β f β ) + id) ββ f ββ¨ reflβ©ββ¨ fβfβ β€id β©ββ¨refl β© β½ β id ββ f β splitβpullβloop : {A B : Obj} (f : A β B) β split f β-β§ pull f β» loop diff --git a/Data/WiringDiagram/Looped.agda b/Data/WiringDiagram/Looped.agda new file mode 100644 index 0000000..3698a60 --- /dev/null +++ b/Data/WiringDiagram/Looped.agda @@ -0,0 +1,106 @@ +{-# OPTIONS --without-K --safe #-} + +open import Categories.Category using (Category) +open import Categories.Functor using (Functor; _βF_) +open import Category.Dagger.Semiadditive using (IdempotentSemiadditiveDagger) +open import Data.WiringDiagram.Balanced using (BWD) +open import Level using (Level) +open import Category.KaroubiComplete using (KaroubiComplete) + +module Data.WiringDiagram.Looped + {o β e oβ² ββ² eβ² : Level} + {π : Category o β e} + {π : Category oβ² ββ² eβ²} + {S : IdempotentSemiadditiveDagger π} + (karoubiComplete : KaroubiComplete π) + (F : Functor (BWD S) π) + where + +open import Categories.Functor.Properties using ([_]-resp-β) +open import Category.Dagger.2-Poset using (Dagger-2-Poset; dagger-2-poset; Maps; Map) +open import Data.WiringDiagram.Balanced S using (Include; Push) +open import Data.WiringDiagram.Core S using (loop; id-β§; _β‘_) +open import Data.WiringDiagram.Equalities S using (loopβloop; loopβpushβloop) + +module π = Category π +module π = Category π +module BWD = Category (BWD S) +module F = Functor F + +open import Categories.Morphism.Idempotent π using (IsSplitIdempotent) + +module _ (A : π.Obj) where + + open KaroubiComplete karoubiComplete using (split) + open IsSplitIdempotent (split ([ F ]-resp-β (loopβloop {A}))) + + Unlooped Looped : π.Obj + Unlooped = F.β A + Looped = obj + + L : Unlooped π.β Unlooped + L = F.β loop + + Ο : Unlooped π.β Looped + Ο = retract + + forget : Looped π.β Unlooped + forget = section + + forgetβΟ : forget π.β Ο π.β L + forgetβΟ = splits + + Οβforget : Ο π.β forget π.β π.id + Οβforget = retracts + + Οβl : Ο π.β L π.β Ο + Οβl = retract-absorb + +module Push = Functor Push + +Sβ² : Dagger-2-Poset +Sβ² = dagger-2-poset S + +Merge : Functor (Maps Sβ²) π +Merge = record + { Fβ = Looped + ; Fβ = Ξ» {A} {B} f β Ο B β F.β (Push.β (map f)) β forget A + ; identity = iden + ; homomorphism = Ξ» {f = f} {g} β homo {f = f} {g} + ; F-resp-β = resp + } + where + open Map + open Category π using (_β_) + open π.HomReasoning + import Categories.Morphism.Reasoning as β-Reasoning + open β-Reasoning π + iden : {A : π.Obj} β Ο A β F.β (Push.β π.id) β forget A π.β π.id + iden {A} = begin + Ο A β F.β (Push.β π.id) β forget A ββ¨ reflβ©ββ¨ F.F-resp-β Push.identity β©ββ¨refl β© + Ο A β F.β BWD.id β forget A ββ¨ reflβ©ββ¨ elimΛ‘ F.identity β© + Ο A β forget A ββ¨ Οβforget A β© + π.id β + homo + : {X Y Z : π.Obj} + {f : Map Sβ² X Y} + {g : Map Sβ² Y Z} + β Ο Z β F.β (Push.β (map g π.β map f)) β forget X π.β (Ο Z β F.β (Push.β (map g)) β forget Y) β Ο Y β F.β (Push.β (map f)) β forget X + homo {X} {Y} {Z} {fβ²} {gβ²} = begin + Ο Z β F.β (Push.β (g π.β f)) β forget X ββ¨ reflβ©ββ¨ F.F-resp-β Push.homomorphism β©ββ¨refl β© + Ο Z β F.β (Push.β g BWD.β Push.β f) β forget X ββ¨ reflβ©ββ¨ pushΛ‘ F.homomorphism β© + Ο Z β F.β (Push.β g) β F.β (Push.β f) β forget X ββ¨ pushΛ‘ (π.Equiv.sym (Οβl Z)) β© + Ο Z β L Z β F.β (Push.β g) β F.β (Push.β f) β forget X ββ¨ reflβ©ββ¨ pullΛ‘ (π.Equiv.sym F.homomorphism) β© + Ο Z β F.β (loop BWD.β Push.β g) β F.β (Push.β f) β forget X ββ¨ reflβ©ββ¨ F.F-resp-β (loopβpushβloop g (entire gβ²)) β©ββ¨refl β¨ + Ο Z β F.β (loop BWD.β Push.β g BWD.β loop) β F.β (Push.β f) β forget X ββ¨ reflβ©ββ¨ pushΛ‘ F.homomorphism β© + Ο Z β L Z β F.β (Push.β g BWD.β loop) β F.β (Push.β f) β forget X ββ¨ reflβ©ββ¨ reflβ©ββ¨ pushΛ‘ F.homomorphism β© + Ο Z β L Z β F.β (Push.β g) β L Y β F.β (Push.β f) β forget X ββ¨ pullΛ‘ (Οβl Z) β© + Ο Z β F.β (Push.β g) β L Y β F.β (Push.β f) β forget X ββ¨ pushΚ³ (pushΚ³ (pushΛ‘ (π.Equiv.sym (forgetβΟ Y)))) β© + (Ο Z β F.β (Push.β g) β forget Y) β Ο Y β F.β (Push.β f) β forget X β + where + f : X π.β Y + f = map fβ² + g : Y π.β Z + g = map gβ² + resp : {A B : π.Obj} {f g : A π.β B} β f π.β g β Ο B β F.β (Push.β f) β forget A π.β Ο B β F.β (Push.β g) β forget A + resp {A} {B} {f} {g} fβg = reflβ©ββ¨ F.F-resp-β (Push.F-resp-β fβg) β©ββ¨refl |
