Proposition local_equivalence_mnd_ob_laws : mnd_mor_laws local_equivalence_mnd_ob_data. Proof. split. - cbn. rewrite id2_rwhisker. rewrite id2_right. refine (!(id2_left _) @ _). rewrite !vassocr. apply maponpaths_2. rewrite <- local_equivalence_inv_twocell_id. rewrite <- linvunitor_lunitor. rewrite !local_equivalence_inv_twocell_comp. rewrite !vassocr. apply maponpaths_2. etrans. { apply maponpaths. refine (_ @ mnd_mor_unit f). cbn. rewrite id2_rwhisker. rewrite id2_right. apply idpath. } cbn -[psfunctor_id]. rewrite !local_equivalence_inv_twocell_comp. rewrite local_equivalence_twocell_rinvunitor. apply maponpaths_2. rewrite !vassocl. apply maponpaths. refine (!_). etrans. { apply maponpaths. rewrite !vassocr. apply maponpaths_2. rewrite !lwhisker_vcomp. apply maponpaths. rewrite !vassocl. rewrite local_equivalence_unit_natural. apply idpath. } etrans. { apply maponpaths. rewrite <- !lwhisker_vcomp. rewrite !vassocl. do 2 apply maponpaths. rewrite <- local_equivalence_twocell_lwhisker_inv. apply idpath. } rewrite <- lwhisker_vcomp. rewrite local_equivalence_inv_twocell_comp. rewrite !vassocr. apply maponpaths_2. use vcomp_move_R_Mp ; [ is_iso | ]. cbn -[psfunctor_id]. rewrite local_equivalence_twocell_lwhisker. rewrite !vassocl. apply maponpaths. rewrite lwhisker_vcomp. apply maponpaths. rewrite !vassocl. rewrite vcomp_linv. apply id2_right. - cbn -[psfunctor_comp]. rewrite !vassocl. etrans. { do 3 apply maponpaths. rewrite lunitor_triangle. rewrite vcomp_lunitor. apply idpath. } rewrite !vassocr. apply maponpaths_2. rewrite !vassocl. etrans. { do 2 apply maponpaths. rewrite !vassocr. do 3 apply maponpaths_2. rewrite <- lunitor_triangle. rewrite !vassocr. rewrite rassociator_lassociator. apply id2_left. } etrans. { apply maponpaths. rewrite !vassocr. rewrite rwhisker_vcomp. rewrite !vassocl. rewrite linvunitor_lunitor. rewrite id2_right. apply idpath. } rewrite !local_equivalence_inv_twocell_comp. rewrite !vassocr. apply maponpaths_2. rewrite !vassocl. etrans. { apply maponpaths. rewrite !vassocr. rewrite vcomp_whisker. rewrite !vassocl. apply maponpaths. rewrite <- !rwhisker_vcomp. rewrite !vassocl. do 2 apply maponpaths. etrans. { apply maponpaths. rewrite !vassocr. rewrite <- local_equivalence_twocell_rwhisker_inv. rewrite !vassocl. apply idpath. } rewrite !vassocr. rewrite <- local_equivalence_twocell_rwhisker_inv. rewrite !vassocl. apply idpath. } etrans. { do 5 apply maponpaths. rewrite <- !local_equivalence_inv_twocell_comp. apply maponpaths. rewrite !vassocr. pose (p := mnd_mor_mu f). cbn -[psfunctor_comp] in p. rewrite !vassocl in p. rewrite lunitor_triangle in p. rewrite vcomp_lunitor in p. rewrite <- lunitor_triangle in p. rewrite !vassocl in p. rewrite !(maponpaths (λ z, _ • (_ • z)) (vassocr _ _ _)) in p. rewrite rassociator_lassociator in p. rewrite id2_left in p. pose (q := maponpaths (λ z, rassociator _ _ _ • z) p). cbn -[psfunctor_comp] in q. rewrite !vassocr in q. rewrite rassociator_lassociator in q. rewrite id2_left in q. exact q. } rewrite !local_equivalence_inv_twocell_comp. rewrite !vassocr. apply maponpaths_2. rewrite !vassocl. etrans. { do 3 apply maponpaths. rewrite !vassocr. rewrite <- local_equivalence_twocell_rassociator_inv. rewrite !vassocl. apply idpath. } etrans. { rewrite !vassocr. rewrite <- lwhisker_lwhisker. rewrite !vassocl. apply maponpaths. rewrite !vassocr. rewrite <- rwhisker_lwhisker. rewrite !vassocl. apply maponpaths. rewrite !vassocr. rewrite lassociator_rassociator. rewrite id2_left. apply idpath. } rewrite !vassocl. rewrite local_equivalence_twocell_lwhisker_inv. rewrite !vassocr. apply maponpaths_2. rewrite !lwhisker_vcomp. apply maponpaths. rewrite !vassocl. rewrite local_equivalence_unit_natural. rewrite local_equivalence_inv_twocell_comp. rewrite !vassocr. apply maponpaths_2. rewrite !vassocl. Transparent local_equivalence_inv_onecell_comp. cbn -[psfunctor_comp]. rewrite !vassocl. rewrite <- local_equivalence_inv_twocell_comp. etrans. { do 4 apply maponpaths. rewrite !vassocl. rewrite <- !local_equivalence_unit_triangle_inv. cbn -[psfunctor_comp]. rewrite <- psfunctor_rwhisker. rewrite !vassocr. apply maponpaths_2. rewrite !vassocl. rewrite <- psfunctor_lwhisker. rewrite !vassocr. rewrite vcomp_linv. apply id2_left. } rewrite <- psfunctor_vcomp. rewrite <- local_equivalence_unit_natural. rewrite !vassocr. refine (_ @ id2_left _). apply maponpaths_2. rewrite !vassocl. etrans. { apply maponpaths. rewrite !vassocr. rewrite vcomp_whisker. rewrite !vassocl. rewrite rwhisker_vcomp. rewrite vcomp_rinv. rewrite id2_rwhisker. apply id2_right. } rewrite lwhisker_vcomp. rewrite vcomp_rinv. apply lwhisker_id2. Qed.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Prelude. Require Import UniMath.CategoryTheory.Monads.Monads. Require Import UniMath.CategoryTheory.Adjunctions.Core. Require Import UniMath.CategoryTheory.Equivalences.Core. 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.Univalence. Require Import UniMath.Bicategories.Morphisms.Adjunctions. Require Import UniMath.Bicategories.DisplayedBicats.Examples.MonadsLax. Require Import UniMath.Bicategories.Monads.Examples.PsfunctorOnMonad. Require Import UniMath.Bicategories.PseudoFunctors.Display.PseudoFunctorBicat. Require Import UniMath.Bicategories.PseudoFunctors.PseudoFunctor. Import PseudoFunctor.Notations. Require Import UniMath.Bicategories.PseudoFunctors.Properties. Require Import UniMath.Bicategories.PseudoFunctors.LocalEquivalenceProperties. Require Import UniMath.Bicategories.PseudoFunctors.Examples.MonadInclusion.