category_theory.monoidal.rigid.basic āŸ· Mathlib.CategoryTheory.Monoidal.Rigid.Basic

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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 -/
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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 /-
Diff
@@ -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
 
Diff
@@ -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 -/
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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

Changes in mathlib4

mathlib3
mathlib4
doc: replace mathlib3 names in doc comments (#11952)

A few miscellaneous directories: RingTheory, SetTheory, Combinatorics and CategoryTheory.

Co-authored-by: Scott Morrison <scott@tqft.net>

Diff
@@ -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
chore(*): remove empty lines between variable statements (#11418)

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)
Diff
@@ -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]
 
chore(CategoryTheory/MonoidalCategory): split the monoidal composition (#11149)

I realized that the monoid composition āŠ—ā‰« can be defined without depending on the free monoid category, and that it is still useful.

Diff
@@ -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. -/
feat(CategoryTheory/Monoidal): replace šŸ™ X āŠ— f with X ā— f (#10912)

We set id_tensorHom and tensorHom_id as simp lemmas. Partially extracted from #6307.

Diff
@@ -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') :
feat(CategoryTheory/Monoidal): redefine tensorLeft by using whiskering (#10898)

Extracted from #6307

Diff
@@ -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') :
refactor(CategoryTheory/Monoidal/Rigid): use monoidalComp in the proofs (#10326)

Similar to #10078

Diff
@@ -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. -/
feat(CategoryTheory/Monoidal): partially setting simp lemmas (#10061)

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.

Diff
@@ -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.
doc: @[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.

Diff
@@ -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
style: fix wrapping of where (#7149)
Diff
@@ -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 -/
chore: avoid lean3 style have/suffices (#6964)

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>

Diff
@@ -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]
chore: fix grammar mistakes (#6121)
Diff
@@ -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]
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
 
feat: port CategoryTheory.Bicategory.CoherenceTactic (#4610)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -63,7 +63,7 @@ rigid category, monoidal category
 -/
 
 
-open CategoryTheory
+open CategoryTheory MonoidalCategory
 
 universe v vā‚ vā‚‚ vā‚ƒ u uā‚ uā‚‚ uā‚ƒ
 
feat: port CategoryTheory.Monoidal.Rigid.Basic (#4563)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Dependencies 1 + 113

114 files ported (99.1%)
40295 lines ported (99.9%)
Show graph

The unported dependencies are