0 | module Control.Category.Records.Braided
2 | import Control.Category
3 | import Control.Category.Records.Category
4 | import Control.Category.Records.Functor
5 | import Control.Category.Records.Monoidal
6 | import Data.Morphisms
9 | %prefix_record_projections off
21 | record BraidedR where
22 | constructor MkBraidedR
24 | tensor : obj -> obj -> obj
26 | {auto impl : Braided hom tensor unit}
31 | PreBraidedR = BraidedR
35 | public export %inline
36 | (.categoryR) : (rec : BraidedR) -> CategoryR
37 | (.categoryR) (MkBraidedR {} {hom}) = MkCategoryR hom
40 | public export %inline
41 | (.id) : (rec : BraidedR) -> {a : _} -> rec.hom a a
42 | (.id) rec@(MkBraidedR {}) = rec.categoryR.id
45 | public export %inline
46 | (.comp) : (rec : BraidedR) -> {a,b,c : _} ->
47 | rec.hom b c -> rec.hom a b -> rec.hom a c
48 | (.comp) rec@(MkBraidedR {}) = rec.categoryR.comp
52 | public export %inline
53 | (.tensorR) : (rec : BraidedR) -> EndoBifunctorR rec.categoryR
54 | (.tensorR) (MkBraidedR {} {tensor}) = MkBifunctorR tensor
58 | public export %inline
59 | (.monoidalR) : (rec : BraidedR) -> MonoidalR
60 | (.monoidalR) (MkBraidedR {} {hom,tensor,unit}) = MkMonoidalR hom tensor unit
63 | public export %inline
64 | (.assoc) : (rec : BraidedR) -> {a,b,c : _} ->
65 | rec.hom (rec.tensor (rec.tensor a b) c) (rec.tensor a (rec.tensor b c))
66 | (.assoc) rec@(MkBraidedR {}) = rec.monoidalR.assoc
69 | public export %inline
70 | (.assoc') : (rec : BraidedR) -> {a,b,c : _} ->
71 | rec.hom (rec.tensor a (rec.tensor b c)) (rec.tensor (rec.tensor a b) c)
72 | (.assoc') rec@(MkBraidedR {}) = rec.monoidalR.assoc'
75 | public export %inline
76 | (.unitl) : (rec : BraidedR) -> {a : _} ->
77 | rec.hom (rec.tensor rec.unit a) a
78 | (.unitl) rec@(MkBraidedR {}) = rec.monoidalR.unitl
81 | public export %inline
82 | (.unitl') : (rec : BraidedR) -> {a : _} ->
83 | rec.hom a (rec.tensor rec.unit a)
84 | (.unitl') rec@(MkBraidedR {}) = rec.monoidalR.unitl'
87 | public export %inline
88 | (.unitr) : (rec : BraidedR) -> {a : _} ->
89 | rec.hom (rec.tensor a rec.unit) a
90 | (.unitr) rec@(MkBraidedR {}) = rec.monoidalR.unitr
93 | public export %inline
94 | (.unitr') : (rec : BraidedR) -> {a : _} ->
95 | rec.hom a (rec.tensor a rec.unit)
96 | (.unitr') rec@(MkBraidedR {}) = rec.monoidalR.unitr'
100 | public export %inline
101 | (.braidedR) : (rec : BraidedR) -> BraidedR
105 | public export %inline
106 | (.braid) : (rec : BraidedR) -> {a,b : _} ->
107 | rec.hom (rec.tensor a b) (rec.tensor b a)
108 | (.braid) rec = braid @{rec.impl}
111 | public export %inline
112 | (.braid') : (rec : BraidedR) -> {a,b : _} ->
113 | rec.hom (rec.tensor b a) (rec.tensor a b)
114 | (.braid') rec = braid' @{rec.impl}
119 | (.flipBraid) : (rec : BraidedR) -> BraidedR
120 | (.flipBraid) (MkBraidedR hom ten i) =
121 | MkBraidedR hom ten i {impl = FlipBraid}