Skip to content

Commit 086e974

Browse files
Merge pull request #492 from jacquescomeaux/monoidal-refactor
Clean up monoidal functor properties
2 parents 56790e4 + bc3eac3 commit 086e974

File tree

22 files changed

+690
-436
lines changed

22 files changed

+690
-436
lines changed

src/Categories/Category/Instance/Properties/Cats.agda

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ open import Categories.Category.Monoidal.Instance.Cats
1616
open import Categories.Functor using (Functor; _∘F_) renaming (id to idF)
1717
open import Categories.Functor.Bifunctor using (Bifunctor)
1818
open import Categories.Functor.Construction.Constant using (constNat)
19+
import Categories.Morphism.Properties as MP
1920
import Categories.Morphism.Reasoning as MR
2021
open import Categories.NaturalTransformation
2122
using (NaturalTransformation; _∘ˡ_) renaming (id to idNT)
2223
open import Categories.NaturalTransformation.NaturalIsomorphism
23-
using (NaturalIsomorphism; _≃_; module LeftRightId)
24+
using (NaturalIsomorphism; _≃_)
2425
open import Categories.Object.Terminal using (Terminal)
2526

2627
-- It's easier to define exponentials with respect to the *canonical*
@@ -55,14 +56,14 @@ module CanonicallyCartesianClosed {l} where
5556
; commute = λ _ ⟺ (MR.id-comm B ○ ∘-resp-≈ʳ B commute)
5657
; sym-commute = λ _ MR.id-comm B ○ ∘-resp-≈ʳ B commute
5758
}
58-
; iso = iso-id-id
59+
; iso = λ _ id-iso
5960
}
6061
where
6162
open Functor G renaming (F₀ to G₀; F₁ to G₁)
6263
open Category hiding (_∘_)
6364
open Category B using (_∘_)
6465
open HomReasoning B
65-
open LeftRightId G
66+
open MP B
6667

6768
commute : {a₁ a₂ b₁ b₂} {f₁ : C [ a₁ , b₁ ]} {f₂ : A [ a₂ , b₂ ]}
6869
B [ (G₁ (f₁ , id A) ∘ G₁ (id C , f₂)) ≈ G₁ (f₁ , f₂) ]
@@ -105,7 +106,6 @@ module CanonicallyCartesianClosed {l} where
105106
open Category B using (_∘_)
106107
open HomReasoning B
107108
open NaturalTransformation
108-
open LeftRightId H
109109

110110
commute₁ : {a b c} (f : A [ a , b ])
111111
B [ (η (H₁ (id C)) b ∘ (H₀ c $₁ f)) ≈ H₀ c $₁ f ]

