Skip to content

Commit 17cbcba

Browse files
Merge pull request #470 from tillrampe/master
Add laws for bicategories
2 parents 8180116 + 6cac456 commit 17cbcba

File tree

1 file changed

+124
-1
lines changed

1 file changed

+124
-1
lines changed

src/Categories/Bicategory/Extras.agda

Lines changed: 124 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,15 @@ identity₂ˡ = hom.identityˡ
108108
identity₂ʳ : α ∘ᵥ id₂ ≈ α
109109
identity₂ʳ = hom.identityʳ
110110

111+
identity₂² : id₂ ∘ᵥ id₂ {f = g} ≈ id₂ {f = g}
112+
identity₂² = hom.identity²
113+
111114
assoc₂ : (α ∘ᵥ β) ∘ᵥ γ ≈ α ∘ᵥ β ∘ᵥ γ
112115
assoc₂ = hom.assoc
113116

117+
sym-assoc₂ : α ∘ᵥ β ∘ᵥ γ ≈ (α ∘ᵥ β) ∘ᵥ γ
118+
sym-assoc₂ = hom.sym-assoc
119+
114120
id₂◁ : id₂ {f = g} ◁ f ≈ id₂
115121
id₂◁ = ⊚.identity
116122

@@ -153,12 +159,41 @@ refl⟩⊚⟨_ = ⊚-resp-≈ʳ
153159
_⟩⊚⟨refl : α ≈ β α ⊚₁ γ ≈ β ⊚₁ γ
154160
_⟩⊚⟨refl = ⊚-resp-≈ˡ
155161

162+
∘ᵥ-distr-⊚ : (α ∘ᵥ γ) ⊚₁ (β ∘ᵥ δ) ≈ (α ⊚₁ β) ∘ᵥ (γ ⊚₁ δ)
163+
∘ᵥ-distr-⊚ = Functor.homomorphism ⊚
164+
165+
α⇐-⊚ : α⇐ ∘ᵥ (α ⊚₁ β ⊚₁ γ) ≈ ((α ⊚₁ β) ⊚₁ γ) ∘ᵥ α⇐
166+
α⇐-⊚ {α = α} {β = β} {γ = γ} = ⊚-assoc.⇐.commute ((α , β) , γ)
167+
168+
α⇒-⊚ : α⇒ ∘ᵥ ((α ⊚₁ β) ⊚₁ γ) ≈ (α ⊚₁ β ⊚₁ γ) ∘ᵥ α⇒
169+
α⇒-⊚ {α = α} {β = β} {γ = γ} = ⊚-assoc.⇒.commute ((α , β) , γ)
170+
156171
∘ᵥ-distr-◁ : (α ◁ f) ∘ᵥ (β ◁ f) ≈ (α ∘ᵥ β) ◁ f
157172
∘ᵥ-distr-◁ {f = f} = ⟺ (Functor.homomorphism (-⊚ f))
158173

159174
∘ᵥ-distr-▷ : (f ▷ α) ∘ᵥ (f ▷ β) ≈ f ▷ (α ∘ᵥ β)
160175
∘ᵥ-distr-▷ {f = f} = ⟺ (Functor.homomorphism (f ⊚-))
161176

