X-Git-Url: http://git.megacz.com/?p=coq-categories.git;a=blobdiff_plain;f=src%2FMonoidalCategories_ch7_8.v;h=27a7fe7a934f91fe18403b9d739652f4272f551e;hp=835531933562a676c11ce818518bf3521b396a18;hb=2594faf30b5d3e44380460c937023556322324c7;hpb=9acb9b7b4ed12543e54c39c82d7b0f34d04d0207 diff --git a/src/MonoidalCategories_ch7_8.v b/src/MonoidalCategories_ch7_8.v index 8355319..27a7fe7 100644 --- a/src/MonoidalCategories_ch7_8.v +++ b/src/MonoidalCategories_ch7_8.v @@ -1,5 +1,5 @@ Generalizable All Variables. -Require Import Preamble. +Require Import Notations. Require Import Categories_ch1_3. Require Import Functors_ch1_4. Require Import Isomorphisms_ch1_5. @@ -46,6 +46,46 @@ Definition MonoidalFunctorsCompose (PMF23 :MonoidalFunctor PM2 PM3 PMFF23) := PreMonoidalFunctorsCompose PMF12 PMF23. +Class MonoidalNaturalIsomorphism + `{C1:MonoidalCat}`{C2:MonoidalCat} + `(F1:!MonoidalFunctor(fobj:=fobj1) C1 C2 Func1) + `(F2:!MonoidalFunctor(fobj:=fobj2) C1 C2 Func2) := +{ mni_ni : NaturalIsomorphism F1 F2 +; mni_commutes1 : forall A B, + #(ni_iso (mf_first(PreMonoidalFunctor:=F1) B) A) >>> #(ni_iso mni_ni (A⊗B)) ~~ + #(ni_iso mni_ni _) ⋉ _ >>> _ ⋊ #(ni_iso mni_ni _) >>> #(ni_iso (mf_first(PreMonoidalFunctor:=F2) B) A) +; mni_commutes2 : forall A B, + #(ni_iso (mf_second(PreMonoidalFunctor:=F1) A) B) >>> #(ni_iso mni_ni (A⊗B)) ~~ + #(ni_iso mni_ni _) ⋉ _ >>> _ ⋊ #(ni_iso mni_ni _) >>> #(ni_iso (mf_second(PreMonoidalFunctor:=F2) A) B) +}. +Notation "F <~~⊗~~> G" := (@MonoidalNaturalIsomorphism _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ F _ _ G) : category_scope. + +(* an equivalence of categories via monoidal functors, but the natural iso isn't necessarily a monoidal natural iso *) +Structure MonoidalEquivalence `{C1:MonoidalCat} `{C2:MonoidalCat} := +{ meqv_forward_fobj : C1 -> C2 +; meqv_forward : Functor C1 C2 meqv_forward_fobj +; meqv_forward_mon : PreMonoidalFunctor _ _ meqv_forward +; meqv_backward_fobj : C2 -> C1 +; meqv_backward : Functor C2 C1 meqv_backward_fobj +; meqv_backward_mon : PreMonoidalFunctor _ _ meqv_backward +; meqv_comp1 : meqv_forward >>>> meqv_backward ≃ functor_id _ +; meqv_comp2 : meqv_backward >>>> meqv_forward ≃ functor_id _ +}. + +(* a monoidally-natural equivalence of categories *) +(* +Structure MonoidalNaturalEquivalence `{C1:MonoidalCat} `{C2:MonoidalCat} := +{ mneqv_forward_fobj : C1 -> C2 +; mneqv_forward : Functor C1 C2 mneqv_forward_fobj +; mneqv_forward_mon : PreMonoidalFunctor _ _ mneqv_forward +; mneqv_backward_fobj : C2 -> C1 +; mneqv_backward : Functor C2 C1 mneqv_backward_fobj +; mneqv_backward_mon : PreMonoidalFunctor _ _ mneqv_backward +; mneqv_comp1 : mneqv_forward_mon >>⊗>> mneqv_backward_mon <~~⊗~~> premonoidal_id _ +; mneqv_comp2 : mneqv_backward_mon >>⊗>> mneqv_forward_mon <~~⊗~~> premonoidal_id _ +}. +*) + Section BinoidalCat_from_Bifunctor. Context `{C:Category}{Fobj}(F:Functor (C ×× C) C Fobj). Definition BinoidalCat_from_Bifunctor_first (a:C) : Functor C C (fun b => Fobj (pair_obj b a)). @@ -146,7 +186,7 @@ Class DiagonalCat `(mc:MonoidalCat) := }. Class CartesianCat `(mc:MonoidalCat) := -{ car_terminal :> TerminalObject mc pmon_I +{ car_terminal :> TerminalObject mc (pmon_I mc) ; car_diagonal : DiagonalCat mc ; car_law1 : forall {a}, id a ~~ (copy(DiagonalCat:=car_diagonal) a) >>> (drop a ⋉ a) >>> (#(pmon_cancell _)) ; car_law2 : forall {a}, id a ~~ (copy(DiagonalCat:=car_diagonal) a) >>> (a ⋊ drop a) >>> (#(pmon_cancelr _))