blob: fab8b0bcce30eefde45ed8d8e549399da87d4e5b (
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
|
{-# OPTIONS --without-K --safe #-}
open import Categories.Category.Core using (Category)
open import Categories.Category.Monoidal.Core using (Monoidal)
open import Categories.Category.Monoidal.Symmetric using (Symmetric)
open import Level using (Level; _⊔_)
module Category.Construction.CMonoids.Properties
{o ℓ e : Level}
{𝒞 : Category o ℓ e}
{monoidal : Monoidal 𝒞}
(symmetric : Symmetric monoidal)
where
import Categories.Category.Monoidal.Reasoning monoidal as ⊗-Reasoning
import Categories.Morphism.Reasoning 𝒞 as ⇒-Reasoning
import Category.Construction.Monoids.Properties {o} {ℓ} {e} {𝒞} monoidal as Monoids
open import Categories.Category using (_[_,_])
open import Categories.Category.Monoidal.Symmetric.Properties symmetric using (module Shorthands)
open import Categories.Morphism using (_≅_)
open import Categories.Morphism.Notation using (_[_≅_])
open import Categories.Object.Monoid monoidal using (Monoid)
open import Category.Construction.CMonoids symmetric using (CMonoids)
open import Data.Product using (Σ-syntax; _,_)
open import Object.Monoid.Commutative symmetric using (CommutativeMonoid)
module 𝒞 = Category 𝒞
open CommutativeMonoid using (monoid) renaming (Carrier to ∣_∣)
transport-by-iso
: {X : 𝒞.Obj}
→ (M : CommutativeMonoid)
→ 𝒞 [ ∣ M ∣ ≅ X ]
→ Σ[ Xₘ ∈ CommutativeMonoid ] CMonoids [ M ≅ Xₘ ]
transport-by-iso {X} M ∣M∣≅X
using (Xₘ′ , M≅Xₘ′) ← Monoids.transport-by-iso {X} (monoid M) ∣M∣≅X = Xₘ , M≅Xₘ
where
module M≅Xₘ′ = _≅_ M≅Xₘ′
open _≅_ ∣M∣≅X
module Xₘ′ = Monoid Xₘ′
open CommutativeMonoid M
open 𝒞 using (_≈_; _∘_)
open Shorthands
open ⊗-Reasoning
open ⇒-Reasoning
open Symmetric symmetric using (_⊗₁_; module braiding)
comm : from ∘ μ ∘ to ⊗₁ to ≈ (from ∘ μ ∘ to ⊗₁ to) ∘ σ⇒
comm = begin
from ∘ μ ∘ to ⊗₁ to ≈⟨ push-center (commutative) ⟩
from ∘ μ ∘ σ⇒ ∘ to ⊗₁ to ≈⟨ pushʳ (pushʳ (braiding.⇒.commute (to , to))) ⟩
(from ∘ μ ∘ to ⊗₁ to) ∘ σ⇒ ∎
Xₘ : CommutativeMonoid
Xₘ = record
{ Carrier = X
; isCommutativeMonoid = record
{ isMonoid = Xₘ′.isMonoid
; commutative = comm
}
}
M⇒Xₘ : CMonoids [ M , Xₘ ]
M⇒Xₘ = record { monoid⇒ = M≅Xₘ′.from }
Xₘ⇒M : CMonoids [ Xₘ , M ]
Xₘ⇒M = record { monoid⇒ = M≅Xₘ′.to }
M≅Xₘ : CMonoids [ M ≅ Xₘ ]
M≅Xₘ = record
{ from = M⇒Xₘ
; to = Xₘ⇒M
; iso = record
{ isoˡ = isoˡ
; isoʳ = isoʳ
}
}
|