Copy-Discard Categories #
Symmetric monoidal categories where every object has a commutative comonoid structure compatible with tensor products.
Main definitions #
CopyDiscardCategory
- Category with coherent copy and delete
Notations #
Implementation notes #
We use ComonObj
instances to provide the comonoid structure.
The key axioms ensure tensor products respect the comonoid structure.
References #
- Cho and Jacobs, Disintegration and Bayesian inversion via string diagrams
- Fritz, A synthetic approach to Markov kernels, conditional independence and theorems on sufficient statistics
Tags #
copy-discard, comonoid, symmetric monoidal
class
CategoryTheory.CopyDiscardCategory
(C : Type u)
[Category.{v, u} C]
[MonoidalCategory C]
extends CategoryTheory.SymmetricCategory C :
Type (max u v)
Category where objects have compatible copy and discard operations.
- braiding_naturality_right (X : C) {Y Z : C} (f : Y ⟶ Z) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft X f) (β_ X Z).hom = CategoryStruct.comp (β_ X Y).hom (MonoidalCategoryStruct.whiskerRight f X)
- braiding_naturality_left {X Y : C} (f : X ⟶ Y) (Z : C) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight f Z) (β_ Y Z).hom = CategoryStruct.comp (β_ X Z).hom (MonoidalCategoryStruct.whiskerLeft Z f)
- hexagon_forward (X Y Z : C) : CategoryStruct.comp (MonoidalCategoryStruct.associator X Y Z).hom (CategoryStruct.comp (β_ X (MonoidalCategoryStruct.tensorObj Y Z)).hom (MonoidalCategoryStruct.associator Y Z X).hom) = CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (β_ X Y).hom Z) (CategoryStruct.comp (MonoidalCategoryStruct.associator Y X Z).hom (MonoidalCategoryStruct.whiskerLeft Y (β_ X Z).hom))
- hexagon_reverse (X Y Z : C) : CategoryStruct.comp (MonoidalCategoryStruct.associator X Y Z).inv (CategoryStruct.comp (β_ (MonoidalCategoryStruct.tensorObj X Y) Z).hom (MonoidalCategoryStruct.associator Z X Y).inv) = CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft X (β_ Y Z).hom) (CategoryStruct.comp (MonoidalCategoryStruct.associator X Z Y).inv (MonoidalCategoryStruct.whiskerRight (β_ X Z).hom Y))
- symmetry (X Y : C) : CategoryStruct.comp (β_ X Y).hom (β_ Y X).hom = CategoryStruct.id (MonoidalCategoryStruct.tensorObj X Y)
- comonObj (X : C) : ComonObj X
Every object has commutative comonoid structure.
- isCommComonObj (X : C) : IsCommComonObj X
Every object's comonoid structure is commutative.
- copy_tensor (X Y : C) : ComonObj.comul = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom ComonObj.comul ComonObj.comul) (MonoidalCategory.tensorμ X X Y Y)
Tensor products of copies equal copies of tensor products.
- discard_tensor (X Y : C) : ComonObj.counit = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom ComonObj.counit ComonObj.counit) (MonoidalCategoryStruct.leftUnitor (MonoidalCategoryStruct.tensorUnit C)).hom
Discard distributes over tensor.
- copy_unit : ComonObj.comul = (MonoidalCategoryStruct.leftUnitor (MonoidalCategoryStruct.tensorUnit C)).inv
Copy on the unit object.
Discard on the unit object.