Lemma binprod_lwhisker {a₁ a₂ a₃ b₁ b₂ b₃ : B} (f₁ : a₁ --> a₂) (f₂ : b₁ --> b₂) {g₁ h₁ : a₂ --> a₃} {g₂ h₂ : b₂ --> b₃} (τ₁ : g₁ ==> h₁) (τ₂ : g₂ ==> h₂) : pair_1cell_comp f₁ g₁ f₂ g₂ • ((f₁ ◃ τ₁) ⊗₂ (f₂ ◃ τ₂)) = ((f₁ ⊗₁ f₂) ◃ (τ₁ ⊗₂ τ₂)) • pair_1cell_comp f₁ h₁ f₂ h₂. Proof. use binprod_ump_2cell_unique_alt. - apply (pr2 B). - rewrite <- !rwhisker_vcomp. etrans. { apply maponpaths. apply pair_2cell_pr1. } etrans. { apply maponpaths_2. apply binprod_ump_2cell_pr1. } rewrite !vassocl. use vcomp_move_R_pM ; [ is_iso | ] ; cbn. refine (!_). etrans. { rewrite !vassocr. rewrite <- rwhisker_lwhisker. rewrite !vassocl. apply maponpaths_2. etrans. { apply maponpaths. apply pair_2cell_pr1. } rewrite <- !lwhisker_vcomp. apply idpath. } rewrite !vassocl. apply maponpaths. refine (!_). etrans. { do 3 apply maponpaths. rewrite !vassocr. rewrite vcomp_linv. rewrite id2_left. apply idpath. } refine (!_). etrans. { do 3 apply maponpaths. apply binprod_ump_2cell_pr1. } etrans. { do 2 apply maponpaths. rewrite !vassocr. rewrite lassociator_rassociator. rewrite id2_left. apply idpath. } etrans. { apply maponpaths. rewrite !vassocr. rewrite lwhisker_vcomp. rewrite vcomp_linv. rewrite lwhisker_id2. rewrite id2_left. apply idpath. } rewrite !vassocr. rewrite lwhisker_lwhisker. rewrite !vassocl. apply maponpaths. rewrite !vassocr. rewrite <- vcomp_whisker. rewrite !vassocl. apply maponpaths. rewrite !vassocr. apply maponpaths_2. rewrite lwhisker_lwhisker_rassociator. apply idpath. - rewrite <- !rwhisker_vcomp. etrans. { apply maponpaths. apply pair_2cell_pr2. } etrans. { apply maponpaths_2. apply binprod_ump_2cell_pr2. } rewrite !vassocl. use vcomp_move_R_pM ; [ is_iso | ] ; cbn. refine (!_). etrans. { rewrite !vassocr. rewrite <- rwhisker_lwhisker. rewrite !vassocl. apply maponpaths_2. etrans. { apply maponpaths. apply pair_2cell_pr2. } rewrite <- !lwhisker_vcomp. apply idpath. } rewrite !vassocl. apply maponpaths. refine (!_). etrans. { do 3 apply maponpaths. rewrite !vassocr. rewrite vcomp_linv. rewrite id2_left. apply idpath. } refine (!_). etrans. { do 3 apply maponpaths. apply binprod_ump_2cell_pr2. } etrans. { do 2 apply maponpaths. rewrite !vassocr. rewrite lassociator_rassociator. rewrite id2_left. apply idpath. } etrans. { apply maponpaths. rewrite !vassocr. rewrite lwhisker_vcomp. rewrite vcomp_linv. rewrite lwhisker_id2. rewrite id2_left. apply idpath. } rewrite !vassocr. rewrite lwhisker_lwhisker. rewrite !vassocl. apply maponpaths. rewrite !vassocr. rewrite <- vcomp_whisker. rewrite !vassocl. apply maponpaths. rewrite !vassocr. apply maponpaths_2. rewrite lwhisker_lwhisker_rassociator. apply idpath. Qed.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Categories. Require Import UniMath.CategoryTheory.Core.Functors. Require Import UniMath.CategoryTheory.Core.NaturalTransformations. Require Import UniMath.CategoryTheory.Core.Isos. Require Import UniMath.CategoryTheory.Core.Univalence. Require Import UniMath.CategoryTheory.Categories.StandardCategories. Require Import UniMath.CategoryTheory.Equivalences.Core. Require Import UniMath.CategoryTheory.Equivalences.FullyFaithful. Require Import UniMath.CategoryTheory.PrecategoryBinProduct. Require Import UniMath.Bicategories.Core.Bicat. Import Bicat.Notations. Require Import UniMath.Bicategories.Core.Invertible_2cells. Require Import UniMath.Bicategories.Core.BicategoryLaws. Require Import UniMath.Bicategories.Core.Unitors. Require Import UniMath.Bicategories.Core.Examples.BicatOfUnivCats. Require Import UniMath.Bicategories.Morphisms.Adjunctions. Require Import UniMath.Bicategories.Core.AdjointUnique. Require Import UniMath.Bicategories.Core.Univalence.