Proposition dwhisker_enriched_profunctor_square_laws {V : sym_mon_closed_cat} {C₁ C₂ C₁' C₂' : category} {EC₁ : enrichment C₁ V} {EC₂ : enrichment C₂ V} {EC₁' : enrichment C₁' V} {EC₂' : enrichment C₂' V} {F : C₁ ⟶ C₂} {EF : functor_enrichment F EC₁ EC₂} {G G' : C₁' ⟶ C₂'} {τ : G ⟹ G'} {EG : functor_enrichment G EC₁' EC₂'} {EG' : functor_enrichment G' EC₁' EC₂'} {P : EC₁ ↛e EC₁'} {Q : EC₂ ↛e EC₂'} (Eτ : nat_trans_enrichment τ EG EG') (θ : enriched_profunctor_square EF EG' P Q) : enriched_profunctor_transformation_laws (dwhisker_enriched_profunctor_square_data Eτ θ). Proof. split. - intros x₁ x₂ y ; cbn. etrans. { rewrite tensor_comp_id_l. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite <- tensor_split. rewrite tensor_split'. rewrite !assoc'. rewrite lmap_e_lmap_e. apply idpath. } etrans. { rewrite !assoc. rewrite tensor_comp_id_l. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite <- tensor_split. rewrite tensor_split'. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite tensor_rassociator. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite <- !tensor_comp_id_r. rewrite tensor_sym_mon_braiding. apply idpath. } etrans. { apply maponpaths. rewrite <- tensor_id_id. rewrite !assoc. rewrite tensor_rassociator. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite <- tensor_comp_id_r. rewrite !assoc. rewrite tensor_sym_mon_braiding. rewrite !assoc'. do 2 apply maponpaths_2. apply maponpaths. rewrite !assoc. rewrite <- tensor_split. apply idpath. } rewrite tensor_comp_id_l. etrans. { rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite mon_inv_triangle. rewrite !assoc'. etrans. { apply maponpaths. rewrite !assoc. rewrite mon_lassociator_rassociator. rewrite id_left. apply idpath. } rewrite !assoc. rewrite <- tensor_comp_id_r. do 2 apply maponpaths_2. rewrite !assoc. rewrite sym_mon_braiding_rinvunitor. exact (!(Eτ x₂ x₁)). } rewrite !assoc. rewrite <- (enriched_profunctor_square_lmap_e θ). etrans. { rewrite tensor_comp_id_r. rewrite !assoc. do 2 apply maponpaths_2. rewrite <- tensor_split. etrans. { apply maponpaths_2. rewrite tensor_split'. rewrite !assoc. rewrite <- tensor_rinvunitor. apply idpath. } rewrite !assoc'. rewrite tensor_comp_r_id_r. apply idpath. } rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite tensor_linvunitor. rewrite !assoc'. refine (!_). etrans. { apply maponpaths. rewrite !assoc. rewrite <- tensor_split. rewrite tensor_split'. rewrite !assoc'. apply maponpaths. apply (lmap_e_lmap_e Q). } rewrite !assoc. apply maponpaths_2. rewrite tensor_comp_id_r. apply maponpaths_2. rewrite <- tensor_id_id. rewrite !assoc'. etrans. { apply maponpaths. rewrite !assoc. rewrite tensor_rassociator. rewrite !assoc'. apply maponpaths. rewrite <- tensor_comp_id_r. rewrite tensor_sym_mon_braiding. rewrite tensor_comp_id_r. apply idpath. } rewrite !assoc. apply maponpaths_2. rewrite <- mon_linvunitor_triangle. rewrite !assoc'. etrans. { apply maponpaths. rewrite !assoc. rewrite mon_lassociator_rassociator. rewrite id_left. apply idpath. } rewrite <- tensor_comp_id_r. rewrite sym_mon_braiding_linvunitor. apply idpath. - intros x y₁ y₂ ; cbn. rewrite !assoc'. rewrite tensor_comp_id_l. rewrite !assoc. rewrite <- (enriched_profunctor_square_rmap_e θ). rewrite (tensor_split (EF y₁ y₂) (θ x y₁)). rewrite !assoc'. apply maponpaths. rewrite !assoc. etrans. { rewrite <- tensor_split. rewrite tensor_split'. apply idpath. } rewrite !assoc'. apply maponpaths. refine (!_). etrans. { rewrite !assoc. rewrite tensor_linvunitor ; cbn. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite <- tensor_split. rewrite tensor_split'. rewrite !assoc'. apply idpath. } rewrite rmap_e_lmap_e. rewrite !assoc. rewrite tensor_comp_id_l. do 2 apply maponpaths_2. rewrite !assoc'. etrans. { apply maponpaths. rewrite <- tensor_id_id. rewrite !assoc. rewrite tensor_rassociator. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite <- tensor_comp_id_r. rewrite tensor_sym_mon_braiding. rewrite tensor_comp_id_r. rewrite !assoc'. rewrite tensor_lassociator. apply idpath. } rewrite tensor_comp_id_l. rewrite !assoc. apply maponpaths_2. rewrite <- mon_linvunitor_triangle. rewrite !assoc'. etrans. { apply maponpaths. rewrite !assoc. rewrite mon_lassociator_rassociator. rewrite id_left. apply idpath. } rewrite !assoc. rewrite <- tensor_comp_id_r. rewrite sym_mon_braiding_linvunitor. rewrite mon_inv_triangle. apply idpath. Qed.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Prelude. Require Import UniMath.CategoryTheory.OppositeCategory.Core. Require Import UniMath.CategoryTheory.EnrichedCats.Enrichment. Require Import UniMath.CategoryTheory.EnrichedCats.EnrichmentFunctor. Require Import UniMath.CategoryTheory.EnrichedCats.EnrichmentTransformation. Require Import UniMath.CategoryTheory.EnrichedCats.Enriched.Enriched. Require Import UniMath.CategoryTheory.EnrichedCats.Enriched.EnrichmentEquiv. Require Import UniMath.CategoryTheory.EnrichedCats.Examples.Tensor. Require Import UniMath.CategoryTheory.EnrichedCats.Bifunctors.CurriedBifunctors. Require Import UniMath.CategoryTheory.EnrichedCats.Bifunctors.CurriedTransformations. Require Import UniMath.CategoryTheory.EnrichedCats.Bifunctors.WhiskeredBifunctors. Require Import UniMath.CategoryTheory.EnrichedCats.Bifunctors.WhiskeredTransformations. Require Import UniMath.CategoryTheory.EnrichedCats.Examples.SelfEnriched. Require Import UniMath.CategoryTheory.EnrichedCats.Examples.OppositeEnriched. Require Import UniMath.CategoryTheory.EnrichedCats.Profunctors.Profunctor. Require Import UniMath.CategoryTheory.EnrichedCats.Profunctors.StandardProfunctors. Require Import UniMath.CategoryTheory.EnrichedCats.Profunctors.ProfunctorTransformations. Require Import UniMath.CategoryTheory.Monoidal.Categories. Require Import UniMath.CategoryTheory.Monoidal.WhiskeredBifunctors. Require Import UniMath.CategoryTheory.Monoidal.Structure.Symmetric. Require Import UniMath.CategoryTheory.Monoidal.Structure.Closed. Import MonoidalNotations.