{-# OPTIONS --without-K --safe #-}
open import Categories.Category
open import Categories.Category.Monoidal
module Categories.Category.Monoidal.Traced {o ℓ e} {C : Category o ℓ e} (M : Monoidal C) where
open Category C
open import Level
open import Data.Product using (_,_)
open import Categories.Category.Monoidal.Symmetric M
open import Categories.Category.Monoidal.Reasoning M
private
variable
A B X Y : Obj
f g : A ⇒ B
record Traced : Set (levelOfTerm M) where
field
symmetric : Symmetric
open Symmetric symmetric public
field
trace : ∀ {X A B} → A ⊗₀ X ⇒ B ⊗₀ X → A ⇒ B
trace-resp-≈ : f ≈ g → trace f ≈ trace g
slide : trace (f ∘ id ⊗₁ g) ≈ trace (id ⊗₁ g ∘ f)
tightenₗ : trace (f ⊗₁ id ∘ g) ≈ f ∘ trace g
tightenᵣ : trace (f ∘ g ⊗₁ id) ≈ trace f ∘ g
vanishing₁ : trace {X = unit} (f ⊗₁ id) ≈ f
vanishing₂ : trace {X = X} (trace {X = Y} (associator.to ∘ f ∘ associator.from))
≈ trace {X = X ⊗₀ Y} f
superposing : trace {X = X} (associator.to ∘ id {Y} ⊗₁ f ∘ associator.from) ≈ id {Y} ⊗₁ trace {X = X} f
yanking : trace (braiding.⇒.η (X , X)) ≈ id