Proposition presheaf_enrichment_laws : enrichment_laws presheaf_enrichment_data. Proof. repeat split. - intros F G ; cbn. use EqualizerInsEq. unfold presheaf_enrichment_comp. rewrite !assoc'. refine (!_). etrans. { apply maponpaths. apply EqualizerCommutes. } use ProductArrow_eq. intro x. unfold presheaf_enrichment_comp_data. rewrite !assoc'. etrans. { apply maponpaths. exact (ProductPrCommutes C V _ _ _ _ _). } rewrite !assoc. rewrite <- tensor_comp_mor. rewrite id_left. etrans. { do 2 apply maponpaths_2. unfold presheaf_enrichment_id. rewrite !assoc. rewrite EqualizerCommutes. exact (ProductPrCommutes C V _ _ _ _ _). } use internal_funext. intros a h. rewrite !tensor_comp_r_id_r. rewrite !assoc'. unfold internal_comp. rewrite internal_beta. rewrite !assoc. rewrite tensor_lassociator. rewrite !assoc'. etrans. { apply maponpaths. rewrite !assoc. rewrite <- tensor_comp_mor. rewrite id_right. rewrite tensor_split. rewrite !assoc'. unfold internal_id. rewrite internal_beta. apply idpath. } rewrite tensor_lunitor. rewrite !assoc. apply maponpaths_2. rewrite mon_lunitor_triangle. rewrite <- !tensor_comp_mor. rewrite id_left, !id_right. rewrite !assoc'. apply idpath. - intros F G ; cbn. use EqualizerInsEq. unfold presheaf_enrichment_comp. rewrite !assoc'. refine (!_). etrans. { apply maponpaths. apply EqualizerCommutes. } use ProductArrow_eq. intro x. unfold presheaf_enrichment_comp_data. rewrite !assoc'. etrans. { apply maponpaths. exact (ProductPrCommutes C V _ _ _ _ _). } rewrite !assoc. rewrite <- tensor_comp_mor. rewrite id_left. etrans. { apply maponpaths_2. apply maponpaths. unfold presheaf_enrichment_id. rewrite !assoc. rewrite EqualizerCommutes. exact (ProductPrCommutes C V _ _ _ _ _). } use internal_funext. intros a h. etrans. { apply maponpaths_2. apply tensor_comp_r_id_r. } rewrite !assoc'. unfold internal_comp. rewrite internal_beta. rewrite !assoc. rewrite tensor_lassociator. rewrite !assoc'. etrans. { apply maponpaths. rewrite !assoc. rewrite <- tensor_comp_mor. rewrite id_right. apply maponpaths_2. apply maponpaths. rewrite tensor_split. rewrite !assoc'. unfold internal_id. rewrite internal_beta. apply idpath. } rewrite tensor_lunitor. rewrite !assoc. apply maponpaths_2. rewrite tensor_comp_l_id_l. refine (!_). etrans. { rewrite !assoc'. apply tensor_comp_r_id_l. } rewrite !assoc. apply maponpaths_2. apply mon_triangle. - intros F₁ F₂ F₃ F₄ ; cbn. use EqualizerInsEq. unfold presheaf_enrichment_comp. rewrite !assoc'. etrans. { apply maponpaths. apply EqualizerCommutes. } refine (!_). etrans. { do 2 apply maponpaths. apply EqualizerCommutes. } refine (!_). use ProductArrow_eq. intro x. rewrite !assoc'. etrans. { apply maponpaths. exact (ProductPrCommutes C V _ _ _ _ _). } refine (!_). etrans. { do 2 apply maponpaths. exact (ProductPrCommutes C V _ _ _ _ _). } rewrite !assoc. rewrite <- !tensor_comp_mor. etrans. { apply maponpaths_2. rewrite !assoc'. rewrite <- tensor_comp_mor. do 2 apply maponpaths. rewrite !assoc. etrans. { apply maponpaths_2. apply EqualizerCommutes. } exact (ProductPrCommutes C V _ _ _ _ _). } rewrite id_left. refine (!_). etrans. { do 2 apply maponpaths_2. rewrite !assoc. etrans. { apply maponpaths_2. apply EqualizerCommutes. } exact (ProductPrCommutes C V _ _ _ _ _). } rewrite id_left. refine (!_). etrans. { rewrite !tensor_comp_mor. rewrite !tensor_comp_l_id_r. rewrite !assoc. rewrite <- tensor_lassociator. apply idpath. } rewrite !assoc'. refine (!_). etrans. { rewrite !tensor_comp_mor. rewrite !tensor_comp_r_id_r. rewrite !assoc'. apply idpath. } apply maponpaths. rewrite !assoc. etrans. { rewrite !assoc'. etrans. { apply maponpaths. rewrite tensor_split. apply idpath. } rewrite !assoc. do 2 apply maponpaths_2. rewrite <- tensor_comp_mor. rewrite id_right, id_left. apply idpath. } refine (!_). etrans. { apply maponpaths_2. etrans. { apply maponpaths. rewrite tensor_split'. apply idpath. } rewrite !assoc. apply maponpaths_2. rewrite !assoc'. rewrite <- tensor_comp_mor. rewrite id_right, id_left. rewrite <- tensor_lassociator. apply idpath. } rewrite !assoc'. apply maponpaths. rewrite internal_assoc. rewrite !assoc. apply idpath. - intros F G τ ; cbn. use nat_trans_eq ; [ apply homset_property | ]. intro x ; cbn. unfold presheaf_enrichment_to_arr_data, presheaf_enrichment_from_arr. etrans. { apply maponpaths. apply maponpaths_2. apply EqualizerCommutes. } unfold presheaf_enrichment_from_arr_data. etrans. { apply maponpaths. exact (ProductPrCommutes C V _ _ _ _ _). } apply internal_to_from_arr. - intros F G τ ; cbn. unfold presheaf_enrichment_from_arr, presheaf_enrichment_to_arr. use EqualizerInsEq. rewrite EqualizerCommutes. unfold presheaf_enrichment_from_arr_data. use ProductArrow_eq. intros x. etrans. { exact (ProductPrCommutes C V _ _ _ _ _). } cbn. unfold presheaf_enrichment_to_arr_data. apply internal_from_to_arr. - intros F. use nat_trans_eq ; [ apply homset_property | ]. intros x ; cbn. unfold presheaf_enrichment_to_arr_data, presheaf_enrichment_id. etrans. { apply maponpaths. apply maponpaths_2. apply EqualizerCommutes. } unfold presheaf_enrichment_from_arr_data. etrans. { apply maponpaths. exact (ProductPrCommutes C V _ _ _ _ _). } apply internal_to_arr_id. - intros F G H τ θ. use nat_trans_eq ; [ apply homset_property | ]. intros x ; cbn. unfold presheaf_enrichment_to_arr_data, presheaf_enrichment_from_arr. rewrite !assoc'. refine (!_). etrans. { do 3 apply maponpaths. rewrite !assoc. etrans. { apply maponpaths_2. apply EqualizerCommutes. } exact (ProductPrCommutes C V _ _ _ _ _). } etrans. { do 2 apply maponpaths. rewrite !assoc. apply maponpaths_2. rewrite <- tensor_comp_mor. rewrite !assoc. rewrite !EqualizerCommutes. etrans. { apply maponpaths. exact (ProductPrCommutes C V _ _ _ _ _). } apply maponpaths_2. exact (ProductPrCommutes C V _ _ _ _ _). } unfold internal_to_arr. rewrite !assoc. rewrite tensor_comp_r_id_r. rewrite !assoc'. unfold internal_comp. rewrite internal_beta. etrans. { apply maponpaths. rewrite tensor_comp_r_id_r. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite tensor_lassociator. rewrite !assoc'. apply maponpaths. rewrite !assoc. rewrite <- tensor_comp_mor. rewrite id_right. unfold internal_from_arr. rewrite internal_beta. rewrite tensor_split. rewrite !assoc'. rewrite internal_beta. apply idpath. } rewrite !assoc. apply maponpaths_2. rewrite !assoc'. rewrite tensor_lunitor. rewrite !assoc. refine (_ @ id_left _). apply maponpaths_2. refine (_ @ mon_linvunitor_lunitor _). apply maponpaths_2. refine (_ @ id_right _). rewrite !assoc'. apply maponpaths. rewrite mon_lunitor_triangle. rewrite <- tensor_comp_id_r. rewrite mon_linvunitor_lunitor. apply tensor_id_id. Qed.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Prelude. Require Import UniMath.CategoryTheory.DisplayedCats.Core. Require Import UniMath.CategoryTheory.DisplayedCats.Isos. Require Import UniMath.CategoryTheory.DisplayedCats.Univalence. Require Import UniMath.CategoryTheory.DisplayedCats.Total. Require Import UniMath.CategoryTheory.FunctorCategory. Require Import UniMath.CategoryTheory.EnrichedCats.Enrichment. Require Import UniMath.CategoryTheory.EnrichedCats.EnrichmentFunctor. Require Import UniMath.CategoryTheory.EnrichedCats.EnrichmentTransformation. Require Import UniMath.CategoryTheory.EnrichedCats.Examples.HomFunctor. Require Import UniMath.CategoryTheory.EnrichedCats.Examples.OppositeEnriched. Require Import UniMath.CategoryTheory.EnrichedCats.Examples.SelfEnriched. Require Import UniMath.CategoryTheory.Monoidal.Categories. Require Import UniMath.CategoryTheory.Monoidal.Structure.Symmetric. Require Import UniMath.CategoryTheory.Monoidal.Structure.Closed. Require Import UniMath.CategoryTheory.OppositeCategory.Core. Require Import UniMath.CategoryTheory.PrecategoryBinProduct. Require Import UniMath.CategoryTheory.Limits.Equalizers. Require Import UniMath.CategoryTheory.Limits.Products. Import MonoidalNotations.