177+
◁-resp-≈ : α ≈ β α ◁ f ≈ β ◁ f
178+
◁-resp-≈ = _⟩⊚⟨refl
179+
180+
▷-resp-≈ : α ≈ β f ▷ α ≈ f ▷ β
181+
▷-resp-≈ = refl⟩⊚⟨_
182+
183+
▷-resp-sq : α ∘ᵥ β ≈ γ ∘ᵥ δ f ▷ α ∘ᵥ f ▷ β ≈ f ▷ γ ∘ᵥ f ▷ δ
184+
▷-resp-sq {α = α} {β = β} {γ = γ} {δ = δ} {f = f} sq = begin
185+
f ▷ α ∘ᵥ f ▷ β ≈⟨ ∘ᵥ-distr-▷ ⟩
186+
f ▷ (α ∘ᵥ β) ≈⟨ ▷-resp-≈ sq ⟩
187+
f ▷ (γ ∘ᵥ δ) ≈⟨ ⟺ ∘ᵥ-distr-▷ ⟩
188+
f ▷ γ ∘ᵥ f ▷ δ ∎
189+
190+
◁-resp-sq : α ∘ᵥ β ≈ γ ∘ᵥ δ α ◁ f ∘ᵥ β ◁ f ≈ γ ◁ f ∘ᵥ δ ◁ f
191+
◁-resp-sq {α = α} {β = β} {γ = γ} {δ = δ} {f = f} sq = begin
192+
α ◁ f ∘ᵥ β ◁ f ≈⟨ ∘ᵥ-distr-◁ ⟩
193+
(α ∘ᵥ β) ◁ f ≈⟨ ◁-resp-≈ sq ⟩
194+
(γ ∘ᵥ δ)◁ f ≈⟨ ⟺ ∘ᵥ-distr-◁ ⟩
195+
γ ◁ f ∘ᵥ δ ◁ f ∎
196+
162197
λ⇒-∘ᵥ-▷ : λ⇒ ∘ᵥ (id₁ ▷ α) ≈ α ∘ᵥ λ⇒
163198
λ⇒-∘ᵥ-▷ {α = α} = begin
164199
λ⇒ ∘ᵥ (id₁ ▷ α) ≈˘⟨ refl⟩∘⟨ id.identity ⟩⊚⟨refl ⟩
@@ -189,6 +224,9 @@ _⟩⊚⟨refl = ⊚-resp-≈ˡ
189224
α⇐-▷-◁ : α⇐ ∘ᵥ (f ▷ (γ ◁ g)) ≈ ((f ▷ γ) ◁ g) ∘ᵥ α⇐
190225
α⇐-▷-◁ {f = f} {γ = γ} {g = g} = ⊚-assoc.⇐.commute ((id₂ , γ) , id₂)
191226

