proposition: Proposition local_equivalence_mnd_ob_laws : mnd_mor_laws local_equivalence_mnd_ob_data.
proof: 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.
imports: UniMath.Foundations.All UniMath.MoreFoundations.All UniMath.CategoryTheory.Core.Prelude UniMath.CategoryTheory.Monads.Monads UniMath.CategoryTheory.Adjunctions.Core UniMath.CategoryTheory.Equivalences.Core UniMath.Bicategories.Core.Bicat UniMath.Bicategories.Core.Invertible_2cells UniMath.Bicategories.Core.BicategoryLaws UniMath.Bicategories.Core.Unitors UniMath.Bicategories.Core.Univalence UniMath.Bicategories.Morphisms.Adjunctions UniMath.Bicategories.DisplayedBicats.Examples.MonadsLax UniMath.Bicategories.Monads.Examples.PsfunctorOnMonad UniMath.Bicategories.PseudoFunctors.Display.PseudoFunctorBicat UniMath.Bicategories.PseudoFunctors.PseudoFunctor UniMath.Bicategories.PseudoFunctors.Properties UniMath.Bicategories.PseudoFunctors.LocalEquivalenceProperties UniMath.Bicategories.PseudoFunctors.Examples.MonadInclusion