src/Categories/Category/Monoidal/Braided/Properties.agda

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{-# OPTIONS --without-K --safe #-}
22

33
open import Categories.Category using (Category; module Commutation)
4-
open import Categories.Category.Monoidal
4+
open import Categories.Category.Monoidal.Core
55
open import Categories.Category.Monoidal.Braided using (Braided)
66

77
module Categories.Category.Monoidal.Braided.Properties
@@ -15,9 +15,9 @@ open import Categories.Category.Monoidal.Reasoning M
1515
import Categories.Category.Monoidal.Utilities M as MonoidalUtilities
1616
open import Categories.Functor using (Functor)
1717
open import Categories.Morphism.Reasoning C hiding (push-eq)
18-
open import Categories.NaturalTransformation.NaturalIsomorphism using (niHelper)
18+
open import Categories.NaturalTransformation.NaturalIsomorphism using (niHelper; module )
1919
open import Categories.NaturalTransformation.NaturalIsomorphism.Properties
20-
using (push-eq)
20+
using (push-eq; flip-bifunctor-NI)
2121

2222
open Category C
2323
open Commutation C
@@ -136,18 +136,29 @@ braiding-coherence-inv = to-≈ braiding-coherence-iso
136136

137137
inv-Braided : Braided M
138138
inv-Braided = record
139-
{ braiding = niHelper (record
140-
{ η = λ _ σ⇐
141-
; η⁻¹ = λ _ σ⇒
142-
; commute = λ{ (f , g) braiding.⇐.commute (g , f) }
143-
; iso = λ{ (X , Y) record
144-
{ isoˡ = braiding.iso.isoʳ (Y , X)
145-
; isoʳ = braiding.iso.isoˡ (Y , X) } }
146-
})
139+
{ braiding = ≃.sym (flip-bifunctor-NI braiding)
147140
; hexagon₁ = hexagon₂-inv
148141
; hexagon₂ = hexagon₁-inv
149142
}
150143

144+
-- The opposite monoidal category is braided.
145+
146+
braided-Op : Braided monoidal-Op
147+
braided-Op = record
148+
{ braiding = braiding.op′
149+
; hexagon₁ = hexagon₁-inv
150+
; hexagon₂ = hexagon₂-inv
151+
}
152+
153+
-- The inverse of the braiding is also a braiding on the opposite monoidal category.
154+
155+
inv-braided-Op : Braided monoidal-Op
156+
inv-braided-Op = record
157+
{ braiding = ≃.sym (flip-bifunctor-NI braiding.op′)
158+
; hexagon₁ = hexagon₂
159+
; hexagon₂ = hexagon₁
160+
}
161+
151162
-- A variant of the above coherence law for the inverse of the braiding.
152163

153164
inv-braiding-coherence : [ unit ⊗₀ X ⇒ X ]⟨

src/Categories/Category/Monoidal/Bundle.agda

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,52 @@ open import Level
77

88
open import Categories.Category.Core using (Category)
99
open import Categories.Category.Monoidal.Core using (Monoidal)
10+
open import Categories.Category.Monoidal.Properties using (monoidal-Op)
1011
open import Categories.Category.Monoidal.Braided using (Braided)
12+
open import Categories.Category.Monoidal.Braided.Properties using (braided-Op)
1113
open import Categories.Category.Monoidal.Symmetric using (Symmetric)
14+
open import Categories.Category.Monoidal.Symmetric.Properties using (symmetric-Op)
1215

1316
record MonoidalCategory o ℓ e : Set (suc (o ⊔ ℓ ⊔ e)) where
1417
field
1518
U : Category o ℓ e
1619
monoidal : Monoidal U
1720

18-
open Category U public
21+
open Category U hiding (op) public
1922
open Monoidal monoidal public
2023

24+
op : MonoidalCategory o ℓ e
25+
op = record { monoidal = monoidal-Op monoidal }
26+
2127
record BraidedMonoidalCategory o ℓ e : Set (suc (o ⊔ ℓ ⊔ e)) where
2228
field
2329
U : Category o ℓ e
2430
monoidal : Monoidal U
2531
braided : Braided monoidal
2632

2733
monoidalCategory : MonoidalCategory o ℓ e
28-
monoidalCategory = record { U = U ; monoidal = monoidal }
34+
monoidalCategory = record { monoidal = monoidal }
2935

30-
open Category U public
36+
open Category U hiding (op) public
3137
open Braided braided public
3238

39+
op : BraidedMonoidalCategory o ℓ e
40+
op = record { braided = braided-Op braided }
41+
3342
record SymmetricMonoidalCategory o ℓ e : Set (suc (o ⊔ ℓ ⊔ e)) where
3443
field
3544
U : Category o ℓ e
3645
monoidal : Monoidal U
3746
symmetric : Symmetric monoidal
3847

39-
open Category U public
48+
open Category U hiding (op) public
4049
open Symmetric symmetric public
4150

4251
braidedMonoidalCategory : BraidedMonoidalCategory o ℓ e
43-
braidedMonoidalCategory = record
44-
{ U = U
45-
; monoidal = monoidal
46-
; braided = braided
47-
}
52+
braidedMonoidalCategory = record { braided = braided }
4853

4954
open BraidedMonoidalCategory braidedMonoidalCategory public
5055
using (monoidalCategory)
56+
57+
op : SymmetricMonoidalCategory o ℓ e
58+
op = record { symmetric = symmetric-Op symmetric }

src/Categories/Category/Monoidal/Properties.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{-# OPTIONS --without-K --safe #-}
22
open import Categories.Category
3-
import Categories.Category.Monoidal as M
3+
import Categories.Category.Monoidal.Core as M
44

55
-- Properties of Monoidal Categories
66

src/Categories/Category/Monoidal/Reasoning.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{-# OPTIONS --without-K --safe #-}
22

33
open import Categories.Category using (Category)
4-
open import Categories.Category.Monoidal using (Monoidal)
4+
open import Categories.Category.Monoidal.Core using (Monoidal)
55

66
module Categories.Category.Monoidal.Reasoning {o ℓ e} {C : Category o ℓ e} (M : Monoidal C) where
77

src/Categories/Category/Monoidal/Symmetric/Properties.agda

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
{-# OPTIONS --without-K --safe #-}
22

33
open import Categories.Category using (Category)
4-
open import Categories.Category.Monoidal using (Monoidal)
4+
open import Categories.Category.Monoidal.Core using (Monoidal)
55
open import Categories.Category.Monoidal.Symmetric using (Symmetric)
66

77
module Categories.Category.Monoidal.Symmetric.Properties
88
{o ℓ e} {C : Category o ℓ e} {M : Monoidal C} (SM : Symmetric M) where
99

10-
open import Data.Product using (_,_)
11-
1210
import Categories.Category.Monoidal.Braided.Properties as BraidedProperties
11+
12+
open import Categories.Category.Monoidal.Properties M using (monoidal-Op)
1313
open import Categories.Morphism.Reasoning C
14+
open import Data.Product using (_,_)
1415

1516
open Category C
1617
open HomReasoning
@@ -27,3 +28,13 @@ braiding-selfInverse = introʳ commutative ○ cancelˡ (braiding.iso.isoˡ _)
2728

2829
inv-commutative : {X Y} braiding.⇐.η (X , Y) ∘ braiding.⇐.η (Y , X) ≈ id
2930
inv-commutative = ∘-resp-≈ braiding-selfInverse braiding-selfInverse ○ commutative
31+
32+
-- The opposite monoidal category is symmetric
33+
34+
open BraidedProperties braided using (braided-Op)
35+
36+
symmetric-Op : Symmetric monoidal-Op
37+
symmetric-Op = record
38+
{ braided = braided-Op
39+
; commutative = inv-commutative
40+
}

src/Categories/Diagram/End/Parameterized.agda

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ open import Categories.Functor hiding (id)
1616
open import Categories.Functor.Bifunctor
1717
open import Categories.Functor.Bifunctor.Properties
1818
open import Categories.Functor.Limits
19-
open import Categories.NaturalTransformation renaming (_∘ʳ_ to _▹ⁿ_; id to idN)
19+
open import Categories.NaturalTransformation renaming (id to idN)
2020
open import Categories.NaturalTransformation.Dinatural hiding (_≃_)
2121
open import Categories.NaturalTransformation.NaturalIsomorphism renaming (_≃_ to _≃ⁱ_)
22+
open import Categories.NaturalTransformation.Properties using (flip-bifunctor-NT)
2223
open import Categories.NaturalTransformation.Equivalence
2324

2425
import Categories.Category.Construction.Wedges as Wedges
@@ -42,7 +43,7 @@ F ♯ = curry.₀ F.flip
4243

4344
end-η♯ : {F G : Functor (P ×ᶜ (Category.op C ×ᶜ C)) D} (η : NaturalTransformation F G)
4445
⦃ ef : ∫ (F ♯) ⦄ ⦃ eg : ∫ (G ♯) ⦄ NaturalTransformation (∫.E ef) (∫.E eg)
45-
end-η♯ η ⦃ ef ⦄ ⦃ eg ⦄ = end-η (curry.₁ (η ▹ⁿ Swap))
46+
end-η♯ η ⦃ ef ⦄ ⦃ eg ⦄ = end-η (curry.₁ (flip-bifunctor-NT η))
4647

4748
module _ (F : Functor (P ×ᶜ ((Category.op C) ×ᶜ C)) D) {ω : X ∫ (appˡ F X)} where
4849
private

src/Categories/Functor/Bifunctor.agda

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@ module Bifunctor (H : Bifunctor C D E) where
2929
reduce-× F G = H ∘F (F ⁂ G)
3030

3131
flip : Bifunctor D C E
32-
flip = H ∘F Swap
32+
flip = record
33+
{ F₀ = λ (X , Y) F₀ (Y , X)
34+
; F₁ = λ (f , g) F₁ (g , f)
35+
; identity = λ { {A , B} identity {B , A} }
36+
; homomorphism = λ { {f = (f , f′)} {g , g′} homomorphism {f = (f′ , f)} {g′ , g} }
37+
; F-resp-≈ = λ (≈f , ≈g) F-resp-≈ (≈g , ≈f) 
38+
}
3339

3440
appˡ : Category.Obj C Functor D E
3541
appˡ c = H ∘F constˡ c
@@ -70,5 +76,5 @@ open Bifunctor public using (appˡ; appʳ) renaming (flip to flip-bifunctor)
7076
overlap-× : (H : Bifunctor C D E) (F : Functor A C) (G : Functor A D) Functor A E
7177
overlap-× H = Bifunctor.overlap-× H
7278

73-
reduce-× : (H : Bifunctor C D E) (F : Functor A C) (G : Functor B D) -> Bifunctor A B E
79+
reduce-× : (H : Bifunctor C D E) (F : Functor A C) (G : Functor B D) Bifunctor A B E
7480
reduce-× H = Bifunctor.reduce-× H

src/Categories/Functor/Monoidal.agda

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ open import Categories.Category.Product
1010
open import Categories.Category.Monoidal
1111

1212
open import Categories.Functor hiding (id)
13+
open import Categories.Functor.Properties using ([_]-resp-≅)
1314
open import Categories.NaturalTransformation hiding (id)
1415
open import Categories.NaturalTransformation.NaturalIsomorphism
1516

17+
import Categories.Category.Construction.Core as Core
18+
import Categories.Category.Monoidal.Utilities as ⊗-Utilities
1619
import Categories.Morphism as Mor
1720

1821
private
@@ -72,6 +75,11 @@ module _ (C : MonoidalCategory o ℓ e) (D : MonoidalCategory o′ ℓ′ e′)
7275
open Functor F public
7376
open IsMonoidalFunctor isMonoidal public
7477

78+
module _ (C : MonoidalCategory o ℓ e) (D : MonoidalCategory o′ ℓ′ e′) where
79+
private
80+
module C = MonoidalCategory C
81+
module D = MonoidalCategory D
82+
open Mor D.U
7583

7684
-- strong monoidal functor
7785
record IsStrongMonoidalFunctor (F : Functor C.U D.U) : Set (o ⊔ ℓ ⊔ ℓ′ ⊔ e′) where
@@ -113,15 +121,61 @@ module _ (C : MonoidalCategory o ℓ e) (D : MonoidalCategory o′ ℓ′ e′)
113121
≈ unitorʳ.from
114122
115123

116-
isMonoidal : IsMonoidalFunctor F
117-
isMonoidal = record
124+
isLaxMonoidal : IsMonoidalFunctor C D F
125+
isLaxMonoidal = record
118126
{ ε = ε.from
119127
; ⊗-homo = ⊗-homo.F⇒G
120128
; associativity = associativity
121129
; unitaryˡ = unitaryˡ
122130
; unitaryʳ = unitaryʳ
123131
}
124132

133+
private
134+
135+
module F = Functor F
136+
137+
φ : {X Y : C.Obj} F₀ X ⊗₀ F₀ Y ≅ F₀ (X C.⊗₀ Y)
138+
φ = ⊗-homo.FX≅GX
139+
140+
: {X Y Z : C.Obj} F₀ ((X C.⊗₀ Y) C.⊗₀ Z) ≅ F₀ (X C.⊗₀ (Y C.⊗₀ Z))
141+
= [ F ]-resp-≅ C.associator
142+
143+
: {X : C.Obj} F₀ (C.unit C.⊗₀ X) ≅ F₀ X
144+
= [ F ]-resp-≅ C.unitorˡ
145+
146+
: {X : C.Obj} F₀ (X C.⊗₀ C.unit) ≅ F₀ X
147+
= [ F ]-resp-≅ C.unitorʳ
148+
149+
α : {A B C : Obj} (A ⊗₀ B) ⊗₀ C ≅ A ⊗₀ (B ⊗₀ C)
150+
α = D.associator
151+
152+
λ- : {A : Obj} unit ⊗₀ A ≅ A
153+
λ- = D.unitorˡ
154+
155+
ρ : {A : Obj} A ⊗₀ unit ≅ A
156+
ρ = D.unitorʳ
157+
158+
open ⊗-Utilities monoidal using (_⊗ᵢ_)
159+
open Core.Shorthands U using (⌞_⌟; to-≈; _∘ᵢ_; idᵢ; _≈ᵢ_)
160+
161+
associativityᵢ : {X Y Z : C.Obj} Fα {X} {Y} {Z} ∘ᵢ φ ∘ᵢ φ ⊗ᵢ idᵢ ≈ᵢ φ ∘ᵢ idᵢ ⊗ᵢ φ ∘ᵢ α
162+
associativityᵢ = ⌞ associativity ⌟
163+
164+
unitaryˡᵢ : {X : C.Obj} Fλ {X} ∘ᵢ φ ∘ᵢ ε ⊗ᵢ idᵢ ≈ᵢ λ-
165+
unitaryˡᵢ = ⌞ unitaryˡ ⌟
166+
167+
unitaryʳᵢ : {X : C.Obj} Fρ {X} ∘ᵢ φ ∘ᵢ idᵢ ⊗ᵢ ε ≈ᵢ ρ
168+
unitaryʳᵢ = ⌞ unitaryʳ ⌟
169+
170+
isOplaxMonoidal : IsMonoidalFunctor C.op D.op F.op
171+
isOplaxMonoidal = record
172+
{ ε = ε.to
173+
; ⊗-homo = ⊗-homo.⇐.op
174+
; associativity = to-≈ associativityᵢ
175+
; unitaryˡ = to-≈ unitaryˡᵢ
176+
; unitaryʳ = to-≈ unitaryʳᵢ
177+
}
178+
125179
record StrongMonoidalFunctor : Set (o ⊔ ℓ ⊔ e ⊔ o′ ⊔ ℓ′ ⊔ e′) where
126180
field
127181
F : Functor C.U D.U
@@ -130,5 +184,5 @@ module _ (C : MonoidalCategory o ℓ e) (D : MonoidalCategory o′ ℓ′ e′)
130184
open Functor F public
131185
open IsStrongMonoidalFunctor isStrongMonoidal public
132186

133-
monoidalFunctor : MonoidalFunctor
134-
monoidalFunctor = record { F = F ; isMonoidal = isMonoidal }
187+
monoidalFunctor : MonoidalFunctor C D
188+
monoidalFunctor = record { F = F ; isMonoidal = isLaxMonoidal }

src/Categories/Functor/Monoidal/Braided.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ module Strong where
8888

8989
isLaxBraidedMonoidal : Lax.IsBraidedMonoidalFunctor F
9090
isLaxBraidedMonoidal = record
91-
{ isMonoidal = isMonoidal
91+
{ isMonoidal = isLaxMonoidal
9292
; braiding-compat = braiding-compat
9393
}
9494

0 commit comments

Comments
 (0)