Proposition double_copy_assoc (x : C) : copy x · copy x #⊗ copy x = copy x · identity x #⊗ copy x · identity x #⊗ (copy x #⊗ identity x) · identity x #⊗ mon_lassociator x x x · mon_rassociator x x (x ⊗ x). Proof. etrans. { rewrite tensor_split'. rewrite assoc. rewrite copy_assoc. rewrite !assoc'. etrans. { apply maponpaths. rewrite <- tensor_id_id. rewrite <- tensor_rassociator. rewrite !assoc. apply maponpaths_2. rewrite <- tensor_comp_id_l. apply maponpaths. apply copy_assoc'. } rewrite !tensor_comp_id_l. reflexivity. } rewrite !assoc'. reflexivity. Qed.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Prelude. Require Import UniMath.CategoryTheory.Limits.Terminal. Require Import UniMath.CategoryTheory.Monoidal.Categories. Require Import UniMath.CategoryTheory.Monoidal.Structure.Cartesian. Require Import UniMath.CategoryTheory.Monoidal.Structure.Symmetric. Require Import UniMath.CategoryTheory.Monoidal.Structure.SymmetricDiagonal. Require Import UniMath.CategoryTheory.MarkovCategories.MarkovCategory. Require Import UniMath.CategoryTheory.Monoidal.WhiskeredBifunctors. Import MonoidalNotations. Import BifunctorNotations.