Library UniMath.CategoryTheory.Monoidal.MonoidalFunctors
Monoidal functors
Require Import UniMath.Foundations.PartD.
Require Import UniMath.CategoryTheory.Categories.
Require Import UniMath.CategoryTheory.functor_categories.
Require Import UniMath.CategoryTheory.PrecategoryBinProduct.
Require Import UniMath.CategoryTheory.Monoidal.MonoidalCategories.
Local Open Scope cat.
Section Monoidal_Functor.
Context (Mon_C Mon_D : monoidal_precat).
Let C := monoidal_precat_precat Mon_C.
Let tensor_C := monoidal_precat_tensor Mon_C.
Notation "X ⊗_C Y" := (tensor_C (X , Y)) (at level 31).
Notation "f #⊗_C g" := (# tensor_C (f #, g)) (at level 31).
Let I_C := monoidal_precat_unit Mon_C.
Let α_C := monoidal_precat_associator Mon_C.
Let λ_C := monoidal_precat_left_unitor Mon_C.
Let ρ_C := monoidal_precat_right_unitor Mon_C.
Let D := monoidal_precat_precat Mon_D.
Let tensor_D := monoidal_precat_tensor Mon_D.
Notation "X ⊗_D Y" := (tensor_D (X , Y)) (at level 31).
Notation "f #⊗_D g" := (# tensor_D (f #, g)) (at level 31).
Let I_D := monoidal_precat_unit Mon_D.
Let α_D := monoidal_precat_associator Mon_D.
Let λ_D := monoidal_precat_left_unitor Mon_D.
Let ρ_D := monoidal_precat_right_unitor Mon_D.
Section Monoidal_Functor_Conditions.
Context (F : C ⟶ D).
Definition monoidal_functor_map_dom : precategory_binproduct C C ⟶ D.
use tpair; [| split].
- use tpair.
exact (λ c, F (ob1 c) ⊗_D F (ob2 c)).
intros ? ? f.
exact (#F (mor1 f) #⊗_D #F (mor2 f)).
- intro.
simpl.
repeat rewrite functor_id.
apply tensor_id.
- unfold functor_compax.
simpl.
intros.
repeat rewrite functor_comp.
apply tensor_comp.
Defined.
Definition monoidal_functor_map_codom : precategory_binproduct C C ⟶ D.
use tpair; [| split].
- use tpair.
exact (λ c, F (ob1 c ⊗_C ob2 c)).
intros ? ? f.
exact (#F (mor1 f #⊗_C mor2 f)).
- intro.
simpl.
rewrite binprod_id.
rewrite (functor_id tensor_C).
rewrite functor_id.
reflexivity.
- unfold functor_compax.
simpl.
intros.
rewrite binprod_comp.
rewrite (functor_comp tensor_C).
rewrite functor_comp.
reflexivity.
Defined.
Definition monoidal_functor_map :=
monoidal_functor_map_dom ⟹ monoidal_functor_map_codom.
Definition monoidal_functor_associativity (μ : monoidal_functor_map) :=
∏ (x y z : C),
pr1 μ (x, y) #⊗_D id F(z) · pr1 μ (x ⊗_C y, z) · #F (pr1 α_C ((x, y), z))
=
pr1 α_D ((F x, F y), F z) · id (F x) #⊗_D pr1 μ (y, z) · pr1 μ (x, y ⊗_C z).
Definition monoidal_functor_unitality (ϵ : I_D --> F I_C) (μ : monoidal_functor_map) :=
∏ (x : C),
(pr1 λ_D (F x) = ϵ #⊗_D (id (F x)) · pr1 μ (I_C, x) · #F (pr1 λ_C x))
×
(pr1 ρ_D (F x) = (id (F x)) #⊗_D ϵ · pr1 μ (x, I_C) · #F (pr1 ρ_C x)).
End Monoidal_Functor_Conditions.
Definition lax_monoidal_functor : UU :=
∑ F : C ⟶ D, ∑ ϵ : I_D --> F I_C, ∑ μ : monoidal_functor_map F, (monoidal_functor_associativity F μ) × (monoidal_functor_unitality F ϵ μ).
Definition strong_monoidal_functor : UU :=
∑ L : lax_monoidal_functor,
(is_iso (pr1 (pr2 L)))
×
(is_nat_iso (pr1 (pr2 (pr2 L)))).
End Monoidal_Functor.
Definition strong_monoidal_functor_functor {Mon Mon' : monoidal_precat} (U : strong_monoidal_functor Mon Mon') := pr1 (pr1 U).
Coercion strong_monoidal_functor_functor : strong_monoidal_functor >-> functor.