X-Git-Url: http://git.megacz.com/?p=coq-categories.git;a=blobdiff_plain;f=src%2FMonoidalCategories_ch7_8.v;h=733dc5f6c7df364e68c3b59e4eb5610dcb8779f1;hp=be27f8915c522570c0726e82f800de7071403f83;hb=0ecd73c172f67634fa956fb52b332e6effb5a04d;hpb=90844bf411c7cddcd92d48c0b020e5775ace0849 diff --git a/src/MonoidalCategories_ch7_8.v b/src/MonoidalCategories_ch7_8.v index be27f89..733dc5f 100644 --- a/src/MonoidalCategories_ch7_8.v +++ b/src/MonoidalCategories_ch7_8.v @@ -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)). @@ -138,6 +178,28 @@ Section Bifunctor_from_MonoidalCat. End Bifunctor_from_MonoidalCat. +Instance MonoidalFullSubcategory_Monoidal `(mc:MonoidalCat) {Pobj} Pobj_unit Pobj_closed V + : MonoidalCat (PreMonoidalFullSubcategory_PreMonoidal(Pobj:=Pobj) mc V Pobj_unit Pobj_closed). + apply Build_MonoidalCat. + apply Build_CommutativeCat. + intros. + idtac. + apply Build_CentralMorphism; intros. + destruct a. + destruct b. + destruct c. + destruct d. + simpl. + apply (centralmor_first(CentralMorphism:=commutative_central(CommutativeCat:=mon_commutative(MonoidalCat:=mc)) f)). + + destruct a. + destruct b. + destruct c. + destruct d. + simpl. + apply (centralmor_first(CentralMorphism:=commutative_central(CommutativeCat:=mon_commutative(MonoidalCat:=mc)) g)). + Defined. + Class DiagonalCat `(mc:MonoidalCat) := { copy : forall (a:mc), a~~{mc}~~>(bin_obj(BinoidalCat:=mc) a a) ; copy_natural1 : forall {a}{b}(f:a~~{mc}~~>b)(c:mc), copy _ >>> f ⋉ a >>> b ⋊ f ~~ f >>> copy _ @@ -146,7 +208,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 _))