aboutsummaryrefslogtreecommitdiff
path: root/Functor/Monoidal/Strong/Properties.agda
blob: f4774b46bd793a9a7749eecc3da6547871e46569 (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
{-# OPTIONS --without-K --safe #-}

open import Level using (Level)
open import Categories.Category.Monoidal using (MonoidalCategory)
open import Categories.Functor.Monoidal using (StrongMonoidalFunctor)

module Functor.Monoidal.Strong.Properties
  {o o′  ℓ′ e e′ : Level}
  {C : MonoidalCategory o  e}
  {D : MonoidalCategory o′ ℓ′ e′}
  (F,φ,ε : StrongMonoidalFunctor C D) where

import Categories.Category.Monoidal.Utilities as ⊗-Utilities
import Categories.Category.Construction.Core as Core

open import Categories.Functor.Monoidal using (StrongMonoidalFunctor)
open import Categories.Functor.Properties using ([_]-resp-≅)

module C where
  open MonoidalCategory C public
  open ⊗-Utilities.Shorthands monoidal public using (α⇐; λ⇐; ρ⇐)

module D where
  open MonoidalCategory D public
  open ⊗-Utilities.Shorthands monoidal using (α⇐; λ⇐; ρ⇐) public
  open Core.Shorthands U using (_∘ᵢ_; idᵢ; _≈ᵢ_; ⌞_⌟; to-≈; _≅_; module HomReasoningᵢ) public
  open ⊗-Utilities monoidal using (_⊗ᵢ_) public

open D

open StrongMonoidalFunctor F,φ,ε

private

  variable
    X Y Z : C.Obj

   : F₀ ((X C.⊗₀ Y) C.⊗₀ Z)  F₀ (X C.⊗₀ (Y C.⊗₀ Z))
   = [ F ]-resp-≅ C.associator

  α : {A B C : Obj}  (A ⊗₀ B) ⊗₀ C  A ⊗₀ (B ⊗₀ C)
  α = associator

  λ- : {A : Obj}  unit ⊗₀ A  A
  λ- = unitorˡ

   : F₀ (C.unit C.⊗₀ X)  F₀ X
   = [ F ]-resp-≅ C.unitorˡ

  ρ : {A : Obj}  A ⊗₀ unit  A
  ρ = unitorʳ

   : F₀ (X C.⊗₀ C.unit)  F₀ X
   = [ F ]-resp-≅ C.unitorʳ

  φ : F₀ X ⊗₀ F₀ Y  F₀ (X C.⊗₀ Y)
  φ = ⊗-homo.FX≅GX

module Shorthands where

  φ⇒ : F₀ X ⊗₀ F₀ Y  F₀ (X C.⊗₀ Y)
  φ⇒ = ⊗-homo.⇒.η _

  φ⇐ : F₀ (X C.⊗₀ Y)  F₀ X ⊗₀ F₀ Y
  φ⇐ = ⊗-homo.⇐.η _

  ε⇒ : unit  F₀ C.unit
  ε⇒ = ε.from

  ε⇐ : F₀ C.unit  unit
  ε⇐ = ε.to

open Shorthands
open HomReasoning

associativityᵢ :  {X} {Y} {Z} ∘ᵢ φ ∘ᵢ φ ⊗ᵢ idᵢ ≈ᵢ φ ∘ᵢ idᵢ ⊗ᵢ φ ∘ᵢ α
associativityᵢ =  associativity associativity-inv : φ⇐ ⊗₁ id  φ⇐  F₁ (C.α⇐ {X} {Y} {Z})  α⇐  id ⊗₁ φ⇐  φ⇐
associativity-inv = begin
    φ⇐ ⊗₁ id  φ⇐  F₁ C.α⇐   ≈⟨ sym-assoc     (φ⇐ ⊗₁ id  φ⇐)  F₁ C.α⇐ ≈⟨ to-≈ associativityᵢ     (α⇐  id ⊗₁ φ⇐)  φ⇐      ≈⟨ assoc     α⇐  id ⊗₁ φ⇐  φ⇐        unitaryˡᵢ :  {X} ∘ᵢ φ ∘ᵢ ε ⊗ᵢ idᵢ ≈ᵢ λ-
unitaryˡᵢ =  unitaryˡ unitaryˡ-inv : ε⇐ ⊗₁ id  φ⇐  F₁ (C.λ⇐ {X})  λ⇐
unitaryˡ-inv = begin
    ε⇐ ⊗₁ id  φ⇐  F₁ C.λ⇐   ≈⟨ sym-assoc     (ε⇐ ⊗₁ id  φ⇐)  F₁ C.λ⇐ ≈⟨ to-≈ unitaryˡᵢ     λ                        unitaryʳᵢ :  {X} ∘ᵢ φ ∘ᵢ idᵢ ⊗ᵢ ε ≈ᵢ ρ
unitaryʳᵢ =  unitaryʳ unitaryʳ-inv : id ⊗₁ ε⇐  φ⇐  F₁ (C.ρ⇐ {X})  ρ⇐
unitaryʳ-inv = begin
    id ⊗₁ ε⇐  φ⇐  F₁ C.ρ⇐   ≈⟨ sym-assoc     (id ⊗₁ ε⇐  φ⇐)  F₁ C.ρ⇐ ≈⟨ to-≈ unitaryʳᵢ     ρ⇐