{-# OPTIONS --without-K --safe #-}
open import Categories.Category
open import Categories.Category.Monoidal.Core using (Monoidal)
module Categories.Category.Monoidal.Reassociation
{o β e} {π : Category o β e} (M : Monoidal π) where
open Category π
open Monoidal M
open import Categories.Category.Construction.Core π as Core using (Core)
open import Categories.Category.Monoidal.Properties M
open import Categories.Category.Monoidal.Utilities M
open import Categories.Category.Monoidal.Reasoning M
import Categories.Morphism.Reasoning as MR
open Core.Shorthands
open Shorthands
open MR π
private
variable
A B C D X Y Z : Obj
Ξ»β-assoc : (Ξ»β {A} ββ id {B}) β Ξ±β β Ξ»β
Ξ»β-assoc = βΊ (switch-fromtoΚ³ associator coherenceβ)
Ξ»β-assoc : Ξ±β β (Ξ»β {A} ββ id {B}) β Ξ»β
Ξ»β-assoc = begin
Ξ±β β (Ξ»β ββ id) βΛβ¨ reflβ©ββ¨ coherence-invβ β©
Ξ±β β (Ξ±β β Ξ»β) ββ¨ cancelΛ‘ associator.isoΚ³ β©
Ξ»β β
Οβ-assoc : Οβ β Ξ±β {X} {Y} {unit} β id ββ Οβ
Οβ-assoc = βΊ (switch-fromtoΚ³ associator coherenceβ)
Οβ-assoc : id {A} ββ Οβ {B} β Ξ±β β Οβ
Οβ-assoc = begin
id ββ Οβ βΛβ¨ cancelΛ‘ associator.isoΚ³ β©
Ξ±β β (Ξ±β β (id ββ Οβ)) ββ¨ reflβ©ββ¨ coherence-invβ β©
Ξ±β β Οβ β
Ξ»β-Οβ-comm : Ξ»β β Ξ±β β Οβ β Οβ {X} β Ξ»β
Ξ»β-Οβ-comm = pullΛ‘ coherenceβ β βΊ unitorΚ³-commute-to
Ξ±β-idβ-commute : {k : X β Y} β
Ξ±β {A} {B} {Y} β (id ββ k) β (id ββ (id ββ k)) β Ξ±β
Ξ±β-idβ-commute {k = k} = begin
Ξ±β β (id ββ k) βΛβ¨ reflβ©ββ¨ (β.identity β©ββ¨refl) β©
Ξ±β β ((id ββ id) ββ k) ββ¨ assoc-commute-from β©
(id ββ (id ββ k)) β Ξ±β β
Ξ±β-idβ-commute : {k : X β Y} β
(id {A ββ B} ββ k) β Ξ±β β Ξ±β β (id ββ (id ββ k))
Ξ±β-idβ-commute {k = k} = begin
(id ββ k) β Ξ±β βΛβ¨ (β.identity β©ββ¨refl) β©ββ¨refl β©
((id ββ id) ββ k) β Ξ±β βΛβ¨ assoc-commute-to β©
Ξ±β β (id ββ (id ββ k)) β
Ξ±β-βid-commute : {k : X β Y} β
Ξ±β {Y} {A} {B} β (k ββ id) β ((k ββ id) ββ id) β Ξ±β
Ξ±β-βid-commute {k = k} = begin
Ξ±β β (k ββ id) βΛβ¨ reflβ©ββ¨ (reflβ©ββ¨ β.identity) β©
Ξ±β β (k ββ (id ββ id)) ββ¨ assoc-commute-to β©
((k ββ id) ββ id) β Ξ±β β
Ξ±β-βid-commute : {k : X β Y} β
Ξ±β {Y} {A} {B} β ((k ββ id) ββ id) β (k ββ id) β Ξ±β
Ξ±β-βid-commute {k = k} = begin
Ξ±β β ((k ββ id) ββ id) ββ¨ assoc-commute-from β©
(k ββ (id ββ id)) β Ξ±β ββ¨ (reflβ©ββ¨ β.identity) β©ββ¨refl β©
(k ββ id) β Ξ±β β
whisker-comm : {f : A β B} {g : X β Y} β
(f ββ id {Y}) β (id {A} ββ g) β (id ββ g) β (f ββ id {X})
whisker-comm = βΊ serializeββ β serializeββ
rebracket-tightenΛ‘ : {f : B β C} {h : A ββ (X ββ Y) β B ββ (X ββ Y)} β
Ξ±β β ((f ββ id) β h) β Ξ±β β ((f ββ id) ββ id) β (Ξ±β β h β Ξ±β)
rebracket-tightenΛ‘ {f = f} {h = h} = begin
Ξ±β β ((f ββ id) β h) β Ξ±β ββ¨ reflβ©ββ¨ assoc β©
Ξ±β β (f ββ id) β h β Ξ±β ββ¨ extendΚ³ Ξ±β-βid-commute β©
((f ββ id) ββ id) β Ξ±β β h β Ξ±β β
rebracket-tightenΚ³ : {h : B ββ (X ββ Y) β C ββ (X ββ Y)} {g : A β B} β
Ξ±β β (h β (g ββ id)) β Ξ±β β (Ξ±β β h β Ξ±β) β ((g ββ id) ββ id)
rebracket-tightenΚ³ {h = h} {g = g} = begin
Ξ±β β (h β (g ββ id)) β Ξ±β ββ¨ reflβ©ββ¨ assoc β©
Ξ±β β h β (g ββ id) β Ξ±β ββ¨ reflβ©ββ¨ reflβ©ββ¨ βΊ Ξ±β-βid-commute β©
Ξ±β β h β Ξ±β β ((g ββ id) ββ id) ββ¨ assoc²Ρβ β©
(Ξ±β β h β Ξ±β) β ((g ββ id) ββ id) β
pentagon-assoc : Ξ±β {A ββ B} {C} {D} β (Ξ±β ββ id) β Ξ±β β Ξ±β β (id ββ Ξ±β)
pentagon-assoc = conjugate-from (idα΅’ βα΅’ (associator β»ΒΉ)) (associator β»ΒΉ) pentagon-inv
assoc-to-coherence :
(id {A} ββ Ξ±β {B} {C} {D}) β Ξ±β β Ξ±β β (Ξ±β ββ id) β Ξ±β
assoc-to-coherence = begin
(id ββ Ξ±β) β Ξ±β ββ¨ conjugate-from associator (idα΅’ βα΅’ associator) (βΊ pentagon) β©
(Ξ±β β (Ξ±β ββ id)) β Ξ±β ββ¨ assoc β©
Ξ±β β (Ξ±β ββ id) β Ξ±β β
assoc-from-coherence :
Ξ±β {A ββ B} {C} {D} β (Ξ±β ββ id) β Ξ±β β (id ββ Ξ±β) β Ξ±β
assoc-from-coherence =
switch-tofromΚ³ associator (assoc β pentagon-assoc) β assoc
pentagon-collapse :
(Ξ±β {A} {B} {C ββ D} β Ξ±β) β (Ξ±β ββ id) β (id ββ Ξ±β) β Ξ±β
pentagon-collapse = pullΚ³ assoc-from-coherence β cancelΛ‘ associator.isoΚ³
pentagon-collapse-inv :
(Ξ±β {A} {B} {C} ββ id {D}) β Ξ±β β Ξ±β β Ξ±β β (id ββ Ξ±β)
pentagon-collapse-inv = begin
(Ξ±β ββ id) β Ξ±β β Ξ±β
βΛβ¨ reflβ©ββ¨ pentagon-inv β©
(Ξ±β ββ id) β ((Ξ±β ββ id) β Ξ±β) β (id ββ Ξ±β)
ββ¨ reflβ©ββ¨ assoc β©
(Ξ±β ββ id) β (Ξ±β ββ id) β Ξ±β β (id ββ Ξ±β)
ββ¨ cancelΛ‘ (β-cancel associator.isoΚ³ identityΒ²) β©
Ξ±β β (id ββ Ξ±β) β
Ξ±-conj-slide : {f : A ββ X β B ββ X} β
Ξ±β β Ξ±β β ((Ξ±β β (id {Y} ββ f) β Ξ±β) ββ id {Z}) β Ξ±β
β (id ββ (Ξ±β β (f ββ id) β Ξ±β)) β Ξ±β
Ξ±-conj-slide {f = f} = begin
Ξ±β β Ξ±β β ((Ξ±β β (id ββ f) β Ξ±β) ββ id) β Ξ±β ββ¨ reflβ©ββ¨ reflβ©ββ¨ splitβΒ³ β©ββ¨refl β©
Ξ±β β Ξ±β β ((Ξ±β ββ id) β ((id ββ f) ββ id) β (Ξ±β ββ id)) β Ξ±β ββ¨ reflβ©ββ¨ reflβ©ββ¨ assocΒ²Ξ²Ξ΅ β©
Ξ±β β Ξ±β β (Ξ±β ββ id) β ((id ββ f) ββ id) β (Ξ±β ββ id) β Ξ±β ββ¨ assoc²Ρα β©
((Ξ±β β Ξ±β) β (Ξ±β ββ id)) β ((id ββ f) ββ id) β (Ξ±β ββ id) β Ξ±β ββ¨ pentagon-collapse β©ββ¨refl β©
((id ββ Ξ±β) β Ξ±β) β ((id ββ f) ββ id) β (Ξ±β ββ id) β Ξ±β ββ¨ assoc β©
(id ββ Ξ±β) β Ξ±β β ((id ββ f) ββ id) β (Ξ±β ββ id) β Ξ±β ββ¨ reflβ©ββ¨ extendΚ³ assoc-commute-from β©
(id ββ Ξ±β) β (id ββ (f ββ id)) β Ξ±β β (Ξ±β ββ id) β Ξ±β βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ assoc-to-coherence β©
(id ββ Ξ±β) β (id ββ (f ββ id)) β (id ββ Ξ±β) β Ξ±β βΛβ¨ assocΒ²Ξ²Ξ΅ β©
((id ββ Ξ±β) β (id ββ (f ββ id)) β (id ββ Ξ±β)) β Ξ±β ββ¨ mergeβΒ³ β©ββ¨refl β©
(id ββ (Ξ±β β (f ββ id) β Ξ±β)) β Ξ±β β