227+
α⇒-▷-◁ : α⇒ ∘ᵥ ((f ▷ γ) ◁ g) ≈ (f ▷ (γ ◁ g)) ∘ᵥ α⇒
228+
α⇒-▷-◁ {f = f} {γ = γ} {g = g} = ⟺ (conjugate-to associator associator α⇐-▷-◁)
229+
192230
α⇒-▷-∘₁ : α⇒ ∘ᵥ (f ∘₁ g) ▷ γ ≈ f ▷ g ▷ γ ∘ᵥ α⇒
193231
α⇒-▷-∘₁{f = f} {g = g} {γ = γ} = begin
194232
α⇒ ∘ᵥ (f ⊚₀ g) ▷ γ ≈˘⟨ refl⟩∘⟨ ⊚.identity ⟩⊚⟨refl ⟩
@@ -217,6 +255,57 @@ pentagon-inv : ∀ {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D
217255
(α⇐ ◁ f ∘ᵥ α⇐) ∘ᵥ i ▷ α⇐ ≈ α⇐ ∘ᵥ α⇐ {f = i} {h} {g ∘₁ f}
218256
pentagon-inv = to-≈ pentagon-iso
219257

258+
pentagon-var : {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D ⇒₁ E}
259+
(i ▷ α⇒ ∘ᵥ α⇒) ∘ᵥ α⇒ ◁ f ≈
260+
α⇒ {f = i} {h} {g ∘₁ f} ∘ᵥ α⇒
261+
pentagon-var {f = f} {g} {h} {i} = begin
262+
(i ▷ α⇒ ∘ᵥ α⇒) ∘ᵥ α⇒ ◁ f ≈⟨ assoc₂ ⟩
263+
i ▷ α⇒ ∘ᵥ α⇒ ∘ᵥ α⇒ ◁ f ≈⟨ pentagon ⟩
264+
α⇒ {f = i} {h} {g ∘₁ f} ∘ᵥ α⇒ ∎
265+
266+
pentagon-inv-var : {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D ⇒₁ E}
267+
α⇐ ◁ f ∘ᵥ α⇐ ∘ᵥ i ▷ α⇐
268+
≈ α⇐ ∘ᵥ α⇐ {f = i} {h} {g ∘₁ f}
269+
pentagon-inv-var {f = f} {g} {h} {i} = begin
270+
α⇐ ◁ f ∘ᵥ α⇐ ∘ᵥ i ▷ α⇐ ≈⟨ sym-assoc₂ ⟩
271+
(α⇐ ◁ f ∘ᵥ α⇐) ∘ᵥ i ▷ α⇐ ≈⟨ pentagon-inv ⟩
272+
α⇐ ∘ᵥ α⇐ ∎
273+
274+
pentagon-conjugate₁ : {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D ⇒₁ E}
275+
α⇐ {f = i} {h} {g ∘₁ f} ∘ᵥ i ▷ α⇒ ∘ᵥ α⇒ ≈
276+
α⇒ ∘ᵥ α⇐ ◁ f
277+
pentagon-conjugate₁ {f = f} = conjugate-from (associator ◁ᵢ f) associator pentagon-var
278+
279+
pentagon-conjugate₂ : {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D ⇒₁ E}
280+
i ▷ α⇒ ∘ᵥ α⇒ ≈
281+
α⇒ {f = i} {h} {g ∘₁ f} ∘ᵥ α⇒ ∘ᵥ α⇐ ◁ f
282+
pentagon-conjugate₂ {f = f} {g} {h} {i} = begin
283+
i ▷ α⇒ ∘ᵥ α⇒ ≈⟨ switch-fromtoʳ (associator ◁ᵢ f) pentagon-var ⟩
284+
(α⇒ ∘ᵥ α⇒) ∘ᵥ α⇐ ◁ f ≈⟨ assoc₂ ⟩
285+
α⇒ {f = i} {h} {g ∘₁ f} ∘ᵥ α⇒ ∘ᵥ α⇐ ◁ f ∎
286+
287+
pentagon-conjugate₃ : {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D ⇒₁ E}
288+
α⇒ ◁ f ∘ᵥ α⇐ ≈
289+
(α⇐ ∘ᵥ i ▷ α⇐) ∘ᵥ α⇒ {f = i} {h} {g ∘₁ f}
290+
pentagon-conjugate₃ {f = f} {g} {h} {i} = begin
291+
α⇒ ◁ f ∘ᵥ α⇐ ≈⟨ ⟺ (conjugate-to associator (associator ◁ᵢ f) pentagon-inv-var) ⟩
292+
(α⇐ ∘ᵥ i ▷ α⇐) ∘ᵥ α⇒ ∎
293+
294+
pentagon-conjugate₄ : {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D ⇒₁ E}
295+
α⇒ ∘ᵥ α⇐ ◁ f ≈
296+
α⇐ {f = i} {h} {g ∘₁ f} ∘ᵥ i ▷ α⇒ ∘ᵥ α⇒
297+
pentagon-conjugate₄ {f = f} {g} {h} {i} = begin
298+
α⇒ ∘ᵥ α⇐ ◁ f ≈⟨ ⟺ (conjugate-from (associator ◁ᵢ f) associator pentagon-var) ⟩
299+
α⇐ ∘ᵥ i ▷ α⇒ ∘ᵥ α⇒ ∎
300+
301+
pentagon-conjugate₅ : {E} {f : A ⇒₁ B} {g : B ⇒₁ C} {h : C ⇒₁ D} {i : D ⇒₁ E}
302+
α⇐ {f = i} {h} {g ∘₁ f} ∘ᵥ i ▷ α⇒ ≈
303+
α⇒ ∘ᵥ α⇐ ◁ f ∘ᵥ α⇐
304+
pentagon-conjugate₅ {f = f} {g} {h} {i} = begin
305+
α⇐ ∘ᵥ i ▷ α⇒ ≈⟨ conjugate-to (i ▷ᵢ associator) associator (⟺ pentagon-inv) ⟩
306+
α⇒ ∘ᵥ α⇐ ◁ f ∘ᵥ α⇐ ∎
307+
308+
220309
module UnitorCoherence where
221310

222311
-- Extra coherence laws for the unitors.
@@ -316,6 +405,16 @@ module UnitorCoherence where
316405
id₁ ▷ (λ⇒ ∘ᵥ α⇒) ≈˘⟨ id.identity ⟩⊚⟨refl ⟩
317406
id.F₁ _ ⊚₁ (λ⇒ ∘ᵥ α⇒) ∎)
318407

408+
unitorˡ-coherence-iso : {f : B ⇒₁ C} {g : A ⇒₁ B} unitorˡ ◁ᵢ g ≈ᵢ unitorˡ ∘ᵢ associator {f = id₁} {f} {g}
409+
unitorˡ-coherence-iso = ⌞ unitorˡ-coherence ⌟
410+
411+
unitorˡ-coherence-inv : [ f ⊚₀ g ⇒ (id₁ ⊚₀ f) ⊚₀ g ]⟨
412+
λ⇐ ◁ g
413+
≈ λ⇐ ⇒⟨ id₁ ⊚₀ (f ⊚₀ g) ⟩
414+
α⇐
415+
416+
unitorˡ-coherence-inv = to-≈ unitorˡ-coherence-iso
417+
319418
unitorʳ-coherence : [ (f ⊚₀ g) ⊚₀ id₁ ⇒ f ⊚₀ g ]⟨
320419
ρ⇒
321420
≈ α⇒ ⇒⟨ f ⊚₀ (g ⊚₀ id₁) ⟩
@@ -328,4 +427,28 @@ module UnitorCoherence where
328427
(f ▷ ρ⇒ ∘ᵥ α⇒) ◁ id₁ ≈˘⟨ refl⟩⊚⟨ id.identity ⟩
329428
(f ▷ ρ⇒ ∘ᵥ α⇒) ⊚₁ id.F₁ _ ∎)
330429

331-
open UnitorCoherence public using (unitorˡ-coherence; unitorʳ-coherence)
430+
unitorʳ-coherence-var₁ : [ (f ⊚₀ g) ⊚₀ id₁ ⇒ f ⊚₀ g ⊚₀ id₁ ]⟨
431+
α⇒
432+
≈ ρ⇒ ⇒⟨ f ⊚₀ g ⟩
433+
f ▷ ρ⇐
434+
435+
unitorʳ-coherence-var₁ {f = f} = switch-fromtoˡ (f ▷ᵢ unitorʳ) (⟺ unitorʳ-coherence)
436+
437+
unitorʳ-coherence-var₂ : [ f ⊚₀ g ⇒ f ⊚₀ g ⊚₀ id₁ ]⟨
438+
f ▷ ρ⇐
439+
≈ ρ⇐ ⇒⟨ (f ⊚₀ g) ⊚₀ id₁ ⟩
440+
α⇒
441+
442+
unitorʳ-coherence-var₂ = switch-fromtoʳ unitorʳ (⟺ unitorʳ-coherence-var₁)
443+
444+
unitorʳ-coherence-inv : [ f ⊚₀ g ⇒ (f ⊚₀ g) ⊚₀ id₁ ]⟨
445+
f ▷ ρ⇐ ⇒⟨ f ⊚₀ g ⊚₀ id₁ ⟩
446+
α⇐
447+
≈ ρ⇐
448+
449+
unitorʳ-coherence-inv = ⟺ (switch-fromtoˡ associator (⟺ unitorʳ-coherence-var₂))
450+
451+
open UnitorCoherence public
452+
using (unitorˡ-coherence; unitorˡ-coherence-inv;
453+
unitorʳ-coherence; unitorʳ-coherence-var₁;
454+
unitorʳ-coherence-var₂; unitorʳ-coherence-inv)

0 commit comments

Comments
 (0)