From 3e0565657f896d3064e68b03d30c1a748a8bed25 Mon Sep 17 00:00:00 2001 From: Jacques Comeaux Date: Sat, 10 Jan 2026 22:04:30 -0600 Subject: Extend monoidalize functor to commutative monoids --- Functor/Monoidal/Construction/CMonoidValued.agda | 100 +++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Functor/Monoidal/Construction/CMonoidValued.agda (limited to 'Functor/Monoidal') 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,βŠ—,Ξ΅,Οƒ -- cgit v1.2.3