{-# OPTIONS --without-K --safe #-}
open import Categories.Category.Core using (Category)
open import Categories.Category.Monoidal using (Monoidal)
open import Categories.Category.Monoidal.Symmetric using (Symmetric)
open import Categories.Category.Monoidal.CounitalCopy using (CounitalCopy)
open import Categories.Category.Restriction using (Restriction)
open import Data.Product using (_,_)
import Categories.Morphism.Reasoning as MR
import Categories.Morphism as M
module Categories.Category.Monoidal.CounitalCopy.Restriction {o β e} {π : Category o β e} {monoidal : Monoidal π} {symmetric : Symmetric monoidal} (counitalCopy : CounitalCopy symmetric) where
open Category π
open Symmetric symmetric
open CounitalCopy counitalCopy
open Equiv
open M π
open MR π
open HomReasoning
open import Categories.Category.Monoidal.Utilities monoidal
open Shorthands
open import Categories.Category.Monoidal.Properties monoidal
open import Categories.Category.Monoidal.Braided.Properties braided using (braiding-coherence) renaming (module Shorthands to BraidedShorthands)
open BraidedShorthands using (Οβ)
restriction : Restriction π
restriction = record
{ _β = _β
; pidΚ³ = pidΚ³'
; β-comm = β-comm''
; β-denestΚ³ = β-denestΚ³'
; β-skew-comm = β-skew-comm'
; β-cong = Ξ» fβg β reflβ©ββ¨ reflβ©ββ¨ β.F-resp-β (fβg , refl) β©ββ¨refl
}
where
_β : β {A B} β A β B β A β A
_β {A} {B} f = Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ
pidΚ³' : β {A B} {f : A β B} β f β f β β f
pidΚ³' {f = f} = begin
f β Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ ββ¨ extendΚ³ (sym unitorΛ‘-commute-from) β©
Ξ»β β (id ββ f) β (Ξ΄ ββ id) β (f ββ id) β Ξ ββ¨ reflβ©ββ¨ (extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm-sym , id-comm) β β.homomorphism)) β©
Ξ»β β (Ξ΄ ββ id) β (id ββ f) β (f ββ id) β Ξ ββ¨ reflβ©ββ¨ reflβ©ββ¨ pullΛ‘ (sym β.homomorphism β β.F-resp-β (identityΛ‘ , identityΚ³)) β©
Ξ»β β (Ξ΄ ββ id) β (f ββ f) β Ξ βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ natural f β©
Ξ»β β (Ξ΄ ββ id) β Ξ β f ββ¨ reflβ©ββ¨ (pullΛ‘ (sym Ξ΄-identityΛ‘)) β©
Ξ»β β Ξ»β β f ββ¨ cancelΛ‘ unitorΛ‘.isoΚ³ β©
f β
β-comm' : β {A B C} (f : A β B) (g : A β C) β f β β g β β Ξ»β β (Ξ»β ββ id) β ((Ξ΄ ββ Ξ΄) ββ id) β ((g ββ f) ββ id) β (Ξ ββ id) β Ξ
β-comm' f g = begin
(Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ) β Ξ»β β (Ξ΄ ββ id) β (g ββ id) β Ξ
ββ¨ pullΚ³ (pullΚ³ (pullΚ³ (extendΚ³ (sym unitorΛ‘-commute-from)))) β©
Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ»β β (id ββ Ξ) β (Ξ΄ ββ id) β (g ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm-sym , id-comm) β β.homomorphism) β©
Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ»β β (Ξ΄ ββ id) β (id ββ Ξ) β (g ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm-sym , id-comm) β β.homomorphism) β©
Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ»β β (Ξ΄ ββ id) β (g ββ id) β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (sym unitorΛ‘-commute-from) β©
Ξ»β β (Ξ΄ ββ id) β Ξ»β β (id ββ (f ββ id)) β (Ξ΄ ββ id) β (g ββ id) β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ extendΚ³ (sym unitorΛ‘-commute-from) β©
Ξ»β β Ξ»β β (id ββ (Ξ΄ ββ id)) β (id ββ (f ββ id)) β (Ξ΄ ββ id) β (g ββ id) β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ helper β©
Ξ»β β Ξ»β β (id ββ (Ξ΄ ββ id)) β (Ξ΄ ββ id) β Ξ±β β ((id ββ f) ββ id) β ((g ββ id) ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ (pullΛ‘ (sym β.homomorphism β β.F-resp-β (identityΛ‘ , identityΚ³)) β extendΚ³ (sym assoc-commute-from)) β©
Ξ»β β Ξ»β β Ξ±β β ((Ξ΄ ββ Ξ΄) ββ id) β ((id ββ f) ββ id) β ((g ββ id) ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ pullΛ‘ (sym β.homomorphism β β.F-resp-β ((sym β.homomorphism β β.F-resp-β (identityΛ‘ , identityΚ³)) , identityΒ²)) β©
Ξ»β β Ξ»β β Ξ±β β ((Ξ΄ ββ Ξ΄) ββ id) β ((g ββ f) ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ (pullΛ‘ coherenceβ) β©
Ξ»β β (Ξ»β ββ id) β ((Ξ΄ ββ Ξ΄) ββ id) β ((g ββ f) ββ id) β (Ξ ββ id) β Ξ
β
where
helper : (id ββ (f ββ id)) β (Ξ΄ ββ id) β (g ββ id) β (id ββ Ξ) β Ξ β (Ξ΄ ββ id) β Ξ±β β ((id ββ f) ββ id) β ((g ββ id) ββ id) β (Ξ ββ id) β Ξ
helper = begin
(id ββ (f ββ id)) β (Ξ΄ ββ id) β (g ββ id) β (id ββ Ξ) β Ξ
ββ¨ extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm-sym , id-comm) β β.homomorphism) β©
(Ξ΄ ββ id) β (id ββ (f ββ id)) β (g ββ id) β (id ββ Ξ) β Ξ
βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ cancelΛ‘ associator.isoΚ³ β©
(Ξ΄ ββ id) β (id ββ (f ββ id)) β (g ββ id) β Ξ±β β Ξ±β β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ (sym-assoc β sym Ξ-assoc) β©
(Ξ΄ ββ id) β (id ββ (f ββ id)) β (g ββ id) β Ξ±β β (Ξ ββ id) β Ξ
βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (assoc-commute-from β β-resp-βΛ‘ (β.F-resp-β (refl , β.identity))) β©
(Ξ΄ ββ id) β (id ββ (f ββ id)) β Ξ±β β ((g ββ id) ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ extendΚ³ (sym assoc-commute-from) β©
(Ξ΄ ββ id) β Ξ±β β ((id ββ f) ββ id) β ((g ββ id) ββ id) β (Ξ ββ id) β Ξ
β
β-comm'' : β {A B C} {f : A β B} {g : A β C} β f β β g β β g β β f β
β-comm'' {f = f} {g} = begin
(Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ) β Ξ»β β (Ξ΄ ββ id) β (g ββ id) β Ξ
ββ¨ β-comm' f g β©
Ξ»β β (Ξ»β ββ id) β ((Ξ΄ ββ Ξ΄) ββ id) β ((g ββ f) ββ id) β (Ξ ββ id) β Ξ
βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ pullΛ‘ (sym β.homomorphism β β.F-resp-β (cocommutative , identityΒ²)) β©
Ξ»β β (Ξ»β ββ id) β ((Ξ΄ ββ Ξ΄) ββ id) β ((g ββ f) ββ id) β (Οβ ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (sym β.homomorphism β β.F-resp-β ((sym (braiding.β.commute _)) , refl) β β.homomorphism) β©
Ξ»β β (Ξ»β ββ id) β ((Ξ΄ ββ Ξ΄) ββ id) β (Οβ ββ id) β ((f ββ g) ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (sym β.homomorphism β β.F-resp-β ((sym (braiding.β.commute _)) , refl) β β.homomorphism) β©
Ξ»β β (Ξ»β ββ id) β (Οβ ββ id) β ((Ξ΄ ββ Ξ΄) ββ id) β ((f ββ g) ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ (pullΛ‘ (sym β.homomorphism β β.F-resp-β ((braiding-coherence β sym coherenceβ) , identityΒ²))) β©
Ξ»β β (Ξ»β ββ id) β ((Ξ΄ ββ Ξ΄) ββ id) β ((f ββ g) ββ id) β (Ξ ββ id) β Ξ
βΛβ¨ β-comm' g f β©
(Ξ»β β (Ξ΄ ββ id) β (g ββ id) β Ξ) β Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ
β
β-denestΚ³' : β {A B C} {f : A β B} {g : A β C} β (g β f β) β β g β β f β
β-denestΚ³' {f = f} {g} = begin
Ξ»β β (Ξ΄ ββ id) β ((g β Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ) ββ id) β Ξ
βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ β-resp-βΛ‘ (β.F-resp-β ((assoc β assoc β assoc) , elimΛ‘ (elimΛ‘ (elimΛ‘ identityΒ²)))) β©
Ξ»β β (Ξ΄ ββ id) β (((((g β Ξ»β) β (Ξ΄ ββ id)) β (f ββ id)) β Ξ) ββ ((((id β id) β id) β id) β id)) β Ξ
βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ (pullΛ‘ (sym β.homomorphism) β pullΛ‘ (sym β.homomorphism) β pullΛ‘ (sym β.homomorphism) β pullΛ‘ (sym β.homomorphism)) β©
Ξ»β β (Ξ΄ ββ id) β (g ββ id) β (Ξ»β ββ id) β ((Ξ΄ ββ id) ββ id) β ((f ββ id) ββ id) β (Ξ ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ helper β©
Ξ»β β (Ξ΄ ββ id) β (g ββ id) β Ξ»β β (id ββ Ξ) β (Ξ΄ ββ id) β (f ββ id) β Ξ
βΛβ¨ pullΚ³ (pullΚ³ (pullΚ³ (extendΚ³ (sym unitorΛ‘-commute-from)))) β©
(Ξ»β β (Ξ΄ ββ id) β (g ββ id) β Ξ) β Ξ»β β (Ξ΄ ββ id) β (f ββ id) β Ξ
β
where
helper : (Ξ»β ββ id) β ((Ξ΄ ββ id) ββ id) β ((f ββ id) ββ id) β (Ξ ββ id) β Ξ β Ξ»β β (id ββ Ξ) β (Ξ΄ ββ id) β (f ββ id) β Ξ
helper = begin
(Ξ»β ββ id) β ((Ξ΄ ββ id) ββ id) β ((f ββ id) ββ id) β (Ξ ββ id) β Ξ
βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ (sym-assoc β sym Ξ-assoc) β©
(Ξ»β ββ id) β ((Ξ΄ ββ id) ββ id) β ((f ββ id) ββ id) β Ξ±β β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (sym assoc-commute-to β β-resp-βΚ³ (β.F-resp-β (refl , β.identity))) β©
(Ξ»β ββ id) β ((Ξ΄ ββ id) ββ id) β Ξ±β β (f ββ id) β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ extendΚ³ (sym assoc-commute-to β β-resp-βΚ³ (β.F-resp-β (refl , β.identity))) β©
(Ξ»β ββ id) β Ξ±β β (Ξ΄ ββ id) β (f ββ id) β (id ββ Ξ) β Ξ
βΛβ¨ pullΛ‘ coherenceβ β©
Ξ»β β Ξ±β β Ξ±β β (Ξ΄ ββ id) β (f ββ id) β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ cancelΛ‘ associator.isoΚ³ β©
Ξ»β β (Ξ΄ ββ id) β (f ββ id) β (id ββ Ξ) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm , id-comm-sym) β β.homomorphism) β©
Ξ»β β (Ξ΄ ββ id) β (id ββ Ξ) β (f ββ id) β Ξ
ββ¨ reflβ©ββ¨ extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm , id-comm-sym) β β.homomorphism) β©
Ξ»β β (id ββ Ξ) β (Ξ΄ ββ id) β (f ββ id) β Ξ
β
β-skew-comm' : β {A B C} {f : A β B} {g : B β C} β g β β f β f β (g β f) β
β-skew-comm' {f = f} {g} = begin
(Ξ»β β (Ξ΄ ββ id) β (g ββ id) β Ξ) β f
ββ¨ pullΚ³ (pullΚ³ (pullΚ³ (natural f))) β©
Ξ»β β (Ξ΄ ββ id) β (g ββ id) β (f ββ f) β Ξ
βΛβ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ pullΛ‘ (sym β.homomorphism β β.F-resp-β (identityΛ‘ , identityΚ³)) β©
Ξ»β β (Ξ΄ ββ id) β (g ββ id) β (id ββ f) β (f ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ (extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm , id-comm-sym) β β.homomorphism)) β©
Ξ»β β (Ξ΄ ββ id) β (id ββ f) β (g ββ id) β (f ββ id) β Ξ
ββ¨ reflβ©ββ¨ (extendΚ³ (sym β.homomorphism β β.F-resp-β (id-comm , id-comm-sym) β β.homomorphism)) β©
Ξ»β β (id ββ f) β (Ξ΄ ββ id) β (g ββ id) β (f ββ id) β Ξ
ββ¨ extendΚ³ unitorΛ‘-commute-from β©
f β Ξ»β β (Ξ΄ ββ id) β (g ββ id) β (f ββ id) β Ξ
ββ¨ reflβ©ββ¨ reflβ©ββ¨ reflβ©ββ¨ pullΛ‘ (sym β.homomorphism β β.F-resp-β (refl , identityΒ²)) β©
f β Ξ»β β (Ξ΄ ββ id) β ((g β f) ββ id) β Ξ
β