aboutsummaryrefslogtreecommitdiff
path: root/Functor/Monoidal/Construction
diff options
context:
space:
mode:
Diffstat (limited to 'Functor/Monoidal/Construction')
-rw-r--r--Functor/Monoidal/Construction/CMonoidValued.agda100
1 files changed, 100 insertions, 0 deletions
diff --git a/Functor/Monoidal/Construction/CMonoidValued.agda b/Functor/Monoidal/Construction/CMonoidValued.agda
new file mode 100644
index 0000000..2ac8be2
--- /dev/null
+++ b/Functor/Monoidal/Construction/CMonoidValued.agda
@@ -0,0 +1,100 @@
+{-# OPTIONS --without-K --safe #-}
+
+open import Categories.Category using (Category)
+open import Categories.Category.Cocartesian using (Cocartesian)
+open import Category.Construction.CMonoids using (CMonoids)
+open import Categories.Category.Monoidal.Bundle using (SymmetricMonoidalCategory)
+open import Categories.Functor using (Functor) renaming (_∘F_ to _βˆ™_)
+open import Level using (Level; _βŠ”_)
+
+-- A functor from a cocartesian category π’ž to CMonoids[S]
+-- can be turned into a symmetric monoidal functor from π’ž to S
+
+module Functor.Monoidal.Construction.CMonoidValued
+ {o oβ€² β„“ β„“β€² e eβ€² : Level}
+ {π’ž : Category o β„“ e}
+ (π’ž-+ : Cocartesian π’ž)
+ {S : SymmetricMonoidalCategory oβ€² β„“β€² eβ€²}
+ (let module S = SymmetricMonoidalCategory S)
+ (M : Functor π’ž (CMonoids S.symmetric))
+ where
+
+import Categories.Category.Monoidal.Reasoning as βŠ—-Reasoning
+import Categories.Morphism.Reasoning as β‡’-Reasoning
+import Object.Monoid.Commutative as CommutativeMonoidObject
+import Functor.Monoidal.Construction.MonoidValued as MonoidValued
+
+open import Categories.Category.Cocartesian using (module CocartesianSymmetricMonoidal)
+open import Categories.Category.Cocartesian.Bundle using (CocartesianCategory)
+open import Categories.Category.Construction.Monoids using (Monoids)
+open import Categories.Category.Monoidal.Symmetric.Properties using (module Shorthands)
+open import Categories.Functor.Monoidal.Symmetric using (module Lax)
+open import Categories.Functor.Properties using ([_]-resp-∘)
+open import Data.Product using (_,_)
+open import Functor.Forgetful.Instance.CMonoid S.symmetric using (Forget)
+open import Functor.Forgetful.Instance.Monoid S.monoidal using () renaming (Forget to Forgetβ‚˜)
+
+private
+
+ G : Functor π’ž (Monoids S.monoidal)
+ G = Forget βˆ™ M
+
+ H : Functor π’ž S.U
+ H = Forgetβ‚˜ βˆ™ G
+
+ module π’ž = CocartesianCategory (record { cocartesian = π’ž-+ })
+ module π’ž-SM = CocartesianSymmetricMonoidal π’ž π’ž-+
+
+ π’ž-SMC : SymmetricMonoidalCategory o β„“ e
+ π’ž-SMC = record { symmetric = π’ž-SM.+-symmetric }
+
+ module H = Functor H
+ module M = Functor M
+
+ open CommutativeMonoidObject S.symmetric using (CommutativeMonoid; CommutativeMonoid⇒)
+ open CommutativeMonoid using (ΞΌ; Carrier) renaming (commutative to ΞΌ-commutative)
+ open CommutativeMonoid⇒
+ open π’ž using (_+_; i₁; iβ‚‚; inject₁; injectβ‚‚; +-swap)
+ open S
+ open β‡’-Reasoning U
+ open βŠ—-Reasoning monoidal
+ open Shorthands symmetric
+
+ ⊲ : {A : π’ž.Obj} β†’ H.β‚€ A βŠ—β‚€ H.β‚€ A β‡’ H.β‚€ A
+ ⊲ {A} = ΞΌ (M.β‚€ A)
+
+ β‡’βŠ² : {A B : π’ž.Obj} (f : A π’ž.β‡’ B) β†’ H.₁ f ∘ ⊲ β‰ˆ ⊲ ∘ H.₁ f βŠ—β‚ H.₁ f
+ β‡’βŠ² f = preserves-ΞΌ (M.₁ f)
+
+ ⊲-βŠ— : {n m : π’ž.Obj} β†’ H.β‚€ n βŠ—β‚€ H.β‚€ m β‡’ H.β‚€ (n + m)
+ ⊲-βŠ— = ⊲ ∘ H.₁ i₁ βŠ—β‚ H.₁ iβ‚‚
+
+ ⊲-Οƒ : {n : π’ž.Obj} β†’ ⊲ {n} β‰ˆ ⊲ ∘ Οƒβ‡’
+ ⊲-Οƒ {A} = ΞΌ-commutative (M.β‚€ A)
+
+ braiding-compat
+ : {n m : π’ž.Obj}
+ β†’ H.₁ +-swap ∘ ⊲-βŠ— {n} {m}
+ β‰ˆ ⊲-βŠ— ∘ Οƒβ‡’ {H.β‚€ n} {H.β‚€ m}
+ braiding-compat {n} {m} = begin
+ H.₁ +-swap ∘ ⊲-βŠ— {n} {m} β‰‘βŸ¨βŸ©
+ H.₁ +-swap ∘ ⊲ {n + m} ∘ H.₁ i₁ βŠ—β‚ H.₁ iβ‚‚ β‰ˆβŸ¨ extendΚ³ (β‡’βŠ² +-swap) ⟩
+ ⊲ {m + n} ∘ H.₁ +-swap βŠ—β‚ H.₁ +-swap ∘ H.₁ i₁ βŠ—β‚ H.₁ iβ‚‚ β‰ˆβŸ¨ refl⟩∘⟨ βŠ—-distrib-over-∘ ⟨
+ ⊲ {m + n} ∘ (H.₁ +-swap ∘ H.₁ i₁) βŠ—β‚ (H.₁ +-swap ∘ H.₁ iβ‚‚) β‰ˆβŸ¨ refl⟩∘⟨ [ H ]-resp-∘ inject₁ βŸ©βŠ—βŸ¨ [ H ]-resp-∘ injectβ‚‚ ⟩
+ ⊲ {m + n} ∘ H.₁ iβ‚‚ βŠ—β‚ H.₁ i₁ β‰ˆβŸ¨ ⊲-Οƒ ⟩∘⟨refl ⟩
+ (⊲ {m + n} ∘ Οƒβ‡’) ∘ H.₁ iβ‚‚ βŠ—β‚ H.₁ i₁ β‰ˆβŸ¨ extendΛ‘ (braiding.β‡’.commute (H.₁ iβ‚‚ , H.₁ i₁)) ⟩
+ (⊲ {m + n} ∘ H.₁ i₁ βŠ—β‚ H.₁ iβ‚‚) ∘ Οƒβ‡’ β‰‘βŸ¨βŸ©
+ ⊲-βŠ— {m} {n} ∘ Οƒβ‡’ {H.β‚€ n} {H.β‚€ m} ∎
+
+open MonoidValued π’ž-+ G using (F,βŠ—,Ξ΅)
+
+F,βŠ—,Ξ΅,Οƒ : Lax.SymmetricMonoidalFunctor π’ž-SMC S
+F,βŠ—,Ξ΅,Οƒ = record
+ { F,βŠ—,Ξ΅
+ ; isBraidedMonoidal = record
+ { F,βŠ—,Ξ΅
+ ; braiding-compat = braiding-compat
+ }
+ }
+
+module F,βŠ—,Ξ΅,Οƒ = Lax.SymmetricMonoidalFunctor F,βŠ—,Ξ΅,Οƒ