category_theory.monoidal.rigid.basic
ā·
Mathlib.CategoryTheory.Monoidal.Rigid.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -601,9 +601,9 @@ theorem tensorRightHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor /-
+#print CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_whiskerLeft /-
@[simp]
-theorem tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor {Y Y' Z : C} [ExactPairing Y Y']
+theorem tensorLeftHomEquiv_symm_coevaluation_comp_whiskerLeft {Y Y' Z : C} [ExactPairing Y Y']
(f : Y' ā¶ Z) : (tensorLeftHomEquiv _ _ _ _).symm (Ī·_ _ _ ā« (š Y ā f)) = (Ļ_ _).Hom ā« f :=
by
dsimp [tensor_left_hom_equiv]
@@ -612,21 +612,21 @@ theorem tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor {Y Y' Z : C} [ExactP
slice_lhs 3 4 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
slice_lhs 1 3 => rw [coevaluation_evaluation]
simp
-#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor
+#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_whiskerLeft
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id /-
+#print CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_whiskerRight /-
@[simp]
-theorem tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id {X Y : C} [HasRightDual X]
+theorem tensorLeftHomEquiv_symm_coevaluation_comp_whiskerRight {X Y : C} [HasRightDual X]
[HasRightDual Y] (f : X ā¶ Y) :
(tensorLeftHomEquiv _ _ _ _).symm (Ī·_ _ _ ā« (f ā š (Xį))) = (Ļ_ _).Hom ā« fį :=
by
dsimp [tensor_left_hom_equiv, right_adjoint_mate]
simp
-#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id
+#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_whiskerRight
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -634,21 +634,21 @@ theorem tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id {X Y : C} [HasRightD
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_id_tensor /-
+#print CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_whiskerLeft /-
@[simp]
-theorem tensorRightHomEquiv_symm_coevaluation_comp_id_tensor {X Y : C} [HasLeftDual X]
+theorem tensorRightHomEquiv_symm_coevaluation_comp_whiskerLeft {X Y : C} [HasLeftDual X]
[HasLeftDual Y] (f : X ā¶ Y) :
(tensorRightHomEquiv _ (įY) _ _).symm (Ī·_ (įX) X ā« (š (įX) ā f)) = (Ī»_ _).Hom ā« įf :=
by
dsimp [tensor_right_hom_equiv, left_adjoint_mate]
simp
-#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_id_tensor
+#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_whiskerLeft
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_tensor_id /-
+#print CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_whiskerRight /-
@[simp]
-theorem tensorRightHomEquiv_symm_coevaluation_comp_tensor_id {Y Y' Z : C} [ExactPairing Y Y']
+theorem tensorRightHomEquiv_symm_coevaluation_comp_whiskerRight {Y Y' Z : C} [ExactPairing Y Y']
(f : Y ā¶ Z) : (tensorRightHomEquiv _ Y _ _).symm (Ī·_ Y Y' ā« (f ā š Y')) = (Ī»_ _).Hom ā« f :=
by
dsimp [tensor_right_hom_equiv]
@@ -657,14 +657,14 @@ theorem tensorRightHomEquiv_symm_coevaluation_comp_tensor_id {Y Y' Z : C} [Exact
slice_lhs 3 4 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
slice_lhs 1 3 => rw [evaluation_coevaluation]
simp
-#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_tensor_id
+#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_whiskerRight
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorLeftHomEquiv_id_tensor_comp_evaluation /-
+#print CategoryTheory.tensorLeftHomEquiv_whiskerLeft_comp_evaluation /-
@[simp]
-theorem tensorLeftHomEquiv_id_tensor_comp_evaluation {Y Z : C} [HasLeftDual Z] (f : Y ā¶ įZ) :
+theorem tensorLeftHomEquiv_whiskerLeft_comp_evaluation {Y Z : C} [HasLeftDual Z] (f : Y ā¶ įZ) :
(tensorLeftHomEquiv _ _ _ _) ((š Z ā f) ā« Īµ_ _ _) = f ā« (Ļ_ _).inv :=
by
dsimp [tensor_left_hom_equiv]
@@ -673,40 +673,40 @@ theorem tensorLeftHomEquiv_id_tensor_comp_evaluation {Y Z : C} [HasLeftDual Z] (
slice_lhs 2 3 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
slice_lhs 3 5 => rw [evaluation_coevaluation]
simp
-#align category_theory.tensor_left_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorLeftHomEquiv_id_tensor_comp_evaluation
+#align category_theory.tensor_left_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorLeftHomEquiv_whiskerLeft_comp_evaluation
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorLeftHomEquiv_tensor_id_comp_evaluation /-
+#print CategoryTheory.tensorLeftHomEquiv_whiskerRight_comp_evaluation /-
@[simp]
-theorem tensorLeftHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y]
+theorem tensorLeftHomEquiv_whiskerRight_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y]
(f : X ā¶ Y) : (tensorLeftHomEquiv _ _ _ _) ((f ā š _) ā« Īµ_ _ _) = (įf) ā« (Ļ_ _).inv :=
by
dsimp [tensor_left_hom_equiv, left_adjoint_mate]
simp
-#align category_theory.tensor_left_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorLeftHomEquiv_tensor_id_comp_evaluation
+#align category_theory.tensor_left_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorLeftHomEquiv_whiskerRight_comp_evaluation
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorRightHomEquiv_id_tensor_comp_evaluation /-
+#print CategoryTheory.tensorRightHomEquiv_whiskerLeft_comp_evaluation /-
@[simp]
-theorem tensorRightHomEquiv_id_tensor_comp_evaluation {X Y : C} [HasRightDual X] [HasRightDual Y]
+theorem tensorRightHomEquiv_whiskerLeft_comp_evaluation {X Y : C} [HasRightDual X] [HasRightDual Y]
(f : X ā¶ Y) : (tensorRightHomEquiv _ _ _ _) ((š (Yį) ā f) ā« Īµ_ _ _) = fį ā« (Ī»_ _).inv :=
by
dsimp [tensor_right_hom_equiv, right_adjoint_mate]
simp
-#align category_theory.tensor_right_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorRightHomEquiv_id_tensor_comp_evaluation
+#align category_theory.tensor_right_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorRightHomEquiv_whiskerLeft_comp_evaluation
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.tensorRightHomEquiv_tensor_id_comp_evaluation /-
+#print CategoryTheory.tensorRightHomEquiv_whiskerRight_comp_evaluation /-
@[simp]
-theorem tensorRightHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasRightDual X] (f : Y ā¶ Xį) :
+theorem tensorRightHomEquiv_whiskerRight_comp_evaluation {X Y : C} [HasRightDual X] (f : Y ā¶ Xį) :
(tensorRightHomEquiv _ _ _ _) ((f ā š X) ā« Īµ_ X (Xį)) = f ā« (Ī»_ _).inv :=
by
dsimp [tensor_right_hom_equiv]
@@ -715,7 +715,7 @@ theorem tensorRightHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasRightDual X]
slice_lhs 2 3 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
slice_lhs 3 5 => rw [coevaluation_evaluation]
simp
-#align category_theory.tensor_right_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorRightHomEquiv_tensor_id_comp_evaluation
+#align category_theory.tensor_right_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorRightHomEquiv_whiskerRight_comp_evaluation
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -74,14 +74,14 @@ namespace CategoryTheory
variable {C : Type uā} [Category.{vā} C] [MonoidalCategory C]
#print CategoryTheory.ExactPairing /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- An exact pairing is a pair of objects `X Y : C` which admit
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -74,14 +74,14 @@ namespace CategoryTheory
variable {C : Type uā} [Category.{vā} C] [MonoidalCategory C]
#print CategoryTheory.ExactPairing /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- An exact pairing is a pair of objects `X Y : C` which admit
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2021 Jakob von Raumer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jakob von Raumer
-/
-import Mathbin.CategoryTheory.Monoidal.CoherenceLemmas
-import Mathbin.CategoryTheory.Closed.Monoidal
-import Mathbin.Tactic.ApplyFun
+import CategoryTheory.Monoidal.CoherenceLemmas
+import CategoryTheory.Closed.Monoidal
+import Tactic.ApplyFun
#align_import category_theory.monoidal.rigid.basic from "leanprover-community/mathlib"@"af471b9e3ce868f296626d33189b4ce730fa4c00"
@@ -74,14 +74,14 @@ namespace CategoryTheory
variable {C : Type uā} [Category.{vā} C] [MonoidalCategory C]
#print CategoryTheory.ExactPairing /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- An exact pairing is a pair of objects `X Y : C` which admit
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -104,12 +104,8 @@ notation "Ī·_" => ExactPairing.coevaluation
notation "Īµ_" => ExactPairing.evaluation
-restate_axiom coevaluation_evaluation'
-
attribute [simp, reassoc] exact_pairing.coevaluation_evaluation
-restate_axiom evaluation_coevaluation'
-
attribute [simp, reassoc] exact_pairing.evaluation_coevaluation
#print CategoryTheory.exactPairingUnit /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2021 Jakob von Raumer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.monoidal.rigid.basic
-! leanprover-community/mathlib commit af471b9e3ce868f296626d33189b4ce730fa4c00
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Monoidal.CoherenceLemmas
import Mathbin.CategoryTheory.Closed.Monoidal
import Mathbin.Tactic.ApplyFun
+#align_import category_theory.monoidal.rigid.basic from "leanprover-community/mathlib"@"af471b9e3ce868f296626d33189b4ce730fa4c00"
+
/-!
# Rigid (autonomous) monoidal categories
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -77,14 +77,14 @@ namespace CategoryTheory
variable {C : Type uā} [Category.{vā} C] [MonoidalCategory C]
#print CategoryTheory.ExactPairing /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- An exact pairing is a pair of objects `X Y : C` which admit
@@ -103,10 +103,8 @@ class ExactPairing (X Y : C) where
open ExactPairing
--- mathport name: exprĪ·_
notation "Ī·_" => ExactPairing.coevaluation
--- mathport name: exprĪµ_
notation "Īµ_" => ExactPairing.evaluation
restate_axiom coevaluation_evaluation'
@@ -149,10 +147,8 @@ attribute [instance] has_left_dual.exact
open ExactPairing HasRightDual HasLeftDual MonoidalCategory
--- mathport name: left_dual
prefix:1024 "į" => leftDual
--- mathport name: right_dual
postfix:1024 "į" => rightDual
#print CategoryTheory.hasRightDualUnit /-
@@ -211,10 +207,8 @@ def leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) :
#align category_theory.left_adjoint_mate CategoryTheory.leftAdjointMate
-/
--- mathport name: right_adjoint_mate
notation f "į" => rightAdjointMate f
--- mathport name: left_adjoint_mate
notation "į" f => leftAdjointMate f
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jakob von Raumer
! This file was ported from Lean 3 source module category_theory.monoidal.rigid.basic
-! leanprover-community/mathlib commit 3d7987cda72abc473c7cdbbb075170e9ac620042
+! leanprover-community/mathlib commit af471b9e3ce868f296626d33189b4ce730fa4c00
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.Tactic.ApplyFun
/-!
# Rigid (autonomous) monoidal categories
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file defines rigid (autonomous) monoidal categories and the necessary theory about
exact pairings and duals.
@@ -73,14 +76,15 @@ namespace CategoryTheory
variable {C : Type uā} [Category.{vā} C] [MonoidalCategory C]
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
+#print CategoryTheory.ExactPairing /-
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- An exact pairing is a pair of objects `X Y : C` which admit
@@ -95,6 +99,7 @@ class ExactPairing (X Y : C) where
(coevaluation ā š X) ā« (Ī±_ _ _ _).Hom ā« (š X ā evaluation) = (Ī»_ X).Hom ā« (Ļ_ X).inv := by
obviously
#align category_theory.exact_pairing CategoryTheory.ExactPairing
+-/
open ExactPairing
@@ -112,6 +117,7 @@ restate_axiom evaluation_coevaluation'
attribute [simp, reassoc] exact_pairing.evaluation_coevaluation
+#print CategoryTheory.exactPairingUnit /-
instance exactPairingUnit : ExactPairing (š_ C) (š_ C)
where
coevaluation := (Ļ_ _).inv
@@ -119,18 +125,23 @@ instance exactPairingUnit : ExactPairing (š_ C) (š_ C)
coevaluation_evaluation' := by coherence
evaluation_coevaluation' := by coherence
#align category_theory.exact_pairing_unit CategoryTheory.exactPairingUnit
+-/
+#print CategoryTheory.HasRightDual /-
/-- A class of objects which have a right dual. -/
class HasRightDual (X : C) where
rightDual : C
[exact : ExactPairing X right_dual]
#align category_theory.has_right_dual CategoryTheory.HasRightDual
+-/
+#print CategoryTheory.HasLeftDual /-
/-- A class of objects with have a left dual. -/
class HasLeftDual (Y : C) where
leftDual : C
[exact : ExactPairing left_dual Y]
#align category_theory.has_left_dual CategoryTheory.HasLeftDual
+-/
attribute [instance] has_right_dual.exact
@@ -144,45 +155,61 @@ prefix:1024 "į" => leftDual
-- mathport name: right_dual
postfix:1024 "į" => rightDual
+#print CategoryTheory.hasRightDualUnit /-
instance hasRightDualUnit : HasRightDual (š_ C) where rightDual := š_ C
#align category_theory.has_right_dual_unit CategoryTheory.hasRightDualUnit
+-/
+#print CategoryTheory.hasLeftDualUnit /-
instance hasLeftDualUnit : HasLeftDual (š_ C) where leftDual := š_ C
#align category_theory.has_left_dual_unit CategoryTheory.hasLeftDualUnit
+-/
+#print CategoryTheory.hasRightDualLeftDual /-
instance hasRightDualLeftDual {X : C} [HasLeftDual X] : HasRightDual įX where rightDual := X
#align category_theory.has_right_dual_left_dual CategoryTheory.hasRightDualLeftDual
+-/
+#print CategoryTheory.hasLeftDualRightDual /-
instance hasLeftDualRightDual {X : C} [HasRightDual X] : HasLeftDual Xį where leftDual := X
#align category_theory.has_left_dual_right_dual CategoryTheory.hasLeftDualRightDual
+-/
+#print CategoryTheory.leftDual_rightDual /-
@[simp]
theorem leftDual_rightDual {X : C} [HasRightDual X] : įXį = X :=
rfl
#align category_theory.left_dual_right_dual CategoryTheory.leftDual_rightDual
+-/
+#print CategoryTheory.rightDual_leftDual /-
@[simp]
theorem rightDual_leftDual {X : C} [HasLeftDual X] : (įX)į = X :=
rfl
#align category_theory.right_dual_left_dual CategoryTheory.rightDual_leftDual
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.rightAdjointMate /-
/-- The right adjoint mate `fį : Xį ā¶ Yį` of a morphism `f : X ā¶ Y`. -/
def rightAdjointMate {X Y : C} [HasRightDual X] [HasRightDual Y] (f : X ā¶ Y) : Yį ā¶ Xį :=
(Ļ_ _).inv ā« (š _ ā Ī·_ _ _) ā« (š _ ā f ā š _) ā« (Ī±_ _ _ _).inv ā« (Īµ_ _ _ ā š _) ā« (Ī»_ _).Hom
#align category_theory.right_adjoint_mate CategoryTheory.rightAdjointMate
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.leftAdjointMate /-
/-- The left adjoint mate `įf : įY ā¶ įX` of a morphism `f : X ā¶ Y`. -/
def leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) : įY ā¶ įX :=
(Ī»_ _).inv ā« (Ī·_ (įX) X ā š _) ā« ((š _ ā f) ā š _) ā« (Ī±_ _ _ _).Hom ā« (š _ ā Īµ_ _ _) ā« (Ļ_ _).Hom
#align category_theory.left_adjoint_mate CategoryTheory.leftAdjointMate
+-/
-- mathport name: right_adjoint_mate
notation f "į" => rightAdjointMate f
@@ -192,19 +219,23 @@ notation "į" f => leftAdjointMate f
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.rightAdjointMate_id /-
@[simp]
theorem rightAdjointMate_id {X : C} [HasRightDual X] : š Xį = š (Xį) := by
simp only [right_adjoint_mate, monoidal_category.tensor_id, category.id_comp,
coevaluation_evaluation_assoc, category.comp_id, iso.inv_hom_id]
#align category_theory.right_adjoint_mate_id CategoryTheory.rightAdjointMate_id
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.leftAdjointMate_id /-
@[simp]
theorem leftAdjointMate_id {X : C} [HasLeftDual X] : (įš X) = š (įX) := by
simp only [left_adjoint_mate, monoidal_category.tensor_id, category.id_comp,
evaluation_coevaluation_assoc, category.comp_id, iso.inv_hom_id]
#align category_theory.left_adjoint_mate_id CategoryTheory.leftAdjointMate_id
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -216,6 +247,7 @@ theorem leftAdjointMate_id {X : C} [HasLeftDual X] : (įš X) = š (įX) :
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.rightAdjointMate_comp /-
theorem rightAdjointMate_comp {X Y Z : C} [HasRightDual X] [HasRightDual Y] {f : X ā¶ Y}
{g : Xį ā¶ Z} :
fį ā« g =
@@ -228,6 +260,7 @@ theorem rightAdjointMate_comp {X Y Z : C} [HasRightDual X] [HasRightDual Y] {f :
category.assoc, category.assoc, id_tensor_comp_tensor_id_assoc, ā left_unitor_naturality,
tensor_id_comp_id_tensor_assoc]
#align category_theory.right_adjoint_mate_comp CategoryTheory.rightAdjointMate_comp
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -236,6 +269,7 @@ theorem rightAdjointMate_comp {X Y Z : C} [HasRightDual X] [HasRightDual Y] {f :
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.leftAdjointMate_comp /-
theorem leftAdjointMate_comp {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] {f : X ā¶ Y}
{g : (įX) ā¶ Z} :
(įf) ā« g =
@@ -247,6 +281,7 @@ theorem leftAdjointMate_comp {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] {f : X
id_tensor_comp_tensor_id _ g, category.assoc, category.assoc, category.assoc, category.assoc,
tensor_id_comp_id_tensor_assoc, ā right_unitor_naturality, id_tensor_comp_tensor_id_assoc]
#align category_theory.left_adjoint_mate_comp CategoryTheory.leftAdjointMate_comp
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -254,6 +289,7 @@ theorem leftAdjointMate_comp {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] {f : X
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.comp_rightAdjointMate /-
/-- The composition of right adjoint mates is the adjoint mate of the composition. -/
@[reassoc]
theorem comp_rightAdjointMate {X Y Z : C} [HasRightDual X] [HasRightDual Y] [HasRightDual Z]
@@ -282,6 +318,7 @@ theorem comp_rightAdjointMate {X Y Z : C} [HasRightDual X] [HasRightDual Y] [Has
unitors_equal, ā category.assoc, ā category.assoc]
simp
#align category_theory.comp_right_adjoint_mate CategoryTheory.comp_rightAdjointMate
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -289,6 +326,7 @@ theorem comp_rightAdjointMate {X Y Z : C} [HasRightDual X] [HasRightDual Y] [Has
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.comp_leftAdjointMate /-
/-- The composition of left adjoint mates is the adjoint mate of the composition. -/
@[reassoc]
theorem comp_leftAdjointMate {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] [HasLeftDual Z] {f : X ā¶ Y}
@@ -317,6 +355,7 @@ theorem comp_leftAdjointMate {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] [HasLef
right_unitor_naturality_assoc, ā unitors_equal, ā category.assoc, ā category.assoc]
simp
#align category_theory.comp_left_adjoint_mate CategoryTheory.comp_leftAdjointMate
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -334,6 +373,7 @@ theorem comp_leftAdjointMate {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] [HasLef
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv /-
/-- Given an exact pairing on `Y Y'`,
we get a bijection on hom-sets `(Y' ā X ā¶ Z) ā (X ā¶ Y ā Z)`
by "pulling the string on the left" up or down.
@@ -378,6 +418,7 @@ def tensorLeftHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (Y' ā X ā¶ Z) ā
simp only [left_unitor_conjugation]
coherence
#align category_theory.tensor_left_hom_equiv CategoryTheory.tensorLeftHomEquiv
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -395,6 +436,7 @@ def tensorLeftHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (Y' ā X ā¶ Z) ā
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv /-
/-- Given an exact pairing on `Y Y'`,
we get a bijection on hom-sets `(X ā Y ā¶ Z) ā (X ā¶ Z ā Y')`
by "pulling the string on the right" up or down.
@@ -434,9 +476,11 @@ def tensorRightHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (X ā Y ā¶ Z) ā
simp only [right_unitor_conjugation]
coherence
#align category_theory.tensor_right_hom_equiv CategoryTheory.tensorRightHomEquiv
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv_naturality /-
theorem tensorLeftHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f : Y' ā X ā¶ Z)
(g : Z ā¶ Z') :
(tensorLeftHomEquiv X Y Y' Z') (f ā« g) = (tensorLeftHomEquiv X Y Y' Z) f ā« (š Y ā g) :=
@@ -444,9 +488,11 @@ theorem tensorLeftHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
dsimp [tensor_left_hom_equiv]
simp only [id_tensor_comp, category.assoc]
#align category_theory.tensor_left_hom_equiv_naturality CategoryTheory.tensorLeftHomEquiv_naturality
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv_symm_naturality /-
theorem tensorLeftHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y'] (f : X ā¶ X')
(g : X' ā¶ Y ā Z) :
(tensorLeftHomEquiv X Y Y' Z).symm (f ā« g) =
@@ -455,9 +501,11 @@ theorem tensorLeftHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y']
dsimp [tensor_left_hom_equiv]
simp only [id_tensor_comp, category.assoc]
#align category_theory.tensor_left_hom_equiv_symm_naturality CategoryTheory.tensorLeftHomEquiv_symm_naturality
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv_naturality /-
theorem tensorRightHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f : X ā Y ā¶ Z)
(g : Z ā¶ Z') :
(tensorRightHomEquiv X Y Y' Z') (f ā« g) = (tensorRightHomEquiv X Y Y' Z) f ā« (g ā š Y') :=
@@ -465,9 +513,11 @@ theorem tensorRightHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f
dsimp [tensor_right_hom_equiv]
simp only [comp_tensor_id, category.assoc]
#align category_theory.tensor_right_hom_equiv_naturality CategoryTheory.tensorRightHomEquiv_naturality
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv_symm_naturality /-
theorem tensorRightHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y'] (f : X ā¶ X')
(g : X' ā¶ Z ā Y') :
(tensorRightHomEquiv X Y Y' Z).symm (f ā« g) =
@@ -476,7 +526,9 @@ theorem tensorRightHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y'
dsimp [tensor_right_hom_equiv]
simp only [comp_tensor_id, category.assoc]
#align category_theory.tensor_right_hom_equiv_symm_naturality CategoryTheory.tensorRightHomEquiv_symm_naturality
+-/
+#print CategoryTheory.tensorLeftAdjunction /-
/-- If `Y Y'` have an exact pairing,
then the functor `tensor_left Y'` is left adjoint to `tensor_left Y`.
-/
@@ -486,7 +538,9 @@ def tensorLeftAdjunction (Y Y' : C) [ExactPairing Y Y'] : tensorLeft Y' ā£ tens
homEquiv_naturality_left_symm := fun X X' Z f g => tensorLeftHomEquiv_symm_naturality f g
homEquiv_naturality_right := fun X Z Z' f g => tensorLeftHomEquiv_naturality f g }
#align category_theory.tensor_left_adjunction CategoryTheory.tensorLeftAdjunction
+-/
+#print CategoryTheory.tensorRightAdjunction /-
/-- If `Y Y'` have an exact pairing,
then the functor `tensor_right Y` is left adjoint to `tensor_right Y'`.
-/
@@ -496,8 +550,10 @@ def tensorRightAdjunction (Y Y' : C) [ExactPairing Y Y'] : tensorRight Y ā£ ten
homEquiv_naturality_left_symm := fun X X' Z f g => tensorRightHomEquiv_symm_naturality f g
homEquiv_naturality_right := fun X Z Z' f g => tensorRightHomEquiv_naturality f g }
#align category_theory.tensor_right_adjunction CategoryTheory.tensorRightAdjunction
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.closedOfHasLeftDual /-
/--
If `Y` has a left dual `įY`, then it is a closed object, with the internal hom functor `Y ā¶[C] -`
given by left tensoring by `įY`.
@@ -512,12 +568,14 @@ naturally isomorphic).
def closedOfHasLeftDual (Y : C) [HasLeftDual Y] : Closed Y
where isAdj := āØ_, tensorLeftAdjunction (įY) Yā©
#align category_theory.closed_of_has_left_dual CategoryTheory.closedOfHasLeftDual
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv_tensor /-
/-- `tensor_left_hom_equiv` commutes with tensoring on the right -/
theorem tensorLeftHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f : X ā¶ Y ā Z)
(g : X' ā¶ Z') :
@@ -531,12 +589,14 @@ theorem tensorLeftHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
conv_rhs => rw [ā id_tensor_comp_tensor_id, comp_tensor_id, comp_tensor_id]
simp; coherence
#align category_theory.tensor_left_hom_equiv_tensor CategoryTheory.tensorLeftHomEquiv_tensor
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv_tensor /-
/-- `tensor_right_hom_equiv` commutes with tensoring on the left -/
theorem tensorRightHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f : X ā¶ Z ā Y')
(g : X' ā¶ Z') :
@@ -551,8 +611,10 @@ theorem tensorRightHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
simp only [ā tensor_id, associator_conjugation]
simp; coherence
#align category_theory.tensor_right_hom_equiv_tensor CategoryTheory.tensorRightHomEquiv_tensor
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor /-
@[simp]
theorem tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor {Y Y' Z : C} [ExactPairing Y Y']
(f : Y' ā¶ Z) : (tensorLeftHomEquiv _ _ _ _).symm (Ī·_ _ _ ā« (š Y ā f)) = (Ļ_ _).Hom ā« f :=
@@ -564,10 +626,12 @@ theorem tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor {Y Y' Z : C} [ExactP
slice_lhs 1 3 => rw [coevaluation_evaluation]
simp
#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id /-
@[simp]
theorem tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id {X Y : C} [HasRightDual X]
[HasRightDual Y] (f : X ā¶ Y) :
@@ -576,12 +640,14 @@ theorem tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id {X Y : C} [HasRightD
dsimp [tensor_left_hom_equiv, right_adjoint_mate]
simp
#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_id_tensor /-
@[simp]
theorem tensorRightHomEquiv_symm_coevaluation_comp_id_tensor {X Y : C} [HasLeftDual X]
[HasLeftDual Y] (f : X ā¶ Y) :
@@ -590,8 +656,10 @@ theorem tensorRightHomEquiv_symm_coevaluation_comp_id_tensor {X Y : C} [HasLeftD
dsimp [tensor_right_hom_equiv, left_adjoint_mate]
simp
#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_id_tensor
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_tensor_id /-
@[simp]
theorem tensorRightHomEquiv_symm_coevaluation_comp_tensor_id {Y Y' Z : C} [ExactPairing Y Y']
(f : Y ā¶ Z) : (tensorRightHomEquiv _ Y _ _).symm (Ī·_ Y Y' ā« (f ā š Y')) = (Ī»_ _).Hom ā« f :=
@@ -603,9 +671,11 @@ theorem tensorRightHomEquiv_symm_coevaluation_comp_tensor_id {Y Y' Z : C} [Exact
slice_lhs 1 3 => rw [evaluation_coevaluation]
simp
#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_tensor_id
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv_id_tensor_comp_evaluation /-
@[simp]
theorem tensorLeftHomEquiv_id_tensor_comp_evaluation {Y Z : C} [HasLeftDual Z] (f : Y ā¶ įZ) :
(tensorLeftHomEquiv _ _ _ _) ((š Z ā f) ā« Īµ_ _ _) = f ā« (Ļ_ _).inv :=
@@ -617,9 +687,11 @@ theorem tensorLeftHomEquiv_id_tensor_comp_evaluation {Y Z : C} [HasLeftDual Z] (
slice_lhs 3 5 => rw [evaluation_coevaluation]
simp
#align category_theory.tensor_left_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorLeftHomEquiv_id_tensor_comp_evaluation
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorLeftHomEquiv_tensor_id_comp_evaluation /-
@[simp]
theorem tensorLeftHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y]
(f : X ā¶ Y) : (tensorLeftHomEquiv _ _ _ _) ((f ā š _) ā« Īµ_ _ _) = (įf) ā« (Ļ_ _).inv :=
@@ -627,10 +699,12 @@ theorem tensorLeftHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasLeftDual X] [
dsimp [tensor_left_hom_equiv, left_adjoint_mate]
simp
#align category_theory.tensor_left_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorLeftHomEquiv_tensor_id_comp_evaluation
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv_id_tensor_comp_evaluation /-
@[simp]
theorem tensorRightHomEquiv_id_tensor_comp_evaluation {X Y : C} [HasRightDual X] [HasRightDual Y]
(f : X ā¶ Y) : (tensorRightHomEquiv _ _ _ _) ((š (Yį) ā f) ā« Īµ_ _ _) = fį ā« (Ī»_ _).inv :=
@@ -638,10 +712,12 @@ theorem tensorRightHomEquiv_id_tensor_comp_evaluation {X Y : C} [HasRightDual X]
dsimp [tensor_right_hom_equiv, right_adjoint_mate]
simp
#align category_theory.tensor_right_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorRightHomEquiv_id_tensor_comp_evaluation
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.tensorRightHomEquiv_tensor_id_comp_evaluation /-
@[simp]
theorem tensorRightHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasRightDual X] (f : Y ā¶ Xį) :
(tensorRightHomEquiv _ _ _ _) ((f ā š X) ā« Īµ_ X (Xį)) = f ā« (Ī»_ _).inv :=
@@ -653,12 +729,14 @@ theorem tensorRightHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasRightDual X]
slice_lhs 3 5 => rw [coevaluation_evaluation]
simp
#align category_theory.tensor_right_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorRightHomEquiv_tensor_id_comp_evaluation
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.coevaluation_comp_rightAdjointMate /-
-- Next four lemmas passing `fį` or `įf` through (co)evaluations.
theorem coevaluation_comp_rightAdjointMate {X Y : C} [HasRightDual X] [HasRightDual Y] (f : X ā¶ Y) :
Ī·_ Y (Yį) ā« (š _ ā fį) = Ī·_ _ _ ā« (f ā š _) :=
@@ -666,17 +744,20 @@ theorem coevaluation_comp_rightAdjointMate {X Y : C} [HasRightDual X] [HasRightD
apply_fun (tensor_left_hom_equiv _ Y (Yį) _).symm
simp
#align category_theory.coevaluation_comp_right_adjoint_mate CategoryTheory.coevaluation_comp_rightAdjointMate
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.leftAdjointMate_comp_evaluation /-
theorem leftAdjointMate_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) :
(š X ā įf) ā« Īµ_ _ _ = (f ā š _) ā« Īµ_ _ _ :=
by
apply_fun tensor_left_hom_equiv _ (įX) X _
simp
#align category_theory.left_adjoint_mate_comp_evaluation CategoryTheory.leftAdjointMate_comp_evaluation
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -685,12 +766,14 @@ theorem leftAdjointMate_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.coevaluation_comp_leftAdjointMate /-
theorem coevaluation_comp_leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) :
Ī·_ (įY) Y ā« ((įf) ā š Y) = Ī·_ (įX) X ā« (š (įX) ā f) :=
by
apply_fun (tensor_right_hom_equiv _ (įY) Y _).symm
simp
#align category_theory.coevaluation_comp_left_adjoint_mate CategoryTheory.coevaluation_comp_leftAdjointMate
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -699,15 +782,18 @@ theorem coevaluation_comp_leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.rightAdjointMate_comp_evaluation /-
theorem rightAdjointMate_comp_evaluation {X Y : C} [HasRightDual X] [HasRightDual Y] (f : X ā¶ Y) :
(fį ā š X) ā« Īµ_ X (Xį) = (š (Yį) ā f) ā« Īµ_ Y (Yį) :=
by
apply_fun tensor_right_hom_equiv _ X (Xį) _
simp
#align category_theory.right_adjoint_mate_comp_evaluation CategoryTheory.rightAdjointMate_comp_evaluation
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.exactPairingCongrLeft /-
/-- Transport an exact pairing across an isomorphism in the first argument. -/
def exactPairingCongrLeft {X X' Y : C} [ExactPairing X' Y] (i : X ā
X') : ExactPairing X Y
where
@@ -732,9 +818,11 @@ def exactPairingCongrLeft {X X' Y : C} [ExactPairing X' Y] (i : X ā
X') : Exac
simp
simp
#align category_theory.exact_pairing_congr_left CategoryTheory.exactPairingCongrLeft
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.exactPairingCongrRight /-
/-- Transport an exact pairing across an isomorphism in the second argument. -/
def exactPairingCongrRight {X Y Y' : C} [ExactPairing X Y'] (i : Y ā
Y') : ExactPairing X Y
where
@@ -759,14 +847,18 @@ def exactPairingCongrRight {X Y Y' : C} [ExactPairing X Y'] (i : Y ā
Y') : Exa
slice_lhs 3 4 => rw [ā left_unitor_inv_naturality]
simp
#align category_theory.exact_pairing_congr_right CategoryTheory.exactPairingCongrRight
+-/
+#print CategoryTheory.exactPairingCongr /-
/-- Transport an exact pairing across isomorphisms. -/
def exactPairingCongr {X X' Y Y' : C} [ExactPairing X' Y'] (i : X ā
X') (j : Y ā
Y') :
ExactPairing X Y :=
haveI : exact_pairing X' Y := exact_pairing_congr_right j
exact_pairing_congr_left i
#align category_theory.exact_pairing_congr CategoryTheory.exactPairingCongr
+-/
+#print CategoryTheory.rightDualIso /-
/-- Right duals are isomorphic. -/
def rightDualIso {X Yā Yā : C} (_ : ExactPairing X Yā) (_ : ExactPairing X Yā) : Yā ā
Yā
where
@@ -775,7 +867,9 @@ def rightDualIso {X Yā Yā : C} (_ : ExactPairing X Yā) (_ : ExactPairing X
hom_inv_id' := by rw [ā comp_right_adjoint_mate, category.comp_id, right_adjoint_mate_id]
inv_hom_id' := by rw [ā comp_right_adjoint_mate, category.comp_id, right_adjoint_mate_id]
#align category_theory.right_dual_iso CategoryTheory.rightDualIso
+-/
+#print CategoryTheory.leftDualIso /-
/-- Left duals are isomorphic. -/
def leftDualIso {Xā Xā Y : C} (pā : ExactPairing Xā Y) (pā : ExactPairing Xā Y) : Xā ā
Xā
where
@@ -784,31 +878,41 @@ def leftDualIso {Xā Xā Y : C} (pā : ExactPairing Xā Y) (pā : ExactPair
hom_inv_id' := by rw [ā comp_left_adjoint_mate, category.comp_id, left_adjoint_mate_id]
inv_hom_id' := by rw [ā comp_left_adjoint_mate, category.comp_id, left_adjoint_mate_id]
#align category_theory.left_dual_iso CategoryTheory.leftDualIso
+-/
+#print CategoryTheory.rightDualIso_id /-
@[simp]
theorem rightDualIso_id {X Y : C} (p : ExactPairing X Y) : rightDualIso p p = Iso.refl Y := by ext;
simp only [right_dual_iso, iso.refl_hom, right_adjoint_mate_id]
#align category_theory.right_dual_iso_id CategoryTheory.rightDualIso_id
+-/
+#print CategoryTheory.leftDualIso_id /-
@[simp]
theorem leftDualIso_id {X Y : C} (p : ExactPairing X Y) : leftDualIso p p = Iso.refl X := by ext;
simp only [left_dual_iso, iso.refl_hom, left_adjoint_mate_id]
#align category_theory.left_dual_iso_id CategoryTheory.leftDualIso_id
+-/
+#print CategoryTheory.RightRigidCategory /-
/-- A right rigid monoidal category is one in which every object has a right dual. -/
class RightRigidCategory (C : Type u) [Category.{v} C] [MonoidalCategory.{v} C] where
[rightDual : ā X : C, HasRightDual X]
#align category_theory.right_rigid_category CategoryTheory.RightRigidCategory
+-/
+#print CategoryTheory.LeftRigidCategory /-
/-- A left rigid monoidal category is one in which every object has a right dual. -/
class LeftRigidCategory (C : Type u) [Category.{v} C] [MonoidalCategory.{v} C] where
[leftDual : ā X : C, HasLeftDual X]
#align category_theory.left_rigid_category CategoryTheory.LeftRigidCategory
+-/
attribute [instance 100] right_rigid_category.right_dual
attribute [instance 100] left_rigid_category.left_dual
+#print CategoryTheory.monoidalClosedOfLeftRigidCategory /-
/-- Any left rigid category is monoidal closed, with the internal hom `X ā¶[C] Y = įX ā Y`.
This has to be a definition rather than an instance to avoid diamonds, for example between
`category_theory.monoidal_closed.functor_category` and
@@ -820,11 +924,14 @@ naturally isomorphic). -/
def monoidalClosedOfLeftRigidCategory (C : Type u) [Category.{v} C] [MonoidalCategory.{v} C]
[LeftRigidCategory C] : MonoidalClosed C where closed' X := closedOfHasLeftDual X
#align category_theory.monoidal_closed_of_left_rigid_category CategoryTheory.monoidalClosedOfLeftRigidCategory
+-/
+#print CategoryTheory.RigidCategory /-
/-- A rigid monoidal category is a monoidal category which is left rigid and right rigid. -/
class RigidCategory (C : Type u) [Category.{v} C] [MonoidalCategory.{v} C] extends
RightRigidCategory C, LeftRigidCategory C
#align category_theory.rigid_category CategoryTheory.RigidCategory
+-/
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -823,7 +823,7 @@ def monoidalClosedOfLeftRigidCategory (C : Type u) [Category.{v} C] [MonoidalCat
/-- A rigid monoidal category is a monoidal category which is left rigid and right rigid. -/
class RigidCategory (C : Type u) [Category.{v} C] [MonoidalCategory.{v} C] extends
- RightRigidCategory C, LeftRigidCategory C
+ RightRigidCategory C, LeftRigidCategory C
#align category_theory.rigid_category CategoryTheory.RigidCategory
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -786,16 +786,12 @@ def leftDualIso {Xā Xā Y : C} (pā : ExactPairing Xā Y) (pā : ExactPair
#align category_theory.left_dual_iso CategoryTheory.leftDualIso
@[simp]
-theorem rightDualIso_id {X Y : C} (p : ExactPairing X Y) : rightDualIso p p = Iso.refl Y :=
- by
- ext
+theorem rightDualIso_id {X Y : C} (p : ExactPairing X Y) : rightDualIso p p = Iso.refl Y := by ext;
simp only [right_dual_iso, iso.refl_hom, right_adjoint_mate_id]
#align category_theory.right_dual_iso_id CategoryTheory.rightDualIso_id
@[simp]
-theorem leftDualIso_id {X Y : C} (p : ExactPairing X Y) : leftDualIso p p = Iso.refl X :=
- by
- ext
+theorem leftDualIso_id {X Y : C} (p : ExactPairing X Y) : leftDualIso p p = Iso.refl X := by ext;
simp only [left_dual_iso, iso.refl_hom, left_adjoint_mate_id]
#align category_theory.left_dual_iso_id CategoryTheory.leftDualIso_id
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -106,11 +106,11 @@ notation "Īµ_" => ExactPairing.evaluation
restate_axiom coevaluation_evaluation'
-attribute [simp, reassoc.1] exact_pairing.coevaluation_evaluation
+attribute [simp, reassoc] exact_pairing.coevaluation_evaluation
restate_axiom evaluation_coevaluation'
-attribute [simp, reassoc.1] exact_pairing.evaluation_coevaluation
+attribute [simp, reassoc] exact_pairing.evaluation_coevaluation
instance exactPairingUnit : ExactPairing (š_ C) (š_ C)
where
@@ -255,7 +255,7 @@ theorem leftAdjointMate_comp {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] {f : X
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The composition of right adjoint mates is the adjoint mate of the composition. -/
-@[reassoc.1]
+@[reassoc]
theorem comp_rightAdjointMate {X Y Z : C} [HasRightDual X] [HasRightDual Y] [HasRightDual Z]
{f : X ā¶ Y} {g : Y ā¶ Z} : (f ā« g)į = gį ā« fį :=
by
@@ -290,7 +290,7 @@ theorem comp_rightAdjointMate {X Y Z : C} [HasRightDual X] [HasRightDual Y] [Has
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The composition of left adjoint mates is the adjoint mate of the composition. -/
-@[reassoc.1]
+@[reassoc]
theorem comp_leftAdjointMate {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] [HasLeftDual Z] {f : X ā¶ Y}
{g : Y ā¶ Z} : (įf ā« g) = (įg) ā« įf :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -73,14 +73,14 @@ namespace CategoryTheory
variable {C : Type uā} [Category.{vā} C] [MonoidalCategory C]
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`coevaluation_evaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`evaluation_coevaluation'] [] -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- An exact pairing is a pair of objects `X Y : C` which admit
@@ -809,9 +809,9 @@ class LeftRigidCategory (C : Type u) [Category.{v} C] [MonoidalCategory.{v} C] w
[leftDual : ā X : C, HasLeftDual X]
#align category_theory.left_rigid_category CategoryTheory.LeftRigidCategory
-attribute [instance] right_rigid_category.right_dual
+attribute [instance 100] right_rigid_category.right_dual
-attribute [instance] left_rigid_category.left_dual
+attribute [instance 100] left_rigid_category.left_dual
/-- Any left rigid category is monoidal closed, with the internal hom `X ā¶[C] Y = įX ā Y`.
This has to be a definition rather than an instance to avoid diamonds, for example between
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -381,7 +381,7 @@ If `Y` has a left dual `įY`, then it is a closed object, with the internal hom
given by left tensoring by `įY`.
This has to be a definition rather than an instance to avoid diamonds, for example between
`category_theory.monoidal_closed.functor_closed` and
-`category_theory.monoidal.functor_has_left_dual`. Moreover, in concrete applications there is often
+`CategoryTheory.Monoidal.functorHasLeftDual`. Moreover, in concrete applications there is often
a more useful definition of the internal hom object than `įY ā X`, in which case the closed
structure shouldn't come from `has_left_dual` (e.g. in the category `FinVect k`, it is more
convenient to define the internal hom as `Y āā[k] X` rather than `įY ā X` even though these are
@@ -640,7 +640,7 @@ attribute [instance 100] LeftRigidCategory.leftDual
/-- Any left rigid category is monoidal closed, with the internal hom `X ā¶[C] Y = įX ā Y`.
This has to be a definition rather than an instance to avoid diamonds, for example between
`category_theory.monoidal_closed.functor_category` and
-`category_theory.monoidal.left_rigid_functor_category`. Moreover, in concrete applications there is
+`CategoryTheory.Monoidal.leftRigidFunctorCategory`. Moreover, in concrete applications there is
often a more useful definition of the internal hom object than `įY ā X`, in which case the monoidal
closed structure shouldn't come the rigid structure (e.g. in the category `FinVect k`, it is more
convenient to define the internal hom as `Y āā[k] X` rather than `įY ā X` even though these are
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -96,7 +96,6 @@ namespace ExactPairing
-- arguments for class fields explicit,
-- we now repeat all the fields without primes.
-- See https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Making.20variable.20in.20class.20field.20explicit
-
variable (X Y : C)
variable [ExactPairing X Y]
I realized that the monoid composition āā«
can be defined without depending on the free monoid category, and that it is still useful.
@@ -119,11 +119,11 @@ lemma evaluation_coevaluation :
lemma coevaluation_evaluation'' :
Y ā Ī·_ X Y āā« Īµ_ X Y ā· Y = āš := by
- convert coevaluation_evaluation X Y <;> simp [Mathlib.Tactic.Coherence.monoidalComp]
+ convert coevaluation_evaluation X Y <;> simp [monoidalComp]
lemma evaluation_coevaluation'' :
Ī·_ X Y ā· X āā« X ā Īµ_ X Y = āš := by
- convert evaluation_coevaluation X Y <;> simp [Mathlib.Tactic.Coherence.monoidalComp]
+ convert evaluation_coevaluation X Y <;> simp [monoidalComp]
end ExactPairing
@@ -532,7 +532,7 @@ def exactPairingCongrLeft {X X' Y : C} [ExactPairing X' Y] (i : X ā
X') : Exac
_ = (Ī»_ X).hom ā« (Ļ_ X).inv := by
rw [Iso.hom_inv_id]
-- coherence failed
- simp [Mathlib.Tactic.Coherence.monoidalComp]
+ simp [monoidalComp]
coevaluation_evaluation' := by
calc
_ = Y ā Ī·_ X' Y ā« Y ā (i.inv ā« i.hom) ā· Y āā« Īµ_ X' Y ā· Y := by
@@ -542,7 +542,7 @@ def exactPairingCongrLeft {X X' Y : C} [ExactPairing X' Y] (i : X ā
X') : Exac
_ = _ := by
rw [coevaluation_evaluation'']
-- coherence failed
- simp [Mathlib.Tactic.Coherence.monoidalComp]
+ simp [monoidalComp]
#align category_theory.exact_pairing_congr_left CategoryTheory.exactPairingCongrLeft
/-- Transport an exact pairing across an isomorphism in the second argument. -/
@@ -558,7 +558,7 @@ def exactPairingCongrRight {X Y Y' : C} [ExactPairing X Y'] (i : Y ā
Y') : Exa
_ = _ := by
rw [evaluation_coevaluation'']
-- coherence failed
- simp [Mathlib.Tactic.Coherence.monoidalComp]
+ simp [monoidalComp]
coevaluation_evaluation' :=
calc
_ = Y ā Ī·_ X Y' āā« (Y ā (X ā i.inv) ā« i.hom ā· (X ā Y)) āā« Īµ_ X Y' ā· Y := by
@@ -573,7 +573,7 @@ def exactPairingCongrRight {X Y Y' : C} [ExactPairing X Y'] (i : Y ā
Y') : Exa
_ = (Ļ_ Y).hom ā« (Ī»_ Y).inv := by
rw [Iso.hom_inv_id]
-- coherence failed
- simp [Mathlib.Tactic.Coherence.monoidalComp]
+ simp [monoidalComp]
#align category_theory.exact_pairing_congr_right CategoryTheory.exactPairingCongrRight
/-- Transport an exact pairing across isomorphisms. -/
@@ -331,8 +331,6 @@ def tensorRightHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (X ā Y ā¶ Z) ā
rw [coevaluation_evaluation'']; coherence
#align category_theory.tensor_right_hom_equiv CategoryTheory.tensorRightHomEquiv
-attribute [local simp] id_tensorHom tensorHom_id
-
theorem tensorLeftHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f : Y' ā X ā¶ Z)
(g : Z ā¶ Z') :
(tensorLeftHomEquiv X Y Y' Z') (f ā« g) = (tensorLeftHomEquiv X Y Y' Z) f ā« Y ā g := by
@@ -402,8 +400,6 @@ theorem tensorLeftHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
simp [tensorLeftHomEquiv, tensorHom_def']
#align category_theory.tensor_left_hom_equiv_tensor CategoryTheory.tensorLeftHomEquiv_tensor
-attribute [local simp] id_tensorHom tensorHom_id
-
/-- `tensorRightHomEquiv` commutes with tensoring on the left -/
theorem tensorRightHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f : X ā¶ Z ā Y')
(g : X' ā¶ Z') :
@@ -335,27 +335,27 @@ attribute [local simp] id_tensorHom tensorHom_id
theorem tensorLeftHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f : Y' ā X ā¶ Z)
(g : Z ā¶ Z') :
- (tensorLeftHomEquiv X Y Y' Z') (f ā« g) = (tensorLeftHomEquiv X Y Y' Z) f ā« (š Y ā g) := by
+ (tensorLeftHomEquiv X Y Y' Z') (f ā« g) = (tensorLeftHomEquiv X Y Y' Z) f ā« Y ā g := by
simp [tensorLeftHomEquiv]
#align category_theory.tensor_left_hom_equiv_naturality CategoryTheory.tensorLeftHomEquiv_naturality
theorem tensorLeftHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y'] (f : X ā¶ X')
(g : X' ā¶ Y ā Z) :
(tensorLeftHomEquiv X Y Y' Z).symm (f ā« g) =
- (š _ ā f) ā« (tensorLeftHomEquiv X' Y Y' Z).symm g := by
+ _ ā f ā« (tensorLeftHomEquiv X' Y Y' Z).symm g := by
simp [tensorLeftHomEquiv]
#align category_theory.tensor_left_hom_equiv_symm_naturality CategoryTheory.tensorLeftHomEquiv_symm_naturality
theorem tensorRightHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f : X ā Y ā¶ Z)
(g : Z ā¶ Z') :
- (tensorRightHomEquiv X Y Y' Z') (f ā« g) = (tensorRightHomEquiv X Y Y' Z) f ā« (g ā š Y') := by
+ (tensorRightHomEquiv X Y Y' Z') (f ā« g) = (tensorRightHomEquiv X Y Y' Z) f ā« g ā· Y' := by
simp [tensorRightHomEquiv]
#align category_theory.tensor_right_hom_equiv_naturality CategoryTheory.tensorRightHomEquiv_naturality
theorem tensorRightHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y'] (f : X ā¶ X')
(g : X' ā¶ Z ā Y') :
(tensorRightHomEquiv X Y Y' Z).symm (f ā« g) =
- (f ā š Y) ā« (tensorRightHomEquiv X' Y Y' Z).symm g := by
+ f ā· Y ā« (tensorRightHomEquiv X' Y Y' Z).symm g := by
simp [tensorRightHomEquiv]
#align category_theory.tensor_right_hom_equiv_symm_naturality CategoryTheory.tensorRightHomEquiv_symm_naturality
@@ -402,6 +402,8 @@ theorem tensorLeftHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
simp [tensorLeftHomEquiv, tensorHom_def']
#align category_theory.tensor_left_hom_equiv_tensor CategoryTheory.tensorLeftHomEquiv_tensor
+attribute [local simp] id_tensorHom tensorHom_id
+
/-- `tensorRightHomEquiv` commutes with tensoring on the left -/
theorem tensorRightHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f : X ā¶ Z ā Y')
(g : X' ā¶ Z') :
@@ -3,7 +3,8 @@ Copyright (c) 2021 Jakob von Raumer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jakob von Raumer
-/
-import Mathlib.CategoryTheory.Monoidal.CoherenceLemmas
+import Mathlib.CategoryTheory.Monoidal.Free.Coherence
+import Mathlib.Tactic.CategoryTheory.Coherence
import Mathlib.CategoryTheory.Closed.Monoidal
import Mathlib.Tactic.ApplyFun
@@ -82,10 +83,10 @@ class ExactPairing (X Y : C) where
Do not use directly. Use `ExactPairing.evaluation` instead. -/
evaluation' : Y ā X ā¶ š_ C
coevaluation_evaluation' :
- (š Y ā coevaluation') ā« (Ī±_ _ _ _).inv ā« (evaluation' ā š Y) = (Ļ_ Y).hom ā« (Ī»_ Y).inv := by
+ Y ā coevaluation' ā« (Ī±_ _ _ _).inv ā« evaluation' ā· Y = (Ļ_ Y).hom ā« (Ī»_ Y).inv := by
aesop_cat
evaluation_coevaluation' :
- (coevaluation' ā š X) ā« (Ī±_ _ _ _).hom ā« (š X ā evaluation') = (Ī»_ X).hom ā« (Ļ_ X).inv := by
+ coevaluation' ā· X ā« (Ī±_ _ _ _).hom ā« X ā evaluation' = (Ī»_ X).hom ā« (Ļ_ X).inv := by
aesop_cat
#align category_theory.exact_pairing CategoryTheory.ExactPairing
@@ -109,13 +110,21 @@ def evaluation : Y ā X ā¶ š_ C := @evaluation' _ _ _ X Y _
@[inherit_doc] notation "Īµ_" => ExactPairing.evaluation
lemma coevaluation_evaluation :
- (š Y ā Ī·_ _ _) ā« (Ī±_ _ _ _).inv ā« (Īµ_ X _ ā š Y) = (Ļ_ Y).hom ā« (Ī»_ Y).inv :=
+ Y ā Ī·_ _ _ ā« (Ī±_ _ _ _).inv ā« Īµ_ X _ ā· Y = (Ļ_ Y).hom ā« (Ī»_ Y).inv :=
coevaluation_evaluation'
lemma evaluation_coevaluation :
- (Ī·_ _ _ ā š X) ā« (Ī±_ _ _ _).hom ā« (š X ā Īµ_ _ Y) = (Ī»_ X).hom ā« (Ļ_ X).inv :=
+ Ī·_ _ _ ā· X ā« (Ī±_ _ _ _).hom ā« X ā Īµ_ _ Y = (Ī»_ X).hom ā« (Ļ_ X).inv :=
evaluation_coevaluation'
+lemma coevaluation_evaluation'' :
+ Y ā Ī·_ X Y āā« Īµ_ X Y ā· Y = āš := by
+ convert coevaluation_evaluation X Y <;> simp [Mathlib.Tactic.Coherence.monoidalComp]
+
+lemma evaluation_coevaluation'' :
+ Ī·_ X Y ā· X āā« X ā Īµ_ X Y = āš := by
+ convert evaluation_coevaluation X Y <;> simp [Mathlib.Tactic.Coherence.monoidalComp]
+
end ExactPairing
attribute [reassoc (attr := simp)] ExactPairing.coevaluation_evaluation
@@ -124,8 +133,8 @@ attribute [reassoc (attr := simp)] ExactPairing.evaluation_coevaluation
instance exactPairingUnit : ExactPairing (š_ C) (š_ C) where
coevaluation' := (Ļ_ _).inv
evaluation' := (Ļ_ _).hom
- coevaluation_evaluation' := by coherence
- evaluation_coevaluation' := by coherence
+ coevaluation_evaluation' := by rw [ā id_tensorHom, ā tensorHom_id]; coherence
+ evaluation_coevaluation' := by rw [ā id_tensorHom, ā tensorHom_id]; coherence
#align category_theory.exact_pairing_unit CategoryTheory.exactPairingUnit
/-- A class of objects which have a right dual. -/
@@ -178,12 +187,12 @@ theorem rightDual_leftDual {X : C} [HasLeftDual X] : (įX)į = X :=
/-- The right adjoint mate `fį : Xį ā¶ Yį` of a morphism `f : X ā¶ Y`. -/
def rightAdjointMate {X Y : C} [HasRightDual X] [HasRightDual Y] (f : X ā¶ Y) : Yį ā¶ Xį :=
- (Ļ_ _).inv ā« (š _ ā Ī·_ _ _) ā« (š _ ā f ā š _) ā« (Ī±_ _ _ _).inv ā« (Īµ_ _ _ ā š _) ā« (Ī»_ _).hom
+ (Ļ_ _).inv ā« _ ā Ī·_ _ _ ā« _ ā f ā· _ ā« (Ī±_ _ _ _).inv ā« Īµ_ _ _ ā· _ ā« (Ī»_ _).hom
#align category_theory.right_adjoint_mate CategoryTheory.rightAdjointMate
/-- The left adjoint mate `įf : įY ā¶ įX` of a morphism `f : X ā¶ Y`. -/
def leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) : įY ā¶ įX :=
- (Ī»_ _).inv ā« (Ī·_ (įX) X ā š _) ā« ((š _ ā f) ā š _) ā« (Ī±_ _ _ _).hom ā« (š _ ā Īµ_ _ _) ā« (Ļ_ _).hom
+ (Ī»_ _).inv ā« Ī·_ (įX) X ā· _ ā« (_ ā f) ā· _ ā« (Ī±_ _ _ _).hom ā« _ ā Īµ_ _ _ ā« (Ļ_ _).hom
#align category_theory.left_adjoint_mate CategoryTheory.leftAdjointMate
@[inherit_doc] notation f "į" => rightAdjointMate f
@@ -191,37 +200,36 @@ def leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) :
@[simp]
theorem rightAdjointMate_id {X : C} [HasRightDual X] : (š X)į = š (Xį) := by
- simp only [rightAdjointMate, MonoidalCategory.tensor_id, Category.id_comp,
- coevaluation_evaluation_assoc, Category.comp_id, Iso.inv_hom_id]
+ simp [rightAdjointMate]
#align category_theory.right_adjoint_mate_id CategoryTheory.rightAdjointMate_id
@[simp]
theorem leftAdjointMate_id {X : C} [HasLeftDual X] : (į(š X)) = š (įX) := by
- simp only [leftAdjointMate, MonoidalCategory.tensor_id, Category.id_comp,
- evaluation_coevaluation_assoc, Category.comp_id, Iso.inv_hom_id]
+ simp [leftAdjointMate]
#align category_theory.left_adjoint_mate_id CategoryTheory.leftAdjointMate_id
theorem rightAdjointMate_comp {X Y Z : C} [HasRightDual X] [HasRightDual Y] {f : X ā¶ Y}
{g : Xį ā¶ Z} :
fį ā« g =
(Ļ_ (Yį)).inv ā«
- (š _ ā Ī·_ X (Xį)) ā« (š _ ā f ā g) ā« (Ī±_ (Yį) Y Z).inv ā« (Īµ_ Y (Yį) ā š _) ā« (Ī»_ Z).hom := by
- dsimp only [rightAdjointMate]
- rw [Category.assoc, Category.assoc, associator_inv_naturality_assoc,
- associator_inv_naturality_assoc, ā tensor_id_comp_id_tensor g, Category.assoc, Category.assoc,
- Category.assoc, Category.assoc, id_tensor_comp_tensor_id_assoc, ā leftUnitor_naturality,
- tensor_id_comp_id_tensor_assoc]
+ _ ā Ī·_ X (Xį) ā« _ ā (f ā g) ā« (Ī±_ (Yį) Y Z).inv ā« Īµ_ Y (Yį) ā· _ ā« (Ī»_ Z).hom :=
+ calc
+ _ = š _ āā« Yį ā Ī·_ X Xį ā« Yį ā f ā· Xį āā« (Īµ_ Y Yį ā· Xį ā« š_ C ā g) āā« š _ := by
+ dsimp only [rightAdjointMate]; coherence
+ _ = _ := by
+ rw [ā whisker_exchange, tensorHom_def]; coherence
#align category_theory.right_adjoint_mate_comp CategoryTheory.rightAdjointMate_comp
theorem leftAdjointMate_comp {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] {f : X ā¶ Y}
{g : (įX) ā¶ Z} :
(įf) ā« g =
(Ī»_ _).inv ā«
- (Ī·_ (įX) X ā š _) ā« ((g ā f) ā š _) ā« (Ī±_ _ _ _).hom ā« (š _ ā Īµ_ _ _) ā« (Ļ_ _).hom := by
- dsimp only [leftAdjointMate]
- rw [Category.assoc, Category.assoc, associator_naturality_assoc, associator_naturality_assoc, ā
- id_tensor_comp_tensor_id _ g, Category.assoc, Category.assoc, Category.assoc, Category.assoc,
- tensor_id_comp_id_tensor_assoc, ā rightUnitor_naturality, id_tensor_comp_tensor_id_assoc]
+ Ī·_ (įX) X ā· _ ā« (g ā f) ā· _ ā« (Ī±_ _ _ _).hom ā« _ ā Īµ_ _ _ ā« (Ļ_ _).hom :=
+ calc
+ _ = š _ āā« Ī·_ (įX) X ā· (įY) āā« (įX) ā f ā· (įY) āā« ((įX) ā Īµ_ (įY) Y ā« g ā· š_ C) āā« š _ := by
+ dsimp only [leftAdjointMate]; coherence
+ _ = _ := by
+ rw [whisker_exchange, tensorHom_def']; coherence
#align category_theory.left_adjoint_mate_comp CategoryTheory.leftAdjointMate_comp
/-- The composition of right adjoint mates is the adjoint mate of the composition. -/
@@ -229,37 +237,21 @@ theorem leftAdjointMate_comp {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] {f : X
theorem comp_rightAdjointMate {X Y Z : C} [HasRightDual X] [HasRightDual Y] [HasRightDual Z]
{f : X ā¶ Y} {g : Y ā¶ Z} : (f ā« g)į = gį ā« fį := by
rw [rightAdjointMate_comp]
- simp only [rightAdjointMate, comp_tensor_id, Iso.cancel_iso_inv_left, id_tensor_comp,
- Category.assoc]
+ simp only [rightAdjointMate, comp_whiskerRight]
+ simp only [ā Category.assoc]; congr 3; simp only [Category.assoc]
+ simp only [ā MonoidalCategory.whiskerLeft_comp]; congr 2
symm
- iterate 5
- trans
- rw [ā Category.id_comp g, tensor_comp]
- rw [ā Category.assoc]
- symm
- iterate 2
- trans
- rw [ā Category.assoc]
- apply eq_whisker
- repeat'
- -- Porting note: why do we need to fill in the implicit `C` here, and below?
- rw [ā @id_tensor_comp C]
- congr 1
- rw [ā id_tensor_comp_tensor_id (Ī»_ (Xį)).hom g, id_tensor_rightUnitor_inv, Category.assoc,
- Category.assoc, rightUnitor_inv_naturality_assoc, ā associator_naturality_assoc, tensor_id,
- tensor_id_comp_id_tensor_assoc, ā associator_naturality_assoc]
- slice_rhs 2 3 =>
- rw [ā tensor_comp, tensor_id, Category.comp_id, ā Category.id_comp (Ī·_ Y (Yį)), tensor_comp]
- rw [ā id_tensor_comp_tensor_id _ (Ī·_ Y (Yį)), ā tensor_id]
- repeat' rw [@Category.assoc C]
- rw [pentagon_hom_inv_assoc, ā associator_naturality_assoc, associator_inv_naturality_assoc]
- slice_rhs 5 7 => rw [ā comp_tensor_id, ā comp_tensor_id, evaluation_coevaluation, comp_tensor_id]
- rw [associator_inv_naturality_assoc]
- slice_rhs 4 5 => rw [ā tensor_comp, leftUnitor_naturality, tensor_comp]
- repeat' rw [@Category.assoc C]
- rw [triangle_assoc_comp_right_inv_assoc, ā leftUnitor_tensor_assoc, leftUnitor_naturality_assoc,
- unitors_equal, ā Category.assoc, ā Category.assoc]
- simp
+ calc
+ _ = š _ āā« (Ī·_ Y Yį ā· š_ C ā« (Y ā Yį) ā Ī·_ X Xį) āā« Y ā Yį ā f ā· Xį āā«
+ Y ā Īµ_ Y Yį ā· Xį āā« g ā· Xį āā« š _ := by
+ rw [tensorHom_def']; coherence
+ _ = Ī·_ X Xį āā« (Ī·_ Y Yį ā· (X ā Xį) ā« (Y ā Yį) ā f ā· Xį) āā«
+ Y ā Īµ_ Y Yį ā· Xį āā« g ā· Xį āā« š _ := by
+ rw [ā whisker_exchange]; coherence
+ _ = Ī·_ X Xį āā« f ā· Xį āā« (Ī·_ Y Yį ā· Y āā« Y ā Īµ_ Y Yį) ā· Xį āā« g ā· Xį āā« š _ := by
+ rw [ā whisker_exchange]; coherence
+ _ = Ī·_ X Xį ā« f ā· Xį ā« g ā· Xį := by
+ rw [evaluation_coevaluation'']; coherence
#align category_theory.comp_right_adjoint_mate CategoryTheory.comp_rightAdjointMate
/-- The composition of left adjoint mates is the adjoint mate of the composition. -/
@@ -267,37 +259,21 @@ theorem comp_rightAdjointMate {X Y Z : C} [HasRightDual X] [HasRightDual Y] [Has
theorem comp_leftAdjointMate {X Y Z : C} [HasLeftDual X] [HasLeftDual Y] [HasLeftDual Z] {f : X ā¶ Y}
{g : Y ā¶ Z} : (įf ā« g) = (įg) ā« įf := by
rw [leftAdjointMate_comp]
- simp only [leftAdjointMate, id_tensor_comp, Iso.cancel_iso_inv_left, comp_tensor_id,
- Category.assoc]
+ simp only [leftAdjointMate, MonoidalCategory.whiskerLeft_comp]
+ simp only [ā Category.assoc]; congr 3; simp only [Category.assoc]
+ simp only [ā comp_whiskerRight]; congr 2
symm
- iterate 5
- trans
- rw [ā Category.id_comp g, tensor_comp]
- rw [ā Category.assoc]
- symm
- iterate 2
- trans
- rw [ā Category.assoc]
- apply eq_whisker
- repeat'
- -- Porting note: why do we need to fill in the implicit `C` here, and below?
- rw [ā @comp_tensor_id C]
- congr 1
- rw [ā tensor_id_comp_id_tensor g (Ļ_ (įX)).hom, leftUnitor_inv_tensor_id, Category.assoc,
- Category.assoc, leftUnitor_inv_naturality_assoc, ā associator_inv_naturality_assoc, tensor_id,
- id_tensor_comp_tensor_id_assoc, ā associator_inv_naturality_assoc]
- slice_rhs 2 3 =>
- rw [ā tensor_comp, tensor_id, Category.comp_id, ā Category.id_comp (Ī·_ (įY) Y), tensor_comp]
- rw [ā tensor_id_comp_id_tensor (Ī·_ (įY) Y), ā tensor_id]
- repeat' rw [@Category.assoc C]
- rw [pentagon_inv_hom_assoc, ā associator_inv_naturality_assoc, associator_naturality_assoc]
- slice_rhs 5 7 => rw [ā id_tensor_comp, ā id_tensor_comp, coevaluation_evaluation, id_tensor_comp]
- rw [associator_naturality_assoc]
- slice_rhs 4 5 => rw [ā tensor_comp, rightUnitor_naturality, tensor_comp]
- repeat' rw [@Category.assoc C]
- rw [triangle_assoc_comp_left_inv_assoc, ā rightUnitor_tensor_assoc,
- rightUnitor_naturality_assoc, ā unitors_equal, ā Category.assoc, ā Category.assoc]
- simp
+ calc
+ _ = š _ āā« ((š_ C) ā Ī·_ (įY) Y ā« Ī·_ (įX) X ā· ((įY) ā Y)) āā« (įX) ā f ā· (įY) ā· Y āā«
+ (įX) ā Īµ_ (įY) Y ā· Y āā« (įX) ā g := by
+ rw [tensorHom_def]; coherence
+ _ = Ī·_ (įX) X āā« (((įX) ā X) ā Ī·_ (įY) Y ā« ((įX) ā f) ā· ((įY) ā Y)) āā«
+ (įX) ā Īµ_ (įY) Y ā· Y āā« (įX) ā g := by
+ rw [whisker_exchange]; coherence
+ _ = Ī·_ (įX) X āā« ((įX) ā f) āā« (įX) ā (Y ā Ī·_ (įY) Y āā« Īµ_ (įY) Y ā· Y) āā« (įX) ā g := by
+ rw [whisker_exchange]; coherence
+ _ = Ī·_ (įX) X ā« (įX) ā f ā« (įX) ā g := by
+ rw [coevaluation_evaluation'']; coherence
#align category_theory.comp_left_adjoint_mate CategoryTheory.comp_leftAdjointMate
/-- Given an exact pairing on `Y Y'`,
@@ -310,36 +286,24 @@ This adjunction is often referred to as "Frobenius reciprocity" in the
fusion categories / planar algebras / subfactors literature.
-/
def tensorLeftHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (Y' ā X ā¶ Z) ā (X ā¶ Y ā Z) where
- toFun f := (Ī»_ _).inv ā« (Ī·_ _ _ ā š _) ā« (Ī±_ _ _ _).hom ā« (š _ ā f)
- invFun f := (š Y' ā f) ā« (Ī±_ _ _ _).inv ā« (Īµ_ _ _ ā š _) ā« (Ī»_ _).hom
+ toFun f := (Ī»_ _).inv ā« Ī·_ _ _ ā· _ ā« (Ī±_ _ _ _).hom ā« _ ā f
+ invFun f := Y' ā f ā« (Ī±_ _ _ _).inv ā« Īµ_ _ _ ā· _ ā« (Ī»_ _).hom
left_inv f := by
- dsimp
- simp only [id_tensor_comp]
- slice_lhs 4 5 => rw [associator_inv_naturality]
- slice_lhs 5 6 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
- slice_lhs 2 5 => simp only [ā tensor_id, associator_inv_conjugation]
- have c :
- (Ī±_ Y' (Y ā Y') X).hom ā«
- (š Y' ā (Ī±_ Y Y' X).hom) ā« (Ī±_ Y' Y (Y' ā X)).inv ā« (Ī±_ (Y' ā Y) Y' X).inv =
- (Ī±_ _ _ _).inv ā š _ := by pure_coherence
- slice_lhs 4 7 => rw [c]
- slice_lhs 3 5 => rw [ā comp_tensor_id, ā comp_tensor_id, coevaluation_evaluation]
- simp only [leftUnitor_conjugation]
- coherence
+ calc
+ _ = š _ āā« Y' ā Ī·_ Y Y' ā· X āā« ((Y' ā Y) ā f ā« Īµ_ Y Y' ā· Z) āā« š _ := by
+ coherence
+ _ = š _ āā« (Y' ā Ī·_ Y Y' āā« Īµ_ Y Y' ā· Y') ā· X āā« f := by
+ rw [whisker_exchange]; coherence
+ _ = f := by
+ rw [coevaluation_evaluation'']; coherence
right_inv f := by
- dsimp
- simp only [id_tensor_comp]
- slice_lhs 3 4 => rw [ā associator_naturality]
- slice_lhs 2 3 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
- slice_lhs 3 6 => simp only [ā tensor_id, associator_inv_conjugation]
- have c :
- (Ī±_ (Y ā Y') Y Z).hom ā«
- (Ī±_ Y Y' (Y ā Z)).hom ā« (š Y ā (Ī±_ Y' Y Z).inv) ā« (Ī±_ Y (Y' ā Y) Z).inv =
- (Ī±_ _ _ _).hom ā š Z := by pure_coherence
- slice_lhs 5 8 => rw [c]
- slice_lhs 4 6 => rw [ā comp_tensor_id, ā comp_tensor_id, evaluation_coevaluation]
- simp only [leftUnitor_conjugation]
- coherence
+ calc
+ _ = š _ āā« (Ī·_ Y Y' ā· X ā« (Y ā Y') ā f) āā« Y ā Īµ_ Y Y' ā· Z āā« š _ := by
+ coherence
+ _ = f āā« (Ī·_ Y Y' ā· Y āā« Y ā Īµ_ Y Y') ā· Z āā« š _ := by
+ rw [ā whisker_exchange]; coherence
+ _ = f := by
+ rw [evaluation_coevaluation'']; coherence
#align category_theory.tensor_left_hom_equiv CategoryTheory.tensorLeftHomEquiv
/-- Given an exact pairing on `Y Y'`,
@@ -347,66 +311,52 @@ we get a bijection on hom-sets `(X ā Y ā¶ Z) ā (X ā¶ Z ā Y')`
by "pulling the string on the right" up or down.
-/
def tensorRightHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (X ā Y ā¶ Z) ā (X ā¶ Z ā Y') where
- toFun f := (Ļ_ _).inv ā« (š _ ā Ī·_ _ _) ā« (Ī±_ _ _ _).inv ā« (f ā š _)
- invFun f := (f ā š _) ā« (Ī±_ _ _ _).hom ā« (š _ ā Īµ_ _ _) ā« (Ļ_ _).hom
+ toFun f := (Ļ_ _).inv ā« _ ā Ī·_ _ _ ā« (Ī±_ _ _ _).inv ā« f ā· _
+ invFun f := f ā· _ ā« (Ī±_ _ _ _).hom ā« _ ā Īµ_ _ _ ā« (Ļ_ _).hom
left_inv f := by
- dsimp
- simp only [comp_tensor_id]
- slice_lhs 4 5 => rw [associator_naturality]
- slice_lhs 5 6 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
- slice_lhs 2 5 => simp only [ā tensor_id, associator_conjugation]
- have c :
- (Ī±_ X (Y ā Y') Y).inv ā«
- ((Ī±_ X Y Y').inv ā š Y) ā« (Ī±_ (X ā Y) Y' Y).hom ā« (Ī±_ X Y (Y' ā Y)).hom =
- š _ ā (Ī±_ _ _ _).hom := by pure_coherence
- slice_lhs 4 7 => rw [c]
- slice_lhs 3 5 => rw [ā id_tensor_comp, ā id_tensor_comp, evaluation_coevaluation]
- simp only [rightUnitor_conjugation]
- coherence
+ calc
+ _ = š _ āā« X ā Ī·_ Y Y' ā· Y āā« (f ā· (Y' ā Y) ā« Z ā Īµ_ Y Y') āā« š _ := by
+ coherence
+ _ = š _ āā« X ā (Ī·_ Y Y' ā· Y āā« Y ā Īµ_ Y Y') āā« f := by
+ rw [ā whisker_exchange]; coherence
+ _ = f := by
+ rw [evaluation_coevaluation'']; coherence
right_inv f := by
- dsimp
- simp only [comp_tensor_id]
- slice_lhs 3 4 => rw [ā associator_inv_naturality]
- slice_lhs 2 3 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
- slice_lhs 3 6 => simp only [ā tensor_id, associator_conjugation]
- have c :
- (Ī±_ Z Y' (Y ā Y')).inv ā«
- (Ī±_ (Z ā Y') Y Y').inv ā« ((Ī±_ Z Y' Y).hom ā š Y') ā« (Ī±_ Z (Y' ā Y) Y').hom =
- š _ ā (Ī±_ _ _ _).inv := by pure_coherence
- slice_lhs 5 8 => rw [c]
- slice_lhs 4 6 => rw [ā id_tensor_comp, ā id_tensor_comp, coevaluation_evaluation]
- simp only [rightUnitor_conjugation]
- coherence
+ calc
+ _ = š _ āā« (X ā Ī·_ Y Y' ā« f ā· (Y ā Y')) āā« Z ā Īµ_ Y Y' ā· Y' āā« š _ := by
+ coherence
+ _ = f āā« Z ā (Y' ā Ī·_ Y Y' āā« Īµ_ Y Y' ā· Y') āā« š _ := by
+ rw [whisker_exchange]; coherence
+ _ = f := by
+ rw [coevaluation_evaluation'']; coherence
#align category_theory.tensor_right_hom_equiv CategoryTheory.tensorRightHomEquiv
+attribute [local simp] id_tensorHom tensorHom_id
+
theorem tensorLeftHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f : Y' ā X ā¶ Z)
(g : Z ā¶ Z') :
(tensorLeftHomEquiv X Y Y' Z') (f ā« g) = (tensorLeftHomEquiv X Y Y' Z) f ā« (š Y ā g) := by
- dsimp [tensorLeftHomEquiv]
- simp only [id_tensor_comp, Category.assoc]
+ simp [tensorLeftHomEquiv]
#align category_theory.tensor_left_hom_equiv_naturality CategoryTheory.tensorLeftHomEquiv_naturality
theorem tensorLeftHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y'] (f : X ā¶ X')
(g : X' ā¶ Y ā Z) :
(tensorLeftHomEquiv X Y Y' Z).symm (f ā« g) =
(š _ ā f) ā« (tensorLeftHomEquiv X' Y Y' Z).symm g := by
- dsimp [tensorLeftHomEquiv]
- simp only [id_tensor_comp, Category.assoc]
+ simp [tensorLeftHomEquiv]
#align category_theory.tensor_left_hom_equiv_symm_naturality CategoryTheory.tensorLeftHomEquiv_symm_naturality
theorem tensorRightHomEquiv_naturality {X Y Y' Z Z' : C} [ExactPairing Y Y'] (f : X ā Y ā¶ Z)
(g : Z ā¶ Z') :
(tensorRightHomEquiv X Y Y' Z') (f ā« g) = (tensorRightHomEquiv X Y Y' Z) f ā« (g ā š Y') := by
- dsimp [tensorRightHomEquiv]
- simp only [comp_tensor_id, Category.assoc]
+ simp [tensorRightHomEquiv]
#align category_theory.tensor_right_hom_equiv_naturality CategoryTheory.tensorRightHomEquiv_naturality
theorem tensorRightHomEquiv_symm_naturality {X X' Y Y' Z : C} [ExactPairing Y Y'] (f : X ā¶ X')
(g : X' ā¶ Z ā Y') :
(tensorRightHomEquiv X Y Y' Z).symm (f ā« g) =
(f ā š Y) ā« (tensorRightHomEquiv X' Y Y' Z).symm g := by
- dsimp [tensorRightHomEquiv]
- simp only [comp_tensor_id, Category.assoc]
+ simp [tensorRightHomEquiv]
#align category_theory.tensor_right_hom_equiv_symm_naturality CategoryTheory.tensorRightHomEquiv_symm_naturality
/-- If `Y Y'` have an exact pairing,
@@ -449,12 +399,7 @@ theorem tensorLeftHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
(g : X' ā¶ Z') :
(tensorLeftHomEquiv (X ā X') Y Y' (Z ā Z')).symm ((f ā g) ā« (Ī±_ _ _ _).hom) =
(Ī±_ _ _ _).inv ā« ((tensorLeftHomEquiv X Y Y' Z).symm f ā g) := by
- dsimp [tensorLeftHomEquiv]
- simp only [id_tensor_comp]
- simp only [associator_inv_conjugation]
- slice_lhs 2 2 => rw [ā id_tensor_comp_tensor_id]
- conv_rhs => rw [ā id_tensor_comp_tensor_id, comp_tensor_id, comp_tensor_id]
- simp; coherence
+ simp [tensorLeftHomEquiv, tensorHom_def']
#align category_theory.tensor_left_hom_equiv_tensor CategoryTheory.tensorLeftHomEquiv_tensor
/-- `tensorRightHomEquiv` commutes with tensoring on the left -/
@@ -462,160 +407,175 @@ theorem tensorRightHomEquiv_tensor {X X' Y Y' Z Z' : C} [ExactPairing Y Y'] (f :
(g : X' ā¶ Z') :
(tensorRightHomEquiv (X' ā X) Y Y' (Z' ā Z)).symm ((g ā f) ā« (Ī±_ _ _ _).inv) =
(Ī±_ _ _ _).hom ā« (g ā (tensorRightHomEquiv X Y Y' Z).symm f) := by
- dsimp [tensorRightHomEquiv]
- simp only [comp_tensor_id]
- simp only [associator_conjugation]
- slice_lhs 2 2 => rw [ā tensor_id_comp_id_tensor]
- conv_rhs => rw [ā tensor_id_comp_id_tensor, id_tensor_comp, id_tensor_comp]
- simp only [ā tensor_id, associator_conjugation]
- simp; coherence
+ simp [tensorRightHomEquiv, tensorHom_def]
#align category_theory.tensor_right_hom_equiv_tensor CategoryTheory.tensorRightHomEquiv_tensor
@[simp]
-theorem tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor {Y Y' Z : C} [ExactPairing Y Y']
- (f : Y' ā¶ Z) : (tensorLeftHomEquiv _ _ _ _).symm (Ī·_ _ _ ā« (š Y ā f)) = (Ļ_ _).hom ā« f := by
- dsimp [tensorLeftHomEquiv]
- rw [id_tensor_comp]
- slice_lhs 2 3 => rw [associator_inv_naturality]
- slice_lhs 3 4 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
- slice_lhs 1 3 => rw [coevaluation_evaluation]
- simp [id_tensorHom]
-#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor
+theorem tensorLeftHomEquiv_symm_coevaluation_comp_whiskerLeft {Y Y' Z : C} [ExactPairing Y Y']
+ (f : Y' ā¶ Z) : (tensorLeftHomEquiv _ _ _ _).symm (Ī·_ _ _ ā« Y ā f) = (Ļ_ _).hom ā« f := by
+ calc
+ _ = Y' ā Ī·_ Y Y' āā« ((Y' ā Y) ā f ā« Īµ_ Y Y' ā· Z) āā« š _ := by
+ dsimp [tensorLeftHomEquiv]; coherence
+ _ = (Y' ā Ī·_ Y Y' āā« Īµ_ Y Y' ā· Y') āā« f := by
+ rw [whisker_exchange]; coherence
+ _ = _ := by rw [coevaluation_evaluation'']; coherence
+#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_whiskerLeft
@[simp]
-theorem tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id {X Y : C} [HasRightDual X]
+theorem tensorLeftHomEquiv_symm_coevaluation_comp_whiskerRight {X Y : C} [HasRightDual X]
[HasRightDual Y] (f : X ā¶ Y) :
- (tensorLeftHomEquiv _ _ _ _).symm (Ī·_ _ _ ā« (f ā š (Xį))) = (Ļ_ _).hom ā« fį := by
+ (tensorLeftHomEquiv _ _ _ _).symm (Ī·_ _ _ ā« f ā· (Xį)) = (Ļ_ _).hom ā« fį := by
dsimp [tensorLeftHomEquiv, rightAdjointMate]
simp
-#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_tensor_id
+#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_whiskerRight
@[simp]
-theorem tensorRightHomEquiv_symm_coevaluation_comp_id_tensor {X Y : C} [HasLeftDual X]
+theorem tensorRightHomEquiv_symm_coevaluation_comp_whiskerLeft {X Y : C} [HasLeftDual X]
[HasLeftDual Y] (f : X ā¶ Y) :
- (tensorRightHomEquiv _ (įY) _ _).symm (Ī·_ (įX) X ā« (š (įX) ā f)) = (Ī»_ _).hom ā« įf := by
+ (tensorRightHomEquiv _ (įY) _ _).symm (Ī·_ (įX) X ā« (įX) ā f) = (Ī»_ _).hom ā« įf := by
dsimp [tensorRightHomEquiv, leftAdjointMate]
simp
-#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_id_tensor
+#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_whiskerLeft
@[simp]
-theorem tensorRightHomEquiv_symm_coevaluation_comp_tensor_id {Y Y' Z : C} [ExactPairing Y Y']
- (f : Y ā¶ Z) : (tensorRightHomEquiv _ Y _ _).symm (Ī·_ Y Y' ā« (f ā š Y')) = (Ī»_ _).hom ā« f := by
- dsimp [tensorRightHomEquiv]
- rw [comp_tensor_id]
- slice_lhs 2 3 => rw [associator_naturality]
- slice_lhs 3 4 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
- slice_lhs 1 3 => rw [evaluation_coevaluation]
- simp [tensorHom_id]
-#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_tensor_id
+theorem tensorRightHomEquiv_symm_coevaluation_comp_whiskerRight {Y Y' Z : C} [ExactPairing Y Y']
+ (f : Y ā¶ Z) : (tensorRightHomEquiv _ Y _ _).symm (Ī·_ Y Y' ā« f ā· Y') = (Ī»_ _).hom ā« f :=
+ calc
+ _ = Ī·_ Y Y' ā· Y āā« (f ā· (Y' ā Y) ā« Z ā Īµ_ Y Y') āā« š _ := by
+ dsimp [tensorRightHomEquiv]; coherence
+ _ = (Ī·_ Y Y' ā· Y āā« Y ā Īµ_ Y Y') āā« f := by
+ rw [ā whisker_exchange]; coherence
+ _ = _ := by
+ rw [evaluation_coevaluation'']; coherence
+#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_whiskerRight
@[simp]
-theorem tensorLeftHomEquiv_id_tensor_comp_evaluation {Y Z : C} [HasLeftDual Z] (f : Y ā¶ įZ) :
- (tensorLeftHomEquiv _ _ _ _) ((š Z ā f) ā« Īµ_ _ _) = f ā« (Ļ_ _).inv := by
- dsimp [tensorLeftHomEquiv]
- rw [id_tensor_comp]
- slice_lhs 3 4 => rw [ā associator_naturality]
- slice_lhs 2 3 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
- slice_lhs 3 5 => rw [evaluation_coevaluation]
- simp [id_tensorHom]
-#align category_theory.tensor_left_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorLeftHomEquiv_id_tensor_comp_evaluation
+theorem tensorLeftHomEquiv_whiskerLeft_comp_evaluation {Y Z : C} [HasLeftDual Z] (f : Y ā¶ įZ) :
+ (tensorLeftHomEquiv _ _ _ _) (Z ā f ā« Īµ_ _ _) = f ā« (Ļ_ _).inv :=
+ calc
+ _ = š _ āā« (Ī·_ (įZ) Z ā· Y ā« ((įZ) ā Z) ā f) āā« (įZ) ā Īµ_ (įZ) Z := by
+ dsimp [tensorLeftHomEquiv]; coherence
+ _ = f āā« (Ī·_ (įZ) Z ā· (įZ) āā« (įZ) ā Īµ_ (įZ) Z) := by
+ rw [ā whisker_exchange]; coherence
+ _ = _ := by
+ rw [evaluation_coevaluation'']; coherence
+#align category_theory.tensor_left_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorLeftHomEquiv_whiskerLeft_comp_evaluation
@[simp]
-theorem tensorLeftHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y]
- (f : X ā¶ Y) : (tensorLeftHomEquiv _ _ _ _) ((f ā š _) ā« Īµ_ _ _) = (įf) ā« (Ļ_ _).inv := by
+theorem tensorLeftHomEquiv_whiskerRight_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y]
+ (f : X ā¶ Y) : (tensorLeftHomEquiv _ _ _ _) (f ā· _ ā« Īµ_ _ _) = (įf) ā« (Ļ_ _).inv := by
dsimp [tensorLeftHomEquiv, leftAdjointMate]
simp
-#align category_theory.tensor_left_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorLeftHomEquiv_tensor_id_comp_evaluation
+#align category_theory.tensor_left_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorLeftHomEquiv_whiskerRight_comp_evaluation
@[simp]
-theorem tensorRightHomEquiv_id_tensor_comp_evaluation {X Y : C} [HasRightDual X] [HasRightDual Y]
- (f : X ā¶ Y) : (tensorRightHomEquiv _ _ _ _) ((š (Yį) ā f) ā« Īµ_ _ _) = fį ā« (Ī»_ _).inv := by
+theorem tensorRightHomEquiv_whiskerLeft_comp_evaluation {X Y : C} [HasRightDual X] [HasRightDual Y]
+ (f : X ā¶ Y) : (tensorRightHomEquiv _ _ _ _) ((Yį) ā f ā« Īµ_ _ _) = fį ā« (Ī»_ _).inv := by
dsimp [tensorRightHomEquiv, rightAdjointMate]
simp
-#align category_theory.tensor_right_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorRightHomEquiv_id_tensor_comp_evaluation
+#align category_theory.tensor_right_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorRightHomEquiv_whiskerLeft_comp_evaluation
@[simp]
-theorem tensorRightHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasRightDual X] (f : Y ā¶ Xį) :
- (tensorRightHomEquiv _ _ _ _) ((f ā š X) ā« Īµ_ X (Xį)) = f ā« (Ī»_ _).inv := by
- dsimp [tensorRightHomEquiv]
- rw [comp_tensor_id]
- slice_lhs 3 4 => rw [ā associator_inv_naturality]
- slice_lhs 2 3 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
- slice_lhs 3 5 => rw [coevaluation_evaluation]
- simp [tensorHom_id]
-#align category_theory.tensor_right_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorRightHomEquiv_tensor_id_comp_evaluation
+theorem tensorRightHomEquiv_whiskerRight_comp_evaluation {X Y : C} [HasRightDual X] (f : Y ā¶ Xį) :
+ (tensorRightHomEquiv _ _ _ _) (f ā· X ā« Īµ_ X (Xį)) = f ā« (Ī»_ _).inv :=
+ calc
+ _ = š _ āā« (Y ā Ī·_ X Xį ā« f ā· (X ā Xį)) āā« Īµ_ X Xį ā· Xį := by
+ dsimp [tensorRightHomEquiv]; coherence
+ _ = f āā« (Xį ā Ī·_ X Xį āā« Īµ_ X Xį ā· Xį) := by
+ rw [whisker_exchange]; coherence
+ _ = _ := by
+ rw [coevaluation_evaluation'']; coherence
+#align category_theory.tensor_right_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorRightHomEquiv_whiskerRight_comp_evaluation
-- Next four lemmas passing `fį` or `įf` through (co)evaluations.
+@[reassoc]
theorem coevaluation_comp_rightAdjointMate {X Y : C} [HasRightDual X] [HasRightDual Y] (f : X ā¶ Y) :
- Ī·_ Y (Yį) ā« (š _ ā fį) = Ī·_ _ _ ā« (f ā š _) := by
+ Ī·_ Y (Yį) ā« _ ā (fį) = Ī·_ _ _ ā« f ā· _ := by
apply_fun (tensorLeftHomEquiv _ Y (Yį) _).symm
simp
#align category_theory.coevaluation_comp_right_adjoint_mate CategoryTheory.coevaluation_comp_rightAdjointMate
+@[reassoc]
theorem leftAdjointMate_comp_evaluation {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) :
- (š X ā įf) ā« Īµ_ _ _ = (f ā š _) ā« Īµ_ _ _ := by
+ X ā (įf) ā« Īµ_ _ _ = f ā· _ ā« Īµ_ _ _ := by
apply_fun tensorLeftHomEquiv _ (įX) X _
simp
#align category_theory.left_adjoint_mate_comp_evaluation CategoryTheory.leftAdjointMate_comp_evaluation
+@[reassoc]
theorem coevaluation_comp_leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) :
- Ī·_ (įY) Y ā« ((įf) ā š Y) = Ī·_ (įX) X ā« (š (įX) ā f) := by
+ Ī·_ (įY) Y ā« (įf) ā· Y = Ī·_ (įX) X ā« (įX) ā f := by
apply_fun (tensorRightHomEquiv _ (įY) Y _).symm
simp
#align category_theory.coevaluation_comp_left_adjoint_mate CategoryTheory.coevaluation_comp_leftAdjointMate
+@[reassoc]
theorem rightAdjointMate_comp_evaluation {X Y : C} [HasRightDual X] [HasRightDual Y] (f : X ā¶ Y) :
- (fį ā š X) ā« Īµ_ X (Xį) = (š (Yį) ā f) ā« Īµ_ Y (Yį) := by
+ (fį ā· X) ā« Īµ_ X (Xį) = ((Yį) ā f) ā« Īµ_ Y (Yį) := by
apply_fun tensorRightHomEquiv _ X (Xį) _
simp
#align category_theory.right_adjoint_mate_comp_evaluation CategoryTheory.rightAdjointMate_comp_evaluation
/-- Transport an exact pairing across an isomorphism in the first argument. -/
def exactPairingCongrLeft {X X' Y : C} [ExactPairing X' Y] (i : X ā
X') : ExactPairing X Y where
- evaluation' := (š Y ā i.hom) ā« Īµ_ _ _
- coevaluation' := Ī·_ _ _ ā« (i.inv ā š Y)
- evaluation_coevaluation' := by
- rw [id_tensor_comp, comp_tensor_id]
- slice_lhs 2 3 => rw [associator_naturality]
- slice_lhs 3 4 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
- slice_lhs 4 5 => rw [tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
- slice_lhs 2 3 => rw [ā associator_naturality]
- slice_lhs 1 2 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
- slice_lhs 2 4 => rw [evaluation_coevaluation]
- slice_lhs 1 2 => rw [leftUnitor_naturality]
- slice_lhs 3 4 => rw [ā rightUnitor_inv_naturality]
- simp
+ evaluation' := Y ā i.hom ā« Īµ_ _ _
+ coevaluation' := Ī·_ _ _ ā« i.inv ā· Y
+ evaluation_coevaluation' :=
+ calc
+ _ = Ī·_ X' Y ā· X āā« (i.inv ā· (Y ā X) ā« X ā (Y ā i.hom)) āā« X ā Īµ_ X' Y := by
+ coherence
+ _ = š _ āā« (Ī·_ X' Y ā· X ā« (X' ā Y) ā i.hom) āā«
+ (i.inv ā· (Y ā X') ā« X ā Īµ_ X' Y) āā« š _ := by
+ rw [ā whisker_exchange]; coherence
+ _ = š _ āā« i.hom āā« (Ī·_ X' Y ā· X' āā« X' ā Īµ_ X' Y) āā« i.inv āā« š _ := by
+ rw [ā whisker_exchange, ā whisker_exchange]; coherence
+ _ = š _ āā« (i.hom ā« i.inv) āā« š _ := by
+ rw [evaluation_coevaluation'']; coherence
+ _ = (Ī»_ X).hom ā« (Ļ_ X).inv := by
+ rw [Iso.hom_inv_id]
+ -- coherence failed
+ simp [Mathlib.Tactic.Coherence.monoidalComp]
coevaluation_evaluation' := by
- rw [id_tensor_comp, comp_tensor_id]
- simp only [Iso.inv_hom_id_assoc, associator_conjugation, Category.assoc]
- slice_lhs 2 3 =>
- rw [ā tensor_comp]
- simp
- simp
+ calc
+ _ = Y ā Ī·_ X' Y ā« Y ā (i.inv ā« i.hom) ā· Y āā« Īµ_ X' Y ā· Y := by
+ coherence
+ _ = Y ā Ī·_ X' Y āā« Īµ_ X' Y ā· Y := by
+ rw [Iso.inv_hom_id]; coherence
+ _ = _ := by
+ rw [coevaluation_evaluation'']
+ -- coherence failed
+ simp [Mathlib.Tactic.Coherence.monoidalComp]
#align category_theory.exact_pairing_congr_left CategoryTheory.exactPairingCongrLeft
/-- Transport an exact pairing across an isomorphism in the second argument. -/
def exactPairingCongrRight {X Y Y' : C} [ExactPairing X Y'] (i : Y ā
Y') : ExactPairing X Y where
- evaluation' := (i.hom ā š X) ā« Īµ_ _ _
- coevaluation' := Ī·_ _ _ ā« (š X ā i.inv)
+ evaluation' := i.hom ā· X ā« Īµ_ _ _
+ coevaluation' := Ī·_ _ _ ā« X ā i.inv
evaluation_coevaluation' := by
- rw [id_tensor_comp, comp_tensor_id]
- simp only [Iso.inv_hom_id_assoc, associator_conjugation, Category.assoc]
- slice_lhs 3 4 =>
- rw [ā tensor_comp]
- simp
- simp
- coevaluation_evaluation' := by
- rw [id_tensor_comp, comp_tensor_id]
- slice_lhs 3 4 => rw [ā associator_inv_naturality]
- slice_lhs 2 3 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
- slice_lhs 1 2 => rw [id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
- slice_lhs 3 4 => rw [associator_inv_naturality]
- slice_lhs 4 5 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
- slice_lhs 2 4 => rw [coevaluation_evaluation]
- slice_lhs 1 2 => rw [rightUnitor_naturality]
- slice_lhs 3 4 => rw [ā leftUnitor_inv_naturality]
- simp
+ calc
+ _ = Ī·_ X Y' ā· X āā« X ā (i.inv ā« i.hom) ā· X ā« X ā Īµ_ X Y' := by
+ coherence
+ _ = Ī·_ X Y' ā· X āā« X ā Īµ_ X Y' := by
+ rw [Iso.inv_hom_id]; coherence
+ _ = _ := by
+ rw [evaluation_coevaluation'']
+ -- coherence failed
+ simp [Mathlib.Tactic.Coherence.monoidalComp]
+ coevaluation_evaluation' :=
+ calc
+ _ = Y ā Ī·_ X Y' āā« (Y ā (X ā i.inv) ā« i.hom ā· (X ā Y)) āā« Īµ_ X Y' ā· Y := by
+ coherence
+ _ = š _ āā« (Y ā Ī·_ X Y' ā« i.hom ā· (X ā Y')) āā«
+ ((Y' ā X) ā i.inv ā« Īµ_ X Y' ā· Y) āā« š _ := by
+ rw [whisker_exchange]; coherence
+ _ = š _ āā« i.hom āā« (Y' ā Ī·_ X Y' āā« Īµ_ X Y' ā· Y') āā« i.inv āā« š _ := by
+ rw [whisker_exchange, whisker_exchange]; coherence
+ _ = š _ āā« (i.hom ā« i.inv) āā« š _ := by
+ rw [coevaluation_evaluation'']; coherence
+ _ = (Ļ_ Y).hom ā« (Ī»_ Y).inv := by
+ rw [Iso.hom_inv_id]
+ -- coherence failed
+ simp [Mathlib.Tactic.Coherence.monoidalComp]
#align category_theory.exact_pairing_congr_right CategoryTheory.exactPairingCongrRight
/-- Transport an exact pairing across isomorphisms. -/
Extracted from #6307. The main reason why #6307 is so large is that many tensoring of identity morphisms that appear in mathlib should be replaced with whiskerings. This PR will leave this issue and deal with other parts. That is, we do not set id_tensorHom
and tensorHom_id
as simple lemmas at this moment, We can set them as simp lemmas locally to enable simple normal forms.
@@ -479,7 +479,7 @@ theorem tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor {Y Y' Z : C} [ExactP
slice_lhs 2 3 => rw [associator_inv_naturality]
slice_lhs 3 4 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
slice_lhs 1 3 => rw [coevaluation_evaluation]
- simp
+ simp [id_tensorHom]
#align category_theory.tensor_left_hom_equiv_symm_coevaluation_comp_id_tensor CategoryTheory.tensorLeftHomEquiv_symm_coevaluation_comp_id_tensor
@[simp]
@@ -506,7 +506,7 @@ theorem tensorRightHomEquiv_symm_coevaluation_comp_tensor_id {Y Y' Z : C} [Exact
slice_lhs 2 3 => rw [associator_naturality]
slice_lhs 3 4 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
slice_lhs 1 3 => rw [evaluation_coevaluation]
- simp
+ simp [tensorHom_id]
#align category_theory.tensor_right_hom_equiv_symm_coevaluation_comp_tensor_id CategoryTheory.tensorRightHomEquiv_symm_coevaluation_comp_tensor_id
@[simp]
@@ -517,7 +517,7 @@ theorem tensorLeftHomEquiv_id_tensor_comp_evaluation {Y Z : C} [HasLeftDual Z] (
slice_lhs 3 4 => rw [ā associator_naturality]
slice_lhs 2 3 => rw [tensor_id, tensor_id_comp_id_tensor, ā id_tensor_comp_tensor_id]
slice_lhs 3 5 => rw [evaluation_coevaluation]
- simp
+ simp [id_tensorHom]
#align category_theory.tensor_left_hom_equiv_id_tensor_comp_evaluation CategoryTheory.tensorLeftHomEquiv_id_tensor_comp_evaluation
@[simp]
@@ -542,7 +542,7 @@ theorem tensorRightHomEquiv_tensor_id_comp_evaluation {X Y : C} [HasRightDual X]
slice_lhs 3 4 => rw [ā associator_inv_naturality]
slice_lhs 2 3 => rw [tensor_id, id_tensor_comp_tensor_id, ā tensor_id_comp_id_tensor]
slice_lhs 3 5 => rw [coevaluation_evaluation]
- simp
+ simp [tensorHom_id]
#align category_theory.tensor_right_hom_equiv_tensor_id_comp_evaluation CategoryTheory.tensorRightHomEquiv_tensor_id_comp_evaluation
-- Next four lemmas passing `fį` or `įf` through (co)evaluations.
@[inherit_doc]
on notations (#9942)
Make all the notations that unambiguously should inherit the docstring of their definition actually inherit it.
Also write a few docstrings by hand. I only wrote the ones I was competent to write and which I was sure of. Some docstrings come from mathlib3 as they were lost during the early port.
This PR is only intended as a first pass There are many more docstrings to add.
@@ -73,7 +73,13 @@ variable {C : Type uā} [Category.{vā} C] [MonoidalCategory C]
/-- An exact pairing is a pair of objects `X Y : C` which admit
a coevaluation and evaluation morphism which fulfill two triangle equalities. -/
class ExactPairing (X Y : C) where
+ /-- Coevaluation of an exact pairing.
+
+ Do not use directly. Use `ExactPairing.coevaluation` instead. -/
coevaluation' : š_ C ā¶ X ā Y
+ /-- Evaluation of an exact pairing.
+
+ Do not use directly. Use `ExactPairing.evaluation` instead. -/
evaluation' : Y ā X ā¶ š_ C
coevaluation_evaluation' :
(š Y ā coevaluation') ā« (Ī±_ _ _ _).inv ā« (evaluation' ā š Y) = (Ļ_ Y).hom ā« (Ī»_ Y).inv := by
@@ -93,11 +99,14 @@ namespace ExactPairing
variable (X Y : C)
variable [ExactPairing X Y]
+/-- Coevaluation of an exact pairing. -/
def coevaluation : š_ C ā¶ X ā Y := @coevaluation' _ _ _ X Y _
+
+/-- Evaluation of an exact pairing. -/
def evaluation : Y ā X ā¶ š_ C := @evaluation' _ _ _ X Y _
-notation "Ī·_" => ExactPairing.coevaluation
-notation "Īµ_" => ExactPairing.evaluation
+@[inherit_doc] notation "Ī·_" => ExactPairing.coevaluation
+@[inherit_doc] notation "Īµ_" => ExactPairing.evaluation
lemma coevaluation_evaluation :
(š Y ā Ī·_ _ _) ā« (Ī±_ _ _ _).inv ā« (Īµ_ X _ ā š Y) = (Ļ_ Y).hom ā« (Ī»_ Y).inv :=
@@ -121,12 +130,14 @@ instance exactPairingUnit : ExactPairing (š_ C) (š_ C) where
/-- A class of objects which have a right dual. -/
class HasRightDual (X : C) where
+ /-- The right dual of the object `X`. -/
rightDual : C
[exact : ExactPairing X rightDual]
#align category_theory.has_right_dual CategoryTheory.HasRightDual
/-- A class of objects which have a left dual. -/
class HasLeftDual (Y : C) where
+ /-- The left dual of the object `X`. -/
leftDual : C
[exact : ExactPairing leftDual Y]
#align category_theory.has_left_dual CategoryTheory.HasLeftDual
@@ -136,8 +147,8 @@ attribute [instance] HasLeftDual.exact
open ExactPairing HasRightDual HasLeftDual MonoidalCategory
-prefix:1024 "į" => leftDual
-postfix:1024 "į" => rightDual
+@[inherit_doc] prefix:1024 "į" => leftDual
+@[inherit_doc] postfix:1024 "į" => rightDual
instance hasRightDualUnit : HasRightDual (š_ C) where
rightDual := š_ C
@@ -175,8 +186,8 @@ def leftAdjointMate {X Y : C} [HasLeftDual X] [HasLeftDual Y] (f : X ā¶ Y) :
(Ī»_ _).inv ā« (Ī·_ (įX) X ā š _) ā« ((š _ ā f) ā š _) ā« (Ī±_ _ _ _).hom ā« (š _ ā Īµ_ _ _) ā« (Ļ_ _).hom
#align category_theory.left_adjoint_mate CategoryTheory.leftAdjointMate
-notation f "į" => rightAdjointMate f
-notation "į" f => leftAdjointMate f
+@[inherit_doc] notation f "į" => rightAdjointMate f
+@[inherit_doc] notation "į" f => leftAdjointMate f
@[simp]
theorem rightAdjointMate_id {X : C} [HasRightDual X] : (š X)į = š (Xį) := by
@@ -429,8 +429,8 @@ structure shouldn't come from `has_left_dual` (e.g. in the category `FinVect k`,
convenient to define the internal hom as `Y āā[k] X` rather than `įY ā X` even though these are
naturally isomorphic).
-/
-def closedOfHasLeftDual (Y : C) [HasLeftDual Y] : Closed Y
- where isAdj := āØ_, tensorLeftAdjunction (įY) Yā©
+def closedOfHasLeftDual (Y : C) [HasLeftDual Y] : Closed Y where
+ isAdj := āØ_, tensorLeftAdjunction (įY) Yā©
#align category_theory.closed_of_has_left_dual CategoryTheory.closedOfHasLeftDual
/-- `tensorLeftHomEquiv` commutes with tensoring on the right -/
Many proofs use the "stream of consciousness" style from Lean 3, rather than have ... :=
or suffices ... from/by
.
This PR updates a fraction of these to the preferred Lean 4 style.
I think a good goal would be to delete the "deferred" versions of have
, suffices
, and let
at the bottom of Mathlib.Tactic.Have
(Anyone who would like to contribute more cleanup is welcome to push directly to this branch.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -310,8 +310,7 @@ def tensorLeftHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (Y' ā X ā¶ Z) ā
have c :
(Ī±_ Y' (Y ā Y') X).hom ā«
(š Y' ā (Ī±_ Y Y' X).hom) ā« (Ī±_ Y' Y (Y' ā X)).inv ā« (Ī±_ (Y' ā Y) Y' X).inv =
- (Ī±_ _ _ _).inv ā š _
- pure_coherence
+ (Ī±_ _ _ _).inv ā š _ := by pure_coherence
slice_lhs 4 7 => rw [c]
slice_lhs 3 5 => rw [ā comp_tensor_id, ā comp_tensor_id, coevaluation_evaluation]
simp only [leftUnitor_conjugation]
@@ -325,8 +324,7 @@ def tensorLeftHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (Y' ā X ā¶ Z) ā
have c :
(Ī±_ (Y ā Y') Y Z).hom ā«
(Ī±_ Y Y' (Y ā Z)).hom ā« (š Y ā (Ī±_ Y' Y Z).inv) ā« (Ī±_ Y (Y' ā Y) Z).inv =
- (Ī±_ _ _ _).hom ā š Z
- pure_coherence
+ (Ī±_ _ _ _).hom ā š Z := by pure_coherence
slice_lhs 5 8 => rw [c]
slice_lhs 4 6 => rw [ā comp_tensor_id, ā comp_tensor_id, evaluation_coevaluation]
simp only [leftUnitor_conjugation]
@@ -349,8 +347,7 @@ def tensorRightHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (X ā Y ā¶ Z) ā
have c :
(Ī±_ X (Y ā Y') Y).inv ā«
((Ī±_ X Y Y').inv ā š Y) ā« (Ī±_ (X ā Y) Y' Y).hom ā« (Ī±_ X Y (Y' ā Y)).hom =
- š _ ā (Ī±_ _ _ _).hom
- pure_coherence
+ š _ ā (Ī±_ _ _ _).hom := by pure_coherence
slice_lhs 4 7 => rw [c]
slice_lhs 3 5 => rw [ā id_tensor_comp, ā id_tensor_comp, evaluation_coevaluation]
simp only [rightUnitor_conjugation]
@@ -364,8 +361,7 @@ def tensorRightHomEquiv (X Y Y' Z : C) [ExactPairing Y Y'] : (X ā Y ā¶ Z) ā
have c :
(Ī±_ Z Y' (Y ā Y')).inv ā«
(Ī±_ (Z ā Y') Y Y').inv ā« ((Ī±_ Z Y' Y).hom ā š Y') ā« (Ī±_ Z (Y' ā Y) Y').hom =
- š _ ā (Ī±_ _ _ _).inv
- pure_coherence
+ š _ ā (Ī±_ _ _ _).inv := by pure_coherence
slice_lhs 5 8 => rw [c]
slice_lhs 4 6 => rw [ā id_tensor_comp, ā id_tensor_comp, coevaluation_evaluation]
simp only [rightUnitor_conjugation]
@@ -125,7 +125,7 @@ class HasRightDual (X : C) where
[exact : ExactPairing X rightDual]
#align category_theory.has_right_dual CategoryTheory.HasRightDual
-/-- A class of objects with have a left dual. -/
+/-- A class of objects which have a left dual. -/
class HasLeftDual (Y : C) where
leftDual : C
[exact : ExactPairing leftDual Y]
@@ -2,16 +2,13 @@
Copyright (c) 2021 Jakob von Raumer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.monoidal.rigid.basic
-! leanprover-community/mathlib commit 3d7987cda72abc473c7cdbbb075170e9ac620042
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Monoidal.CoherenceLemmas
import Mathlib.CategoryTheory.Closed.Monoidal
import Mathlib.Tactic.ApplyFun
+#align_import category_theory.monoidal.rigid.basic from "leanprover-community/mathlib"@"3d7987cda72abc473c7cdbbb075170e9ac620042"
+
/-!
# Rigid (autonomous) monoidal categories
@@ -63,7 +63,7 @@ rigid category, monoidal category
-/
-open CategoryTheory
+open CategoryTheory MonoidalCategory
universe v vā vā vā u uā uā uā