Proposition is_deterministic_copy (x : C) : is_deterministic (copy x). Proof. unfold is_deterministic. rewrite <- copy_tensor. etrans. { rewrite !assoc. rewrite double_copy_assoc. unfold inner_swap. etrans. { rewrite !assoc'. do 4 apply maponpaths. rewrite !assoc. rewrite mon_rassociator_lassociator. rewrite id_left. rewrite tensor_mor_right. rewrite tensor_mor_left. apply idpath. } etrans. { do 3 apply maponpaths. rewrite !assoc. rewrite <- tensor_comp_id_l. rewrite !assoc. rewrite mon_lassociator_rassociator. rewrite id_left. apply idpath. } etrans. { do 2 apply maponpaths. rewrite !assoc. apply maponpaths_2. rewrite <- tensor_comp_id_l. rewrite !assoc. rewrite <- tensor_comp_id_r. rewrite copy_comm. apply idpath. } apply idpath. } refine (!_). etrans. { rewrite double_copy_assoc. apply idpath. } rewrite tensor_comp_id_l. rewrite !assoc'. apply idpath. 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.