0 | module Control.Category.Records.Bimonoidal
2 | import Control.Category
3 | import Control.Category.Records.Category
4 | import Control.Category.Records.Functor
5 | import Control.Category.Records.Monoidal
6 | import Control.Category.Records.Braided
7 | import Control.Category.Records.Cartesian
8 | import Control.Category.Records.Cocartesian
9 | import Data.Morphisms
12 | %prefix_record_projections off
18 | record BimonoidalR where
19 | constructor MkBimonoidalR
21 | add, mul : obj -> obj -> obj
23 | {auto impl : Bimonoidal hom add mul zero one}
27 | PreBimonoidalR : Type
28 | PreBimonoidalR = BimonoidalR
30 | namespace BimonoidalR
32 | public export %inline
33 | (.categoryR) : (rec : BimonoidalR) -> CategoryR
34 | (.categoryR) (MkBimonoidalR {} {hom}) = MkCategoryR hom
37 | public export %inline
38 | (.id) : (rec : BimonoidalR) -> {a : _} -> rec.hom a a
39 | (.id) (MkBimonoidalR {}) = id
42 | public export %inline
43 | (.comp) : (rec : BimonoidalR) -> {a,b,c : _} ->
44 | rec.hom b c -> rec.hom a b -> rec.hom a c
45 | (.comp) (MkBimonoidalR {}) = (.)
49 | public export %inline
50 | (.addR) : (rec : BimonoidalR) -> EndoBifunctorR rec.categoryR
51 | (.addR) (MkBimonoidalR {} {add}) = MkBifunctorR add
54 | public export %inline
55 | (.mulR) : (rec : BimonoidalR) -> EndoBifunctorR rec.categoryR
56 | (.mulR) (MkBimonoidalR {} {mul}) = MkBifunctorR mul
59 | public export %inline
60 | (.addCatR) : (rec : BimonoidalR) -> MonoidalR
61 | (.addCatR) (MkBimonoidalR {} {hom,add,zero}) = MkMonoidalR hom add zero
64 | public export %inline
65 | (.mulCatR) : (rec : BimonoidalR) -> MonoidalR
66 | (.mulCatR) (MkBimonoidalR {} {hom,mul,one}) = MkMonoidalR hom mul one
70 | public export %inline
71 | (.bimonoidalR) : (rec : BimonoidalR) -> BimonoidalR
75 | public export %inline
76 | (.distribl) : (rec : BimonoidalR) -> {a,b,c : _} ->
77 | rec.hom (rec.mul a (rec.add b c)) (rec.add (rec.mul a b) (rec.mul a c))
78 | (.distribl) (MkBimonoidalR {}) = distribl
81 | public export %inline
82 | (.distribl') : (rec : BimonoidalR) -> {a,b,c : _} ->
83 | rec.hom (rec.add (rec.mul a b) (rec.mul a c)) (rec.mul a (rec.add b c))
84 | (.distribl') (MkBimonoidalR {}) = distribl'
87 | public export %inline
88 | (.distribr) : (rec : BimonoidalR) -> {a,b,c : _} ->
89 | rec.hom (rec.mul (rec.add a b) c) (rec.add (rec.mul a c) (rec.mul b c))
90 | (.distribr) (MkBimonoidalR {}) = distribr
93 | public export %inline
94 | (.distribr') : (rec : BimonoidalR) -> {a,b,c : _} ->
95 | rec.hom (rec.add (rec.mul a c) (rec.mul b c)) (rec.mul (rec.add a b) c)
96 | (.distribr') (MkBimonoidalR {}) = distribr'
99 | public export %inline
100 | (.absorbl) : (rec : BimonoidalR) -> {a : _} -> rec.hom (rec.mul a rec.zero) rec.zero
101 | (.absorbl) (MkBimonoidalR {} {impl}) = absorbl @{impl}
104 | public export %inline
105 | (.absorbl') : (rec : BimonoidalR) -> {a : _} -> rec.hom rec.zero (rec.mul a rec.zero)
106 | (.absorbl') (MkBimonoidalR {} {impl}) = absorbl' @{impl}
109 | public export %inline
110 | (.absorbr) : (rec : BimonoidalR) -> {a : _} -> rec.hom (rec.mul rec.zero a) rec.zero
111 | (.absorbr) (MkBimonoidalR {} {impl}) = absorbr @{impl}
114 | public export %inline
115 | (.absorbr') : (rec : BimonoidalR) -> {a : _} -> rec.hom rec.zero (rec.mul rec.zero a)
116 | (.absorbr') (MkBimonoidalR {} {impl}) = absorbr' @{impl}
123 | record RigCategoryR where
124 | constructor MkRigCategoryR
126 | add, mul : obj -> obj -> obj
128 | {auto impl : RigCategory hom add mul zero one}
132 | PreRigCategoryR : Type
133 | PreRigCategoryR = RigCategoryR
135 | namespace RigCategoryR
137 | public export %inline
138 | (.categoryR) : (rec : RigCategoryR) -> CategoryR
139 | (.categoryR) (MkRigCategoryR {} {hom}) = MkCategoryR hom
142 | public export %inline
143 | (.id) : (rec : RigCategoryR) -> {a : _} -> rec.hom a a
144 | (.id) (MkRigCategoryR {}) = id
147 | public export %inline
148 | (.comp) : (rec : RigCategoryR) -> {a,b,c : _} ->
149 | rec.hom b c -> rec.hom a b -> rec.hom a c
150 | (.comp) (MkRigCategoryR {}) = (.)
154 | public export %inline
155 | (.addR) : (rec : RigCategoryR) -> EndoBifunctorR rec.categoryR
156 | (.addR) (MkRigCategoryR {} {add}) = MkBifunctorR add
159 | public export %inline
160 | (.mulR) : (rec : RigCategoryR) -> EndoBifunctorR rec.categoryR
161 | (.mulR) (MkRigCategoryR {} {mul}) = MkBifunctorR mul
164 | public export %inline
165 | (.addCatR) : (rec : RigCategoryR) -> SymmetricR
166 | (.addCatR) (MkRigCategoryR {} {hom,add,zero}) = MkSymmetricR hom add zero
169 | public export %inline
170 | (.mulCatR) : (rec : RigCategoryR) -> MonoidalR
171 | (.mulCatR) (MkRigCategoryR {} {hom,mul,one}) = MkMonoidalR hom mul one
175 | public export %inline
176 | (.bimonoidalR) : (rec : RigCategoryR) -> BimonoidalR
177 | (.bimonoidalR) (MkRigCategoryR hom add mul zero one) = MkBimonoidalR hom add mul zero one
180 | public export %inline
181 | (.distribl) : (rec : RigCategoryR) -> {a,b,c : _} ->
182 | rec.hom (rec.mul a (rec.add b c)) (rec.add (rec.mul a b) (rec.mul a c))
183 | (.distribl) (MkRigCategoryR {}) = distribl
186 | public export %inline
187 | (.distribl') : (rec : RigCategoryR) -> {a,b,c : _} ->
188 | rec.hom (rec.add (rec.mul a b) (rec.mul a c)) (rec.mul a (rec.add b c))
189 | (.distribl') (MkRigCategoryR {}) = distribl'
192 | public export %inline
193 | (.distribr) : (rec : RigCategoryR) -> {a,b,c : _} ->
194 | rec.hom (rec.mul (rec.add a b) c) (rec.add (rec.mul a c) (rec.mul b c))
195 | (.distribr) (MkRigCategoryR {}) = distribr
198 | public export %inline
199 | (.distribr') : (rec : RigCategoryR) -> {a,b,c : _} ->
200 | rec.hom (rec.add (rec.mul a c) (rec.mul b c)) (rec.mul (rec.add a b) c)
201 | (.distribr') (MkRigCategoryR {}) = distribr'
204 | public export %inline
205 | (.absorbl) : (rec : RigCategoryR) -> {a : _} -> rec.hom (rec.mul a rec.zero) rec.zero
206 | (.absorbl) (MkRigCategoryR {} {add,mul}) = absorbl {add,mul}
209 | public export %inline
210 | (.absorbl') : (rec : RigCategoryR) -> {a : _} -> rec.hom rec.zero (rec.mul a rec.zero)
211 | (.absorbl') (MkRigCategoryR {} {add,mul}) = absorbl' {add,mul}
214 | public export %inline
215 | (.absorbr) : (rec : RigCategoryR) -> {a : _} -> rec.hom (rec.mul rec.zero a) rec.zero
216 | (.absorbr) (MkRigCategoryR {} {add,mul}) = absorbr {add,mul}
219 | public export %inline
220 | (.absorbr') : (rec : RigCategoryR) -> {a : _} -> rec.hom rec.zero (rec.mul rec.zero a)
221 | (.absorbr') (MkRigCategoryR {} {add,mul}) = absorbr' {add,mul}
225 | public export %inline
226 | (.rigCategoryR) : (rec : RigCategoryR) -> RigCategoryR
227 | (.rigCategoryR) = id
231 | record SymRigCategoryR where
232 | constructor MkSymRigCategoryR
234 | add, mul : obj -> obj -> obj
236 | {auto impl : SymRigCategory hom add mul zero one}
239 | PreSymRigCategoryR : Type
240 | PreSymRigCategoryR = SymRigCategoryR
242 | namespace SymRigCategoryR
244 | public export %inline
245 | (.categoryR) : (rec : SymRigCategoryR) -> CategoryR
246 | (.categoryR) (MkSymRigCategoryR {} {hom}) = MkCategoryR hom
249 | public export %inline
250 | (.id) : (rec : SymRigCategoryR) -> {a : _} -> rec.hom a a
251 | (.id) (MkSymRigCategoryR {}) = id
254 | public export %inline
255 | (.comp) : (rec : SymRigCategoryR) -> {a,b,c : _} ->
256 | rec.hom b c -> rec.hom a b -> rec.hom a c
257 | (.comp) (MkSymRigCategoryR {}) = (.)
261 | public export %inline
262 | (.addR) : (rec : SymRigCategoryR) -> EndoBifunctorR rec.categoryR
263 | (.addR) (MkSymRigCategoryR {} {add}) = MkBifunctorR add
266 | public export %inline
267 | (.mulR) : (rec : SymRigCategoryR) -> EndoBifunctorR rec.categoryR
268 | (.mulR) (MkSymRigCategoryR {} {mul}) = MkBifunctorR mul
271 | public export %inline
272 | (.addCatR) : (rec : SymRigCategoryR) -> SymmetricR
273 | (.addCatR) (MkSymRigCategoryR {} {hom,add,zero}) = MkSymmetricR hom add zero
276 | public export %inline
277 | (.mulCatR) : (rec : SymRigCategoryR) -> SymmetricR
278 | (.mulCatR) (MkSymRigCategoryR {} {hom,mul,one}) = MkSymmetricR hom mul one
282 | public export %inline
283 | (.bimonoidalR) : (rec : SymRigCategoryR) -> BimonoidalR
284 | (.bimonoidalR) (MkSymRigCategoryR hom add mul zero one) = MkBimonoidalR hom add mul zero one
287 | public export %inline
288 | (.distribl) : (rec : SymRigCategoryR) -> {a,b,c : _} ->
289 | rec.hom (rec.mul a (rec.add b c)) (rec.add (rec.mul a b) (rec.mul a c))
290 | (.distribl) (MkSymRigCategoryR {}) = distribl
293 | public export %inline
294 | (.distribl') : (rec : SymRigCategoryR) -> {a,b,c : _} ->
295 | rec.hom (rec.add (rec.mul a b) (rec.mul a c)) (rec.mul a (rec.add b c))
296 | (.distribl') (MkSymRigCategoryR {}) = distribl'
299 | public export %inline
300 | (.distribr) : (rec : SymRigCategoryR) -> {a,b,c : _} ->
301 | rec.hom (rec.mul (rec.add a b) c) (rec.add (rec.mul a c) (rec.mul b c))
302 | (.distribr) (MkSymRigCategoryR {}) = distribr
305 | public export %inline
306 | (.distribr') : (rec : SymRigCategoryR) -> {a,b,c : _} ->
307 | rec.hom (rec.add (rec.mul a c) (rec.mul b c)) (rec.mul (rec.add a b) c)
308 | (.distribr') (MkSymRigCategoryR {}) = distribr'
311 | public export %inline
312 | (.absorbl) : (rec : SymRigCategoryR) -> {a : _} -> rec.hom (rec.mul a rec.zero) rec.zero
313 | (.absorbl) (MkSymRigCategoryR {} {add,mul}) = absorbl {add,mul}
316 | public export %inline
317 | (.absorbl') : (rec : SymRigCategoryR) -> {a : _} -> rec.hom rec.zero (rec.mul a rec.zero)
318 | (.absorbl') (MkSymRigCategoryR {} {add,mul}) = absorbl' {add,mul}
321 | public export %inline
322 | (.absorbr) : (rec : SymRigCategoryR) -> {a : _} -> rec.hom (rec.mul rec.zero a) rec.zero
323 | (.absorbr) (MkSymRigCategoryR {} {add,mul}) = absorbr {add,mul}
326 | public export %inline
327 | (.absorbr') : (rec : SymRigCategoryR) -> {a : _} -> rec.hom rec.zero (rec.mul rec.zero a)
328 | (.absorbr') (MkSymRigCategoryR {} {add,mul}) = absorbr' {add,mul}
332 | public export %inline
333 | (.rigCategoryR) : (rec : SymRigCategoryR) -> RigCategoryR
334 | (.rigCategoryR) (MkSymRigCategoryR hom add mul z i) = MkRigCategoryR hom add mul z i
337 | public export %inline
338 | (.symRigCategoryR) : (rec : SymRigCategoryR) -> SymRigCategoryR
339 | (.symRigCategoryR) = id
343 | record DistributiveR where
344 | constructor MkDistributiveR
346 | add, mul : obj -> obj -> obj
348 | {auto impl : Distributive hom add mul zero one}
351 | PreDistributiveR : Type
352 | PreDistributiveR = DistributiveR
354 | namespace DistributiveR
356 | public export %inline
357 | (.categoryR) : (rec : DistributiveR) -> CategoryR
358 | (.categoryR) (MkDistributiveR {} {hom}) = MkCategoryR hom
361 | public export %inline
362 | (.id) : (rec : DistributiveR) -> {a : _} -> rec.hom a a
363 | (.id) (MkDistributiveR {}) = id
366 | public export %inline
367 | (.comp) : (rec : DistributiveR) -> {a,b,c : _} ->
368 | rec.hom b c -> rec.hom a b -> rec.hom a c
369 | (.comp) (MkDistributiveR {}) = (.)
373 | public export %inline
374 | (.addR) : (rec : DistributiveR) -> EndoBifunctorR rec.categoryR
375 | (.addR) (MkDistributiveR {} {add}) = MkBifunctorR add
378 | public export %inline
379 | (.mulR) : (rec : DistributiveR) -> EndoBifunctorR rec.categoryR
380 | (.mulR) (MkDistributiveR {} {mul}) = MkBifunctorR mul
383 | public export %inline
384 | (.addCatR) : (rec : DistributiveR) -> CocartesianR
385 | (.addCatR) (MkDistributiveR {} {hom,add,zero}) = MkCocartesianR hom add zero
388 | public export %inline
389 | (.mulCatR) : (rec : DistributiveR) -> CartesianR
390 | (.mulCatR) (MkDistributiveR {} {hom,mul,one}) = MkCartesianR hom mul one
394 | public export %inline
395 | (.bimonoidalR) : (rec : DistributiveR) -> BimonoidalR
396 | (.bimonoidalR) (MkDistributiveR hom add mul zero one) = MkBimonoidalR hom add mul zero one
399 | public export %inline
400 | (.distribl) : (rec : DistributiveR) -> {a,b,c : _} ->
401 | rec.hom (rec.mul a (rec.add b c)) (rec.add (rec.mul a b) (rec.mul a c))
402 | (.distribl) (MkDistributiveR {}) = distribl
405 | public export %inline
406 | (.distribl') : (rec : DistributiveR) -> {a,b,c : _} ->
407 | rec.hom (rec.add (rec.mul a b) (rec.mul a c)) (rec.mul a (rec.add b c))
408 | (.distribl') (MkDistributiveR {}) = distribl'
411 | public export %inline
412 | (.distribr) : (rec : DistributiveR) -> {a,b,c : _} ->
413 | rec.hom (rec.mul (rec.add a b) c) (rec.add (rec.mul a c) (rec.mul b c))
414 | (.distribr) (MkDistributiveR {}) = distribr
417 | public export %inline
418 | (.distribr') : (rec : DistributiveR) -> {a,b,c : _} ->
419 | rec.hom (rec.add (rec.mul a c) (rec.mul b c)) (rec.mul (rec.add a b) c)
420 | (.distribr') (MkDistributiveR {}) = distribr'
423 | public export %inline
424 | (.absorbl) : (rec : DistributiveR) -> {a : _} -> rec.hom (rec.mul a rec.zero) rec.zero
425 | (.absorbl) (MkDistributiveR {} {add,mul}) = absorbl {add,mul}
428 | public export %inline
429 | (.absorbl') : (rec : DistributiveR) -> {a : _} -> rec.hom rec.zero (rec.mul a rec.zero)
430 | (.absorbl') (MkDistributiveR {} {add,mul}) = absorbl' {add,mul}
433 | public export %inline
434 | (.absorbr) : (rec : DistributiveR) -> {a : _} -> rec.hom (rec.mul rec.zero a) rec.zero
435 | (.absorbr) (MkDistributiveR {} {add,mul}) = absorbr {add,mul}
438 | public export %inline
439 | (.absorbr') : (rec : DistributiveR) -> {a : _} -> rec.hom rec.zero (rec.mul rec.zero a)
440 | (.absorbr') (MkDistributiveR {} {add,mul}) = absorbr' {add,mul}
444 | public export %inline
445 | (.rigCategoryR) : (rec : DistributiveR) -> RigCategoryR
446 | (.rigCategoryR) (MkDistributiveR hom add mul z i) = MkRigCategoryR hom add mul z i
449 | public export %inline
450 | (.symRigCategoryR) : (rec : DistributiveR) -> SymRigCategoryR
451 | (.symRigCategoryR) (MkDistributiveR hom add mul z i) = MkSymRigCategoryR hom add mul z i
454 | public export %inline
455 | (.distributiveR) : (rec : DistributiveR) -> DistributiveR
456 | (.distributiveR) = id
459 | public export %inline
460 | (.projl) : (rec : DistributiveR) -> {a,b : _} ->
461 | rec.hom (rec.mul a b) a
462 | (.projl) (MkDistributiveR {}) = projl
465 | public export %inline
466 | (.projr) : (rec : DistributiveR) -> {a,b : _} ->
467 | rec.hom (rec.mul a b) b
468 | (.projr) (MkDistributiveR {}) = projr
471 | public export %inline
472 | (.prod) : (rec : DistributiveR) -> {a,b,b' : _} ->
473 | rec.hom a b -> rec.hom a b' -> rec.hom a (rec.mul b b')
474 | (.prod) (MkDistributiveR {}) = prod
477 | public export %inline
478 | (.split) : (rec : DistributiveR) -> {a : _} ->
479 | rec.hom a (rec.mul a a)
480 | (.split) (MkDistributiveR {}) = split
483 | public export %inline
484 | (.elim) : (rec : DistributiveR) -> {a : _} ->
486 | (.elim) (MkDistributiveR {} {mul}) = elim {ten=mul}
489 | public export %inline
490 | (.injl) : (rec : DistributiveR) -> {a,b : _} ->
491 | rec.hom a (rec.add a b)
492 | (.injl) (MkDistributiveR {}) = injl
495 | public export %inline
496 | (.injr) : (rec : DistributiveR) -> {a,b : _} ->
497 | rec.hom b (rec.add a b)
498 | (.injr) (MkDistributiveR {}) = injr
501 | public export %inline
502 | (.coprod) : (rec : DistributiveR) -> {a,a',b : _} ->
503 | rec.hom a b -> rec.hom a' b -> rec.hom (rec.add a a') b
504 | (.coprod) (MkDistributiveR {}) = coprod
507 | public export %inline
508 | (.merge) : (rec : DistributiveR) -> {a : _} ->
509 | rec.hom (rec.add a a) a
510 | (.merge) (MkDistributiveR {}) = merge
513 | public export %inline
514 | (.intro) : (rec : DistributiveR) -> {a : _} ->
516 | (.intro) (MkDistributiveR {} {add}) = intro {ten=add}