aboutsummaryrefslogtreecommitdiff
path: root/Category/Instance/SymMonCat.agda
blob: e4b136c35945db2306d3523a9fea41c153033326 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
{-# OPTIONS --without-K --safe #-}
{-# OPTIONS --lossy-unification #-}

open import Level using (Level; suc; _⊔_)
module Category.Instance.SymMonCat {o  e : Level} where

import Categories.Category.Monoidal.Reasoning as ⊗-Reasoning
import Categories.Functor.Monoidal.Symmetric as SMF
import Categories.Morphism.Reasoning as ⇒-Reasoning
import Categories.Morphism as Morphism
import Categories.NaturalTransformation.NaturalIsomorphism.Monoidal.Symmetric as SMNI
import Categories.Category.Monoidal.Utilities as MonoidalUtil
import Categories.Category.Monoidal.Braided.Properties as BraidedProperties
open import Relation.Binary.Core using (Rel)

open import Categories.Category using (Category; _[_,_]; _[_∘_])
open import Categories.Category.Helper using (categoryHelper)
open import Categories.Category.Monoidal.Bundle using (SymmetricMonoidalCategory)
open import Categories.Functor.Monoidal.Properties using (idF-SymmetricMonoidal; ∘-SymmetricMonoidal)

open SMF.Lax using (SymmetricMonoidalFunctor)
open SMNI.Lax using (SymmetricMonoidalNaturalIsomorphism; id; isEquivalence)

assoc
    : {A B C D : SymmetricMonoidalCategory o  e}
      {F : SymmetricMonoidalFunctor A B}
      {G : SymmetricMonoidalFunctor B C}
      {H : SymmetricMonoidalFunctor C D}
     SymmetricMonoidalNaturalIsomorphism
        (∘-SymmetricMonoidal (∘-SymmetricMonoidal H G) F)
        (∘-SymmetricMonoidal H (∘-SymmetricMonoidal G F))
assoc {A} {B} {C} {D} {F} {G} {H} = SMNI.Lax.associator {o} {} {e} {o} {} {e} {o} {} {e} {o} {} {e} {A} {B} {C} {D} {F} {G} {H}

identityˡ
    : {A B : SymmetricMonoidalCategory o  e}
      {F : SymmetricMonoidalFunctor A B}
     SymmetricMonoidalNaturalIsomorphism (∘-SymmetricMonoidal (idF-SymmetricMonoidal B) F) F
identityˡ {A} {B} {F} = SMNI.Lax.unitorˡ {o} {} {e} {o} {} {e} {A} {B} {F}

identityʳ
    : {A B : SymmetricMonoidalCategory o  e}
      {F : SymmetricMonoidalFunctor A B}
     SymmetricMonoidalNaturalIsomorphism (∘-SymmetricMonoidal F (idF-SymmetricMonoidal A)) F
identityʳ {A} {B} {F} = SMNI.Lax.unitorʳ {o} {} {e} {o} {} {e} {A} {B} {F}

Compose
    : {A B C : SymmetricMonoidalCategory o  e}
     SymmetricMonoidalFunctor B C
     SymmetricMonoidalFunctor A B
     SymmetricMonoidalFunctor A C
Compose {A} {B} {C} F G = ∘-SymmetricMonoidal {o} {} {e} {o} {} {e} {o} {} {e} {A} {B} {C} F G

∘-resp-≈
    : {A B C : SymmetricMonoidalCategory o  e}
      {f h : SymmetricMonoidalFunctor B C}
      {g i : SymmetricMonoidalFunctor A B}
     SymmetricMonoidalNaturalIsomorphism f h
     SymmetricMonoidalNaturalIsomorphism g i
     SymmetricMonoidalNaturalIsomorphism (∘-SymmetricMonoidal f g) (∘-SymmetricMonoidal h i)
∘-resp-≈ {A} {B} {C} {F} {F′} {G} {G′} F≃F′ G≃G′ = SMNI.Lax._ⓘₕ_ {o} {} {e} {o} {} {e} {o} {} {e} {A} {B} {C} {G} {G′} {F} {F′} F≃F′ G≃G′

SymMonCat : Category (suc (o    e)) (o    e) (o    e)
SymMonCat = categoryHelper record
    { Obj = SymmetricMonoidalCategory o  e
    ; _⇒_ = SymmetricMonoidalFunctor {o} {o} {} {} {e} {e}
    ; _≈_ = λ { {A} {B}  SymmetricMonoidalNaturalIsomorphism {o} {} {e} {o} {} {e} {A} {B} }
    ; id = λ { {X}  idF-SymmetricMonoidal X }
    ; _∘_ = λ { {A} {B} {C} F G  Compose {A} {B} {C} F G }
    ; assoc = λ { {A} {B} {C} {D} {F} {G} {H}  assoc {A} {B} {C} {D} {F} {G} {H} }
    ; identityˡ = λ { {A} {B} {F}  identityˡ {A} {B} {F} }
    ; identityʳ = λ { {A} {B} {F}  identityʳ {A} {B} {F} }
    ; equiv = isEquivalence
    ; ∘-resp-≈ = λ { {A} {B} {C} {f} {h} {g} {i} f≈h g≈i  ∘-resp-≈ {A} {B} {C} {f} {h} {g} {i} f≈h g≈i }
    }