Proposition cartesian_to_symmetric_laws : sym_mon_cat_laws_tensored M cartesian_to_braiding_data. Proof. repeat split. - intros x y. use (BinProductArrowsEq _ _ _ (is_cartesian_BinProduct M_cart x y)). + rewrite !assoc' ; cbn. etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr1. } rewrite id_left. apply cartesian_to_braiding_data_pr2. + rewrite !assoc'. etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr2. } rewrite id_left. apply cartesian_to_braiding_data_pr1. - intros x₁ x₂ y₁ y₂ f g. use (BinProductArrowsEq _ _ _ (is_cartesian_BinProduct M_cart _ _)). + rewrite !assoc' ; cbn. etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr1. } rewrite cartesian_tensor_pr2. rewrite cartesian_tensor_pr1. rewrite !assoc. apply maponpaths_2. refine (!_). apply cartesian_to_braiding_data_pr1. + rewrite !assoc' ; cbn. etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr2. } rewrite cartesian_tensor_pr2. rewrite cartesian_tensor_pr1. rewrite !assoc. apply maponpaths_2. refine (!_). apply cartesian_to_braiding_data_pr2. - intros x y z. use (BinProductArrowsEq _ _ _ (is_cartesian_BinProduct M_cart _ _)) ; cbn. + rewrite !assoc'. rewrite cartesian_tensor_pr1. rewrite id_right. rewrite !mon_lassociator_pr1. etrans. { apply maponpaths. rewrite !assoc. apply maponpaths_2. apply cartesian_to_braiding_data_pr1. } refine (!_). rewrite !assoc. rewrite cartesian_tensor_pr1. rewrite !assoc'. etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr1. } rewrite !assoc. rewrite mon_lassociator_pr2. rewrite cartesian_tensor_pr1. apply idpath. + rewrite !assoc'. rewrite mon_lassociator_pr2. rewrite cartesian_tensor_pr2. rewrite !(maponpaths (λ z, _ · z) (assoc _ _ _)). rewrite mon_lassociator_pr2. rewrite !assoc. rewrite <- tensor_comp_id_r. refine (!_). etrans. { do 2 apply maponpaths_2. apply cartesian_to_braiding_data_pr2. } use (BinProductArrowsEq _ _ _ (is_cartesian_BinProduct M_cart _ _)) ; cbn. * rewrite !assoc'. etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr1. } rewrite cartesian_tensor_pr2. rewrite id_right. rewrite cartesian_tensor_pr1. refine (!_). etrans. { apply maponpaths. rewrite !assoc. apply maponpaths_2. apply cartesian_to_braiding_data_pr1. } rewrite !assoc. rewrite mon_lassociator_pr2. rewrite cartesian_tensor_pr2. rewrite id_right. apply idpath. * rewrite !assoc'. etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr2. } rewrite cartesian_tensor_pr2. rewrite id_right. rewrite cartesian_tensor_pr1. refine (!_). etrans. { apply maponpaths. apply cartesian_to_braiding_data_pr2. } rewrite mon_lassociator_pr1. apply idpath. Qed.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Categories. Require Import UniMath.CategoryTheory.Core.Isos. Require Import UniMath.CategoryTheory.Core.Functors. Require Import UniMath.CategoryTheory.Core.NaturalTransformations. Require Import UniMath.CategoryTheory.Adjunctions.Core. Require Import UniMath.CategoryTheory.Monoidal.WhiskeredBifunctors. Require Import UniMath.CategoryTheory.Monoidal.Categories. Require Import UniMath.CategoryTheory.Monoidal.Structure.Symmetric. Require Import UniMath.CategoryTheory.Limits.Terminal. Require Import UniMath.CategoryTheory.Limits.BinProducts. Require Import UniMath.CategoryTheory.Limits.Initial. Require Import UniMath.CategoryTheory.Limits.BinCoproducts. Import BifunctorNotations. Import MonoidalNotations.