category_theory.monoidal.opposite
⟷
Mathlib.CategoryTheory.Monoidal.Opposite
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import CategoryTheory.Monoidal.Coherence
+import Tactic.CategoryTheory.Coherence
#align_import category_theory.monoidal.opposite from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -53,28 +53,28 @@ def unmop (X : Cᴹᵒᵖ) : C :=
#align category_theory.monoidal_opposite.unmop CategoryTheory.MonoidalOpposite.unmop
-/
-#print CategoryTheory.MonoidalOpposite.op_injective /-
-theorem op_injective : Function.Injective (mop : C → Cᴹᵒᵖ) := fun _ _ => id
-#align category_theory.monoidal_opposite.op_injective CategoryTheory.MonoidalOpposite.op_injective
+#print CategoryTheory.MonoidalOpposite.mop_injective /-
+theorem mop_injective : Function.Injective (mop : C → Cᴹᵒᵖ) := fun _ _ => id
+#align category_theory.monoidal_opposite.op_injective CategoryTheory.MonoidalOpposite.mop_injective
-/
-#print CategoryTheory.MonoidalOpposite.unop_injective /-
-theorem unop_injective : Function.Injective (unmop : Cᴹᵒᵖ → C) := fun _ _ => id
-#align category_theory.monoidal_opposite.unop_injective CategoryTheory.MonoidalOpposite.unop_injective
+#print CategoryTheory.MonoidalOpposite.unmop_injective /-
+theorem unmop_injective : Function.Injective (unmop : Cᴹᵒᵖ → C) := fun _ _ => id
+#align category_theory.monoidal_opposite.unop_injective CategoryTheory.MonoidalOpposite.unmop_injective
-/
-#print CategoryTheory.MonoidalOpposite.op_inj_iff /-
+#print CategoryTheory.MonoidalOpposite.mop_inj_iff /-
@[simp]
-theorem op_inj_iff (x y : C) : mop x = mop y ↔ x = y :=
+theorem mop_inj_iff (x y : C) : mop x = mop y ↔ x = y :=
Iff.rfl
-#align category_theory.monoidal_opposite.op_inj_iff CategoryTheory.MonoidalOpposite.op_inj_iff
+#align category_theory.monoidal_opposite.op_inj_iff CategoryTheory.MonoidalOpposite.mop_inj_iff
-/
-#print CategoryTheory.MonoidalOpposite.unop_inj_iff /-
+#print CategoryTheory.MonoidalOpposite.unmop_inj_iff /-
@[simp]
-theorem unop_inj_iff (x y : Cᴹᵒᵖ) : unmop x = unmop y ↔ x = y :=
+theorem unmop_inj_iff (x y : Cᴹᵒᵖ) : unmop x = unmop y ↔ x = y :=
Iff.rfl
-#align category_theory.monoidal_opposite.unop_inj_iff CategoryTheory.MonoidalOpposite.unop_inj_iff
+#align category_theory.monoidal_opposite.unop_inj_iff CategoryTheory.MonoidalOpposite.unmop_inj_iff
-/
#print CategoryTheory.MonoidalOpposite.mop_unmop /-
@@ -126,31 +126,32 @@ def Quiver.Hom.unmop {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) : unmop X ⟶ unmop Y :=
namespace CategoryTheory
-#print CategoryTheory.mop_inj /-
-theorem mop_inj {X Y : C} : Function.Injective (Quiver.Hom.mop : (X ⟶ Y) → (mop X ⟶ mop Y)) :=
- fun _ _ H => congr_arg Quiver.Hom.unmop H
-#align category_theory.mop_inj CategoryTheory.mop_inj
+#print Quiver.Hom.mop_inj /-
+theorem Quiver.Hom.mop_inj {X Y : C} :
+ Function.Injective (Quiver.Hom.mop : (X ⟶ Y) → (mop X ⟶ mop Y)) := fun _ _ H =>
+ congr_arg Quiver.Hom.unmop H
+#align category_theory.mop_inj Quiver.Hom.mop_inj
-/
-#print CategoryTheory.unmop_inj /-
-theorem unmop_inj {X Y : Cᴹᵒᵖ} :
+#print Quiver.Hom.unmop_inj /-
+theorem Quiver.Hom.unmop_inj {X Y : Cᴹᵒᵖ} :
Function.Injective (Quiver.Hom.unmop : (X ⟶ Y) → (unmop X ⟶ unmop Y)) := fun _ _ H =>
congr_arg Quiver.Hom.mop H
-#align category_theory.unmop_inj CategoryTheory.unmop_inj
+#align category_theory.unmop_inj Quiver.Hom.unmop_inj
-/
-#print CategoryTheory.unmop_mop /-
+#print Quiver.Hom.unmop_mop /-
@[simp]
-theorem unmop_mop {X Y : C} {f : X ⟶ Y} : f.mop.unmop = f :=
+theorem Quiver.Hom.unmop_mop {X Y : C} {f : X ⟶ Y} : f.mop.unmop = f :=
rfl
-#align category_theory.unmop_mop CategoryTheory.unmop_mop
+#align category_theory.unmop_mop Quiver.Hom.unmop_mop
-/
-#print CategoryTheory.mop_unmop /-
+#print Quiver.Hom.mop_unmop /-
@[simp]
-theorem mop_unmop {X Y : Cᴹᵒᵖ} {f : X ⟶ Y} : f.unmop.mop = f :=
+theorem Quiver.Hom.mop_unmop {X Y : Cᴹᵒᵖ} {f : X ⟶ Y} : f.unmop.mop = f :=
rfl
-#align category_theory.mop_unmop CategoryTheory.mop_unmop
+#align category_theory.mop_unmop Quiver.Hom.mop_unmop
-/
#print CategoryTheory.mop_comp /-
@@ -205,8 +206,8 @@ variable {X Y : C}
def mop (f : X ≅ Y) : mop X ≅ mop Y where
Hom := f.Hom.mop
inv := f.inv.mop
- hom_inv_id' := unmop_inj f.hom_inv_id
- inv_hom_id' := unmop_inj f.inv_hom_id
+ hom_inv_id' := Quiver.Hom.unmop_inj f.hom_inv_id
+ inv_hom_id' := Quiver.Hom.unmop_inj f.inv_hom_id
#align category_theory.iso.mop CategoryTheory.Iso.mop
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import Mathbin.CategoryTheory.Monoidal.Coherence
+import CategoryTheory.Monoidal.Coherence
#align_import category_theory.monoidal.opposite from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.monoidal.opposite
-! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Monoidal.Coherence
+#align_import category_theory.monoidal.opposite from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
+
/-!
# Monoidal opposites
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -38,7 +38,6 @@ def MonoidalOpposite (C : Type u₁) :=
namespace MonoidalOpposite
--- mathport name: «expr ᴹᵒᵖ»
notation:max C "ᴹᵒᵖ" => MonoidalOpposite C
#print CategoryTheory.MonoidalOpposite.mop /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
! This file was ported from Lean 3 source module category_theory.monoidal.opposite
-! leanprover-community/mathlib commit 14b69e9f3c16630440a2cbd46f1ddad0d561dee7
+! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.CategoryTheory.Monoidal.Coherence
/-!
# Monoidal opposites
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We write `Cᵐᵒᵖ` for the monoidal opposite of a monoidal category `C`.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -25,61 +25,81 @@ namespace CategoryTheory
open CategoryTheory.MonoidalCategory
+#print CategoryTheory.MonoidalOpposite /-
/-- A type synonym for the monoidal opposite. Use the notation `Cᴹᵒᵖ`. -/
@[nolint has_nonempty_instance]
def MonoidalOpposite (C : Type u₁) :=
C
#align category_theory.monoidal_opposite CategoryTheory.MonoidalOpposite
+-/
namespace MonoidalOpposite
-- mathport name: «expr ᴹᵒᵖ»
notation:max C "ᴹᵒᵖ" => MonoidalOpposite C
+#print CategoryTheory.MonoidalOpposite.mop /-
/-- Think of an object of `C` as an object of `Cᴹᵒᵖ`. -/
@[pp_nodot]
def mop (X : C) : Cᴹᵒᵖ :=
X
#align category_theory.monoidal_opposite.mop CategoryTheory.MonoidalOpposite.mop
+-/
+#print CategoryTheory.MonoidalOpposite.unmop /-
/-- Think of an object of `Cᴹᵒᵖ` as an object of `C`. -/
@[pp_nodot]
def unmop (X : Cᴹᵒᵖ) : C :=
X
#align category_theory.monoidal_opposite.unmop CategoryTheory.MonoidalOpposite.unmop
+-/
+#print CategoryTheory.MonoidalOpposite.op_injective /-
theorem op_injective : Function.Injective (mop : C → Cᴹᵒᵖ) := fun _ _ => id
#align category_theory.monoidal_opposite.op_injective CategoryTheory.MonoidalOpposite.op_injective
+-/
+#print CategoryTheory.MonoidalOpposite.unop_injective /-
theorem unop_injective : Function.Injective (unmop : Cᴹᵒᵖ → C) := fun _ _ => id
#align category_theory.monoidal_opposite.unop_injective CategoryTheory.MonoidalOpposite.unop_injective
+-/
+#print CategoryTheory.MonoidalOpposite.op_inj_iff /-
@[simp]
theorem op_inj_iff (x y : C) : mop x = mop y ↔ x = y :=
Iff.rfl
#align category_theory.monoidal_opposite.op_inj_iff CategoryTheory.MonoidalOpposite.op_inj_iff
+-/
+#print CategoryTheory.MonoidalOpposite.unop_inj_iff /-
@[simp]
theorem unop_inj_iff (x y : Cᴹᵒᵖ) : unmop x = unmop y ↔ x = y :=
Iff.rfl
#align category_theory.monoidal_opposite.unop_inj_iff CategoryTheory.MonoidalOpposite.unop_inj_iff
+-/
+#print CategoryTheory.MonoidalOpposite.mop_unmop /-
@[simp]
theorem mop_unmop (X : Cᴹᵒᵖ) : mop (unmop X) = X :=
rfl
#align category_theory.monoidal_opposite.mop_unmop CategoryTheory.MonoidalOpposite.mop_unmop
+-/
+#print CategoryTheory.MonoidalOpposite.unmop_mop /-
@[simp]
theorem unmop_mop (X : C) : unmop (mop X) = X :=
rfl
#align category_theory.monoidal_opposite.unmop_mop CategoryTheory.MonoidalOpposite.unmop_mop
+-/
+#print CategoryTheory.MonoidalOpposite.monoidalOppositeCategory /-
instance monoidalOppositeCategory [I : Category.{v₁} C] : Category Cᴹᵒᵖ
where
Hom X Y := unmop X ⟶ unmop Y
id X := 𝟙 (unmop X)
comp X Y Z f g := f ≫ g
#align category_theory.monoidal_opposite.monoidal_opposite_category CategoryTheory.MonoidalOpposite.monoidalOppositeCategory
+-/
end MonoidalOpposite
@@ -91,71 +111,96 @@ open CategoryTheory.MonoidalOpposite
variable [Category.{v₁} C]
+#print Quiver.Hom.mop /-
/-- The monoidal opposite of a morphism `f : X ⟶ Y` is just `f`, thought of as `mop X ⟶ mop Y`. -/
def Quiver.Hom.mop {X Y : C} (f : X ⟶ Y) : @Quiver.Hom Cᴹᵒᵖ _ (mop X) (mop Y) :=
f
#align quiver.hom.mop Quiver.Hom.mop
+-/
+#print Quiver.Hom.unmop /-
/-- We can think of a morphism `f : mop X ⟶ mop Y` as a morphism `X ⟶ Y`. -/
def Quiver.Hom.unmop {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) : unmop X ⟶ unmop Y :=
f
#align quiver.hom.unmop Quiver.Hom.unmop
+-/
namespace CategoryTheory
+#print CategoryTheory.mop_inj /-
theorem mop_inj {X Y : C} : Function.Injective (Quiver.Hom.mop : (X ⟶ Y) → (mop X ⟶ mop Y)) :=
fun _ _ H => congr_arg Quiver.Hom.unmop H
#align category_theory.mop_inj CategoryTheory.mop_inj
+-/
+#print CategoryTheory.unmop_inj /-
theorem unmop_inj {X Y : Cᴹᵒᵖ} :
Function.Injective (Quiver.Hom.unmop : (X ⟶ Y) → (unmop X ⟶ unmop Y)) := fun _ _ H =>
congr_arg Quiver.Hom.mop H
#align category_theory.unmop_inj CategoryTheory.unmop_inj
+-/
+#print CategoryTheory.unmop_mop /-
@[simp]
theorem unmop_mop {X Y : C} {f : X ⟶ Y} : f.mop.unmop = f :=
rfl
#align category_theory.unmop_mop CategoryTheory.unmop_mop
+-/
+#print CategoryTheory.mop_unmop /-
@[simp]
theorem mop_unmop {X Y : Cᴹᵒᵖ} {f : X ⟶ Y} : f.unmop.mop = f :=
rfl
#align category_theory.mop_unmop CategoryTheory.mop_unmop
+-/
+#print CategoryTheory.mop_comp /-
@[simp]
theorem mop_comp {X Y Z : C} {f : X ⟶ Y} {g : Y ⟶ Z} : (f ≫ g).mop = f.mop ≫ g.mop :=
rfl
#align category_theory.mop_comp CategoryTheory.mop_comp
+-/
+#print CategoryTheory.mop_id /-
@[simp]
theorem mop_id {X : C} : (𝟙 X).mop = 𝟙 (mop X) :=
rfl
#align category_theory.mop_id CategoryTheory.mop_id
+-/
+#print CategoryTheory.unmop_comp /-
@[simp]
theorem unmop_comp {X Y Z : Cᴹᵒᵖ} {f : X ⟶ Y} {g : Y ⟶ Z} : (f ≫ g).unmop = f.unmop ≫ g.unmop :=
rfl
#align category_theory.unmop_comp CategoryTheory.unmop_comp
+-/
+#print CategoryTheory.unmop_id /-
@[simp]
theorem unmop_id {X : Cᴹᵒᵖ} : (𝟙 X).unmop = 𝟙 (unmop X) :=
rfl
#align category_theory.unmop_id CategoryTheory.unmop_id
+-/
+#print CategoryTheory.unmop_id_mop /-
@[simp]
theorem unmop_id_mop {X : C} : (𝟙 (mop X)).unmop = 𝟙 X :=
rfl
#align category_theory.unmop_id_mop CategoryTheory.unmop_id_mop
+-/
+#print CategoryTheory.mop_id_unmop /-
@[simp]
theorem mop_id_unmop {X : Cᴹᵒᵖ} : (𝟙 (unmop X)).mop = 𝟙 X :=
rfl
#align category_theory.mop_id_unmop CategoryTheory.mop_id_unmop
+-/
namespace Iso
variable {X Y : C}
+#print CategoryTheory.Iso.mop /-
/-- An isomorphism in `C` gives an isomorphism in `Cᴹᵒᵖ`. -/
@[simps]
def mop (f : X ≅ Y) : mop X ≅ mop Y where
@@ -164,6 +209,7 @@ def mop (f : X ≅ Y) : mop X ≅ mop Y where
hom_inv_id' := unmop_inj f.hom_inv_id
inv_hom_id' := unmop_inj f.inv_hom_id
#align category_theory.iso.mop CategoryTheory.Iso.mop
+-/
end Iso
@@ -173,6 +219,7 @@ open Opposite MonoidalCategory
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.monoidalCategoryOp /-
instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ
where
tensorObj X Y := op (unop X ⊗ unop Y)
@@ -187,19 +234,25 @@ instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ
triangle' := by intros; apply Quiver.Hom.unop_inj; coherence
pentagon' := by intros; apply Quiver.Hom.unop_inj; coherence
#align category_theory.monoidal_category_op CategoryTheory.monoidalCategoryOp
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.op_tensorObj /-
theorem op_tensorObj (X Y : Cᵒᵖ) : X ⊗ Y = op (unop X ⊗ unop Y) :=
rfl
#align category_theory.op_tensor_obj CategoryTheory.op_tensorObj
+-/
+#print CategoryTheory.op_tensorUnit /-
theorem op_tensorUnit : 𝟙_ Cᵒᵖ = op (𝟙_ C) :=
rfl
#align category_theory.op_tensor_unit CategoryTheory.op_tensorUnit
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.monoidalCategoryMop /-
instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ
where
tensorObj X Y := mop (unmop Y ⊗ unmop X)
@@ -214,16 +267,21 @@ instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ
triangle' := by intros; apply unmop_inj; coherence
pentagon' := by intros; apply unmop_inj; coherence
#align category_theory.monoidal_category_mop CategoryTheory.monoidalCategoryMop
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.mop_tensorObj /-
theorem mop_tensorObj (X Y : Cᴹᵒᵖ) : X ⊗ Y = mop (unmop Y ⊗ unmop X) :=
rfl
#align category_theory.mop_tensor_obj CategoryTheory.mop_tensorObj
+-/
+#print CategoryTheory.mop_tensorUnit /-
theorem mop_tensorUnit : 𝟙_ Cᴹᵒᵖ = mop (𝟙_ C) :=
rfl
#align category_theory.mop_tensor_unit CategoryTheory.mop_tensorUnit
+-/
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -181,11 +181,11 @@ instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ
associator X Y Z := (α_ (unop X) (unop Y) (unop Z)).symm.op
leftUnitor X := (λ_ (unop X)).symm.op
rightUnitor X := (ρ_ (unop X)).symm.op
- associator_naturality' := by intros ; apply Quiver.Hom.unop_inj; simp
- leftUnitor_naturality' := by intros ; apply Quiver.Hom.unop_inj; simp
- rightUnitor_naturality' := by intros ; apply Quiver.Hom.unop_inj; simp
- triangle' := by intros ; apply Quiver.Hom.unop_inj; coherence
- pentagon' := by intros ; apply Quiver.Hom.unop_inj; coherence
+ associator_naturality' := by intros; apply Quiver.Hom.unop_inj; simp
+ leftUnitor_naturality' := by intros; apply Quiver.Hom.unop_inj; simp
+ rightUnitor_naturality' := by intros; apply Quiver.Hom.unop_inj; simp
+ triangle' := by intros; apply Quiver.Hom.unop_inj; coherence
+ pentagon' := by intros; apply Quiver.Hom.unop_inj; coherence
#align category_theory.monoidal_category_op CategoryTheory.monoidalCategoryOp
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -208,11 +208,11 @@ instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ
associator X Y Z := (α_ (unmop Z) (unmop Y) (unmop X)).symm.mop
leftUnitor X := (ρ_ (unmop X)).mop
rightUnitor X := (λ_ (unmop X)).mop
- associator_naturality' := by intros ; apply unmop_inj; simp
- leftUnitor_naturality' := by intros ; apply unmop_inj; simp
- rightUnitor_naturality' := by intros ; apply unmop_inj; simp
- triangle' := by intros ; apply unmop_inj; coherence
- pentagon' := by intros ; apply unmop_inj; coherence
+ associator_naturality' := by intros; apply unmop_inj; simp
+ leftUnitor_naturality' := by intros; apply unmop_inj; simp
+ rightUnitor_naturality' := by intros; apply unmop_inj; simp
+ triangle' := by intros; apply unmop_inj; coherence
+ pentagon' := by intros; apply unmop_inj; coherence
#align category_theory.monoidal_category_mop CategoryTheory.monoidalCategoryMop
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -181,26 +181,11 @@ instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ
associator X Y Z := (α_ (unop X) (unop Y) (unop Z)).symm.op
leftUnitor X := (λ_ (unop X)).symm.op
rightUnitor X := (ρ_ (unop X)).symm.op
- associator_naturality' := by
- intros
- apply Quiver.Hom.unop_inj
- simp
- leftUnitor_naturality' := by
- intros
- apply Quiver.Hom.unop_inj
- simp
- rightUnitor_naturality' := by
- intros
- apply Quiver.Hom.unop_inj
- simp
- triangle' := by
- intros
- apply Quiver.Hom.unop_inj
- coherence
- pentagon' := by
- intros
- apply Quiver.Hom.unop_inj
- coherence
+ associator_naturality' := by intros ; apply Quiver.Hom.unop_inj; simp
+ leftUnitor_naturality' := by intros ; apply Quiver.Hom.unop_inj; simp
+ rightUnitor_naturality' := by intros ; apply Quiver.Hom.unop_inj; simp
+ triangle' := by intros ; apply Quiver.Hom.unop_inj; coherence
+ pentagon' := by intros ; apply Quiver.Hom.unop_inj; coherence
#align category_theory.monoidal_category_op CategoryTheory.monoidalCategoryOp
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -223,26 +208,11 @@ instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ
associator X Y Z := (α_ (unmop Z) (unmop Y) (unmop X)).symm.mop
leftUnitor X := (ρ_ (unmop X)).mop
rightUnitor X := (λ_ (unmop X)).mop
- associator_naturality' := by
- intros
- apply unmop_inj
- simp
- leftUnitor_naturality' := by
- intros
- apply unmop_inj
- simp
- rightUnitor_naturality' := by
- intros
- apply unmop_inj
- simp
- triangle' := by
- intros
- apply unmop_inj
- coherence
- pentagon' := by
- intros
- apply unmop_inj
- coherence
+ associator_naturality' := by intros ; apply unmop_inj; simp
+ leftUnitor_naturality' := by intros ; apply unmop_inj; simp
+ rightUnitor_naturality' := by intros ; apply unmop_inj; simp
+ triangle' := by intros ; apply unmop_inj; coherence
+ pentagon' := by intros ; apply unmop_inj; coherence
#align category_theory.monoidal_category_mop CategoryTheory.monoidalCategoryMop
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -25,7 +25,7 @@ open CategoryTheory.MonoidalCategory
/-- The type of objects of the opposite (or "reverse") monoidal category.
Use the notation `Cᴹᵒᵖ`. -/
--- @[nolint has_nonempty_instance] -- Porting note: This linter does not exist yet.
+-- @[nolint has_nonempty_instance] -- Porting note(#5171): This linter does not exist yet.
structure MonoidalOpposite (C : Type u₁) where
/-- The object of `MonoidalOpposite C` that represents `x : C`. -/ mop ::
/-- The object of `C` represented by `x : MonoidalOpposite C`. -/ unmop : C
@@ -175,8 +175,6 @@ variable [MonoidalCategory.{v₁} C]
open Opposite MonoidalCategory
-attribute [local simp] id_tensorHom tensorHom_id
-
instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ where
tensorObj X Y := op (unop X ⊗ unop Y)
whiskerLeft X _ _ f := (X.unop ◁ f.unop).op
Refactor MonoidalOpposite
into a structure for consistency with Opposite
.
@@ -23,59 +23,47 @@ namespace CategoryTheory
open CategoryTheory.MonoidalCategory
-/-- A type synonym for the monoidal opposite. Use the notation `Cᴹᵒᵖ`. -/
+/-- The type of objects of the opposite (or "reverse") monoidal category.
+Use the notation `Cᴹᵒᵖ`. -/
-- @[nolint has_nonempty_instance] -- Porting note: This linter does not exist yet.
-def MonoidalOpposite (C : Type u₁) :=
- C
+structure MonoidalOpposite (C : Type u₁) where
+ /-- The object of `MonoidalOpposite C` that represents `x : C`. -/ mop ::
+ /-- The object of `C` represented by `x : MonoidalOpposite C`. -/ unmop : C
#align category_theory.monoidal_opposite CategoryTheory.MonoidalOpposite
+#align category_theory.monoidal_opposite.mop CategoryTheory.MonoidalOpposite.mop
+#align category_theory.monoidal_opposite.unmop CategoryTheory.MonoidalOpposite.unmop
namespace MonoidalOpposite
@[inherit_doc]
notation:max C "ᴹᵒᵖ" => MonoidalOpposite C
-/-- Think of an object of `C` as an object of `Cᴹᵒᵖ`. -/
--- @[pp_nodot] -- Porting note: removed
-def mop (X : C) : Cᴹᵒᵖ :=
- X
-#align category_theory.monoidal_opposite.mop CategoryTheory.MonoidalOpposite.mop
-
-/-- Think of an object of `Cᴹᵒᵖ` as an object of `C`. -/
--- @[pp_nodot] -- Porting note: removed
-def unmop (X : Cᴹᵒᵖ) : C :=
- X
-#align category_theory.monoidal_opposite.unmop CategoryTheory.MonoidalOpposite.unmop
-
-theorem mop_injective : Function.Injective (mop : C → Cᴹᵒᵖ) :=
- fun _ _ => id
+theorem mop_injective : Function.Injective (mop : C → Cᴹᵒᵖ) := @mop.inj C
#align category_theory.monoidal_opposite.op_injective CategoryTheory.MonoidalOpposite.mop_injective
theorem unmop_injective : Function.Injective (unmop : Cᴹᵒᵖ → C) :=
- fun _ _ => id
+ fun _ _ h => congrArg mop h
#align category_theory.monoidal_opposite.unop_injective CategoryTheory.MonoidalOpposite.unmop_injective
-@[simp]
-theorem mop_inj_iff (x y : C) : mop x = mop y ↔ x = y :=
- Iff.rfl
+theorem mop_inj_iff (x y : C) : mop x = mop y ↔ x = y := mop_injective.eq_iff
#align category_theory.monoidal_opposite.op_inj_iff CategoryTheory.MonoidalOpposite.mop_inj_iff
@[simp]
-theorem unmop_inj_iff (x y : Cᴹᵒᵖ) : unmop x = unmop y ↔ x = y :=
- Iff.rfl
+theorem unmop_inj_iff (x y : Cᴹᵒᵖ) : unmop x = unmop y ↔ x = y := unmop_injective.eq_iff
#align category_theory.monoidal_opposite.unop_inj_iff CategoryTheory.MonoidalOpposite.unmop_inj_iff
@[simp]
-theorem mop_unmop (X : Cᴹᵒᵖ) : mop (unmop X) = X :=
- rfl
+theorem mop_unmop (X : Cᴹᵒᵖ) : mop (unmop X) = X := rfl
#align category_theory.monoidal_opposite.mop_unmop CategoryTheory.MonoidalOpposite.mop_unmop
-@[simp]
-theorem unmop_mop (X : C) : unmop (mop X) = X :=
- rfl
+-- can't be simp bc after putting the lhs in whnf it's `X = X`
+theorem unmop_mop (X : C) : unmop (mop X) = X := rfl
#align category_theory.monoidal_opposite.unmop_mop CategoryTheory.MonoidalOpposite.unmop_mop
-instance monoidalOppositeCategory [Category.{v₁} C] : Category Cᴹᵒᵖ :=
- InducedCategory.category unmop
+instance monoidalOppositeCategory [Category.{v₁} C] : Category Cᴹᵒᵖ where
+ Hom X Y := (unmop X ⟶ unmop Y)ᴹᵒᵖ
+ id X := mop (𝟙 (unmop X))
+ comp f g := mop (unmop f ≫ unmop g)
#align category_theory.monoidal_opposite.monoidal_opposite_category CategoryTheory.MonoidalOpposite.monoidalOppositeCategory
end MonoidalOpposite
@@ -89,13 +77,11 @@ open CategoryTheory.MonoidalOpposite
variable [Category.{v₁} C]
/-- The monoidal opposite of a morphism `f : X ⟶ Y` is just `f`, thought of as `mop X ⟶ mop Y`. -/
-def Quiver.Hom.mop {X Y : C} (f : X ⟶ Y) : @Quiver.Hom Cᴹᵒᵖ _ (mop X) (mop Y) :=
- f
+def Quiver.Hom.mop {X Y : C} (f : X ⟶ Y) : mop X ⟶ mop Y := MonoidalOpposite.mop f
#align quiver.hom.mop Quiver.Hom.mop
/-- We can think of a morphism `f : mop X ⟶ mop Y` as a morphism `X ⟶ Y`. -/
-def Quiver.Hom.unmop {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) : unmop X ⟶ unmop Y :=
- f
+def Quiver.Hom.unmop {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) : unmop X ⟶ unmop Y := MonoidalOpposite.unmop f
#align quiver.hom.unmop Quiver.Hom.unmop
namespace Quiver.Hom
@@ -127,62 +113,61 @@ end Quiver.Hom
namespace CategoryTheory
@[simp]
-theorem mop_comp {X Y Z : C} {f : X ⟶ Y} {g : Y ⟶ Z} : (f ≫ g).mop = f.mop ≫ g.mop :=
- rfl
+theorem mop_comp {X Y Z : C} {f : X ⟶ Y} {g : Y ⟶ Z} :
+ (f ≫ g).mop = f.mop ≫ g.mop := rfl
#align category_theory.mop_comp CategoryTheory.mop_comp
@[simp]
-theorem mop_id {X : C} : (𝟙 X).mop = 𝟙 (mop X) :=
- rfl
+theorem mop_id {X : C} : (𝟙 X).mop = 𝟙 (mop X) := rfl
#align category_theory.mop_id CategoryTheory.mop_id
@[simp]
-theorem unmop_comp {X Y Z : Cᴹᵒᵖ} {f : X ⟶ Y} {g : Y ⟶ Z} : (f ≫ g).unmop = f.unmop ≫ g.unmop :=
- rfl
+theorem unmop_comp {X Y Z : Cᴹᵒᵖ} {f : X ⟶ Y} {g : Y ⟶ Z} :
+ (f ≫ g).unmop = f.unmop ≫ g.unmop := rfl
#align category_theory.unmop_comp CategoryTheory.unmop_comp
@[simp]
-theorem unmop_id {X : Cᴹᵒᵖ} : (𝟙 X).unmop = 𝟙 (unmop X) :=
- rfl
+theorem unmop_id {X : Cᴹᵒᵖ} : (𝟙 X).unmop = 𝟙 (unmop X) := rfl
#align category_theory.unmop_id CategoryTheory.unmop_id
@[simp]
-theorem unmop_id_mop {X : C} : (𝟙 (mop X)).unmop = 𝟙 X :=
- rfl
+theorem unmop_id_mop {X : C} : (𝟙 (mop X)).unmop = 𝟙 X := rfl
#align category_theory.unmop_id_mop CategoryTheory.unmop_id_mop
@[simp]
-theorem mop_id_unmop {X : Cᴹᵒᵖ} : (𝟙 (unmop X)).mop = 𝟙 X :=
- rfl
+theorem mop_id_unmop {X : Cᴹᵒᵖ} : (𝟙 (unmop X)).mop = 𝟙 X := rfl
#align category_theory.mop_id_unmop CategoryTheory.mop_id_unmop
+variable (C)
+
+/-- The identity functor on `C`, viewed as a functor from `C` to its monoidal opposite. -/
+@[simps obj map] -- need to specify `obj, map` or else we generate `mopFunctor_obj_unmop`
+def mopFunctor : C ⥤ Cᴹᵒᵖ := Functor.mk ⟨mop, .mop⟩
+/-- The identity functor on `C`, viewed as a functor from the monoidal opposite of `C` to `C`. -/
+@[simps obj map] -- not necessary but the symmetry with `mopFunctor` looks nicer
+def unmopFunctor : Cᴹᵒᵖ ⥤ C := Functor.mk ⟨unmop, .unmop⟩
+
+variable {C}
+
namespace Iso
/-- An isomorphism in `C` gives an isomorphism in `Cᴹᵒᵖ`. -/
-@[simps]
-def mop {X Y : C} (f : X ≅ Y) : mop X ≅ mop Y where
- hom := f.hom.mop
- inv := f.inv.mop
- -- Porting note: it's a pity `attribute [aesop safe apply (rule_sets [CategoryTheory])] unmop_inj`
- -- doesn't automate these proofs.
- hom_inv_id := Quiver.Hom.unmop_inj (hom_inv_id f)
- inv_hom_id := Quiver.Hom.unmop_inj (inv_hom_id f)
+@[reducible]
+def mop {X Y : C} (f : X ≅ Y) : mop X ≅ mop Y := (mopFunctor C).mapIso f
#align category_theory.iso.mop CategoryTheory.Iso.mop
/-- An isomorphism in `Cᴹᵒᵖ` gives an isomorphism in `C`. -/
-@[simps]
-def unmop {X Y : Cᴹᵒᵖ} (f : X ≅ Y) : unmop X ≅ unmop Y where
- hom := f.hom.unmop
- inv := f.inv.unmop
- hom_inv_id := Quiver.Hom.mop_inj (hom_inv_id f)
- inv_hom_id := Quiver.Hom.mop_inj (inv_hom_id f)
+@[reducible]
+def unmop {X Y : Cᴹᵒᵖ} (f : X ≅ Y) : unmop X ≅ unmop Y := (unmopFunctor C).mapIso f
end Iso
namespace IsIso
-instance {X Y : C} (f : X ⟶ Y) [i : IsIso f] : IsIso f.mop := i
-instance {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) [i : IsIso f] : IsIso f.unmop := i
+instance {X Y : C} (f : X ⟶ Y) [IsIso f] : IsIso f.mop :=
+ (mopFunctor C).map_isIso f
+instance {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) [IsIso f] : IsIso f.unmop :=
+ (unmopFunctor C).map_isIso f
end IsIso
@@ -202,11 +187,11 @@ instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ where
associator X Y Z := (α_ (unop X) (unop Y) (unop Z)).symm.op
leftUnitor X := (λ_ (unop X)).symm.op
rightUnitor X := (ρ_ (unop X)).symm.op
- associator_naturality f g h := Quiver.Hom.unop_inj (by simp)
- leftUnitor_naturality f := Quiver.Hom.unop_inj (by simp)
- rightUnitor_naturality f := Quiver.Hom.unop_inj (by simp)
- triangle X Y := Quiver.Hom.unop_inj (by dsimp; coherence)
- pentagon W X Y Z := Quiver.Hom.unop_inj (by dsimp; coherence)
+ associator_naturality f g h := Quiver.Hom.unop_inj <| by simp
+ leftUnitor_naturality f := Quiver.Hom.unop_inj <| by simp
+ rightUnitor_naturality f := Quiver.Hom.unop_inj <| by simp
+ triangle X Y := Quiver.Hom.unop_inj <| by dsimp; coherence
+ pentagon W X Y Z := Quiver.Hom.unop_inj <| by dsimp; coherence
#align category_theory.monoidal_category_op CategoryTheory.monoidalCategoryOp
section OppositeLemmas
@@ -277,12 +262,12 @@ instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ where
associator X Y Z := (α_ (unmop Z) (unmop Y) (unmop X)).symm.mop
leftUnitor X := (ρ_ (unmop X)).mop
rightUnitor X := (λ_ (unmop X)).mop
- associator_naturality f g h := Quiver.Hom.unmop_inj (by simp)
- leftUnitor_naturality f := Quiver.Hom.unmop_inj (by simp)
- rightUnitor_naturality f := Quiver.Hom.unmop_inj (by simp)
+ associator_naturality f g h := Quiver.Hom.unmop_inj <| by simp
+ leftUnitor_naturality f := Quiver.Hom.unmop_inj <| by simp
+ rightUnitor_naturality f := Quiver.Hom.unmop_inj <| by simp
-- Porting note: Changed `by coherence` to `by simp` below
- triangle X Y := Quiver.Hom.unmop_inj (by simp)
- pentagon W X Y Z := Quiver.Hom.unmop_inj (by dsimp; coherence)
+ triangle X Y := Quiver.Hom.unmop_inj <| by simp
+ pentagon W X Y Z := Quiver.Hom.unmop_inj <| by dsimp; coherence
#align category_theory.monoidal_category_mop CategoryTheory.monoidalCategoryMop
-- it would be nice if we could autogenerate all of these somehow
@@ -346,17 +331,20 @@ end MonoidalOppositeLemmas
variable (C)
-/-- The identity functor on `C`, viewed as a functor from `C` to its monoidal opposite. -/
-@[simps!] def mopFunctor : C ⥤ Cᴹᵒᵖ := Functor.mk ⟨mop, .mop⟩
-/-- The identity functor on `C`, viewed as a functor from the monoidal opposite of `C` to `C`. -/
-@[simps!] def unmopFunctor : Cᴹᵒᵖ ⥤ C := Functor.mk ⟨unmop, .unmop⟩
-
/-- The (identity) equivalence between `C` and its monoidal opposite. -/
-@[simps!] def MonoidalOpposite.underlyingEquiv : C ≌ Cᴹᵒᵖ := Equivalence.refl
+@[simps] def MonoidalOpposite.mopEquiv : C ≌ Cᴹᵒᵖ where
+ functor := mopFunctor C
+ inverse := unmopFunctor C
+ unitIso := Iso.refl _
+ counitIso := Iso.refl _
+
+/-- The (identity) equivalence between `Cᴹᵒᵖ` and `C`. -/
+@[simps!] def MonoidalOpposite.unmopEquiv : Cᴹᵒᵖ ≌ C := (mopEquiv C).symm
-- todo: upgrade to monoidal equivalence
/-- The equivalence between `C` and its monoidal opposite's monoidal opposite. -/
-@[simps!] def MonoidalOpposite.mopMopEquivalence : Cᴹᵒᵖᴹᵒᵖ ≌ C := Equivalence.refl
+@[simps!] def MonoidalOpposite.mopMopEquivalence : Cᴹᵒᵖᴹᵒᵖ ≌ C :=
+ .trans (MonoidalOpposite.unmopEquiv Cᴹᵒᵖ) (MonoidalOpposite.unmopEquiv C)
/-- The identification `mop X ⊗ mop Y = mop (Y ⊗ X)` as a natural isomorphism. -/
@[simps!]
This PR adds some basics about monoidal opposite categories and their relation to the original category, as well as the Yang-Baxter equation for braided monoidal categories. It should be easy to define an action of the braid group on an object of a braided monoidal category from this.
@@ -46,23 +46,23 @@ def unmop (X : Cᴹᵒᵖ) : C :=
X
#align category_theory.monoidal_opposite.unmop CategoryTheory.MonoidalOpposite.unmop
-theorem op_injective : Function.Injective (mop : C → Cᴹᵒᵖ) :=
+theorem mop_injective : Function.Injective (mop : C → Cᴹᵒᵖ) :=
fun _ _ => id
-#align category_theory.monoidal_opposite.op_injective CategoryTheory.MonoidalOpposite.op_injective
+#align category_theory.monoidal_opposite.op_injective CategoryTheory.MonoidalOpposite.mop_injective
-theorem unop_injective : Function.Injective (unmop : Cᴹᵒᵖ → C) :=
+theorem unmop_injective : Function.Injective (unmop : Cᴹᵒᵖ → C) :=
fun _ _ => id
-#align category_theory.monoidal_opposite.unop_injective CategoryTheory.MonoidalOpposite.unop_injective
+#align category_theory.monoidal_opposite.unop_injective CategoryTheory.MonoidalOpposite.unmop_injective
@[simp]
-theorem op_inj_iff (x y : C) : mop x = mop y ↔ x = y :=
+theorem mop_inj_iff (x y : C) : mop x = mop y ↔ x = y :=
Iff.rfl
-#align category_theory.monoidal_opposite.op_inj_iff CategoryTheory.MonoidalOpposite.op_inj_iff
+#align category_theory.monoidal_opposite.op_inj_iff CategoryTheory.MonoidalOpposite.mop_inj_iff
@[simp]
-theorem unop_inj_iff (x y : Cᴹᵒᵖ) : unmop x = unmop y ↔ x = y :=
+theorem unmop_inj_iff (x y : Cᴹᵒᵖ) : unmop x = unmop y ↔ x = y :=
Iff.rfl
-#align category_theory.monoidal_opposite.unop_inj_iff CategoryTheory.MonoidalOpposite.unop_inj_iff
+#align category_theory.monoidal_opposite.unop_inj_iff CategoryTheory.MonoidalOpposite.unmop_inj_iff
@[simp]
theorem mop_unmop (X : Cᴹᵒᵖ) : mop (unmop X) = X :=
@@ -98,26 +98,33 @@ def Quiver.Hom.unmop {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) : unmop X ⟶ unmop Y :=
f
#align quiver.hom.unmop Quiver.Hom.unmop
-namespace CategoryTheory
+namespace Quiver.Hom
+
+open MonoidalOpposite renaming mop → mop', unmop → unmop'
-theorem mop_inj {X Y : C} : Function.Injective (Quiver.Hom.mop : (X ⟶ Y) → (mop X ⟶ mop Y)) :=
+theorem mop_inj {X Y : C} :
+ Function.Injective (Quiver.Hom.mop : (X ⟶ Y) → (mop' X ⟶ mop' Y)) :=
fun _ _ H => congr_arg Quiver.Hom.unmop H
-#align category_theory.mop_inj CategoryTheory.mop_inj
+#align category_theory.mop_inj Quiver.Hom.mop_inj
theorem unmop_inj {X Y : Cᴹᵒᵖ} :
- Function.Injective (Quiver.Hom.unmop : (X ⟶ Y) → (unmop X ⟶ unmop Y)) :=
+ Function.Injective (Quiver.Hom.unmop : (X ⟶ Y) → (unmop' X ⟶ unmop' Y)) :=
fun _ _ H => congr_arg Quiver.Hom.mop H
-#align category_theory.unmop_inj CategoryTheory.unmop_inj
+#align category_theory.unmop_inj Quiver.Hom.unmop_inj
@[simp]
theorem unmop_mop {X Y : C} {f : X ⟶ Y} : f.mop.unmop = f :=
rfl
-#align category_theory.unmop_mop CategoryTheory.unmop_mop
+#align category_theory.unmop_mop Quiver.Hom.unmop_mop
@[simp]
theorem mop_unmop {X Y : Cᴹᵒᵖ} {f : X ⟶ Y} : f.unmop.mop = f :=
rfl
-#align category_theory.mop_unmop CategoryTheory.mop_unmop
+#align category_theory.mop_unmop Quiver.Hom.mop_unmop
+
+end Quiver.Hom
+
+namespace CategoryTheory
@[simp]
theorem mop_comp {X Y Z : C} {f : X ⟶ Y} {g : Y ⟶ Z} : (f ≫ g).mop = f.mop ≫ g.mop :=
@@ -151,21 +158,34 @@ theorem mop_id_unmop {X : Cᴹᵒᵖ} : (𝟙 (unmop X)).mop = 𝟙 X :=
namespace Iso
-variable {X Y : C}
-
/-- An isomorphism in `C` gives an isomorphism in `Cᴹᵒᵖ`. -/
@[simps]
-def mop (f : X ≅ Y) : mop X ≅ mop Y where
+def mop {X Y : C} (f : X ≅ Y) : mop X ≅ mop Y where
hom := f.hom.mop
inv := f.inv.mop
-- Porting note: it's a pity `attribute [aesop safe apply (rule_sets [CategoryTheory])] unmop_inj`
-- doesn't automate these proofs.
- hom_inv_id := unmop_inj (by simp)
- inv_hom_id := unmop_inj (by simp)
+ hom_inv_id := Quiver.Hom.unmop_inj (hom_inv_id f)
+ inv_hom_id := Quiver.Hom.unmop_inj (inv_hom_id f)
#align category_theory.iso.mop CategoryTheory.Iso.mop
+/-- An isomorphism in `Cᴹᵒᵖ` gives an isomorphism in `C`. -/
+@[simps]
+def unmop {X Y : Cᴹᵒᵖ} (f : X ≅ Y) : unmop X ≅ unmop Y where
+ hom := f.hom.unmop
+ inv := f.inv.unmop
+ hom_inv_id := Quiver.Hom.mop_inj (hom_inv_id f)
+ inv_hom_id := Quiver.Hom.mop_inj (inv_hom_id f)
+
end Iso
+namespace IsIso
+
+instance {X Y : C} (f : X ⟶ Y) [i : IsIso f] : IsIso f.mop := i
+instance {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) [i : IsIso f] : IsIso f.unmop := i
+
+end IsIso
+
variable [MonoidalCategory.{v₁} C]
open Opposite MonoidalCategory
@@ -189,37 +209,198 @@ instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ where
pentagon W X Y Z := Quiver.Hom.unop_inj (by dsimp; coherence)
#align category_theory.monoidal_category_op CategoryTheory.monoidalCategoryOp
-theorem op_tensorObj (X Y : Cᵒᵖ) : X ⊗ Y = op (unop X ⊗ unop Y) :=
- rfl
-#align category_theory.op_tensor_obj CategoryTheory.op_tensorObj
+section OppositeLemmas
-theorem op_tensorUnit : 𝟙_ Cᵒᵖ = op (𝟙_ C) :=
- rfl
-#align category_theory.op_tensor_unit CategoryTheory.op_tensorUnit
+@[simp] lemma op_tensorObj (X Y : C) : op (X ⊗ Y) = op X ⊗ op Y := rfl
+@[simp] lemma unop_tensorObj (X Y : Cᵒᵖ) : unop (X ⊗ Y) = unop X ⊗ unop Y := rfl
+
+@[simp] lemma op_tensorUnit : op (𝟙_ C) = 𝟙_ Cᵒᵖ := rfl
+@[simp] lemma unop_tensorUnit : unop (𝟙_ Cᵒᵖ) = 𝟙_ C := rfl
+
+@[simp] lemma op_tensorHom {X₁ Y₁ X₂ Y₂ : C} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂) :
+ (f ⊗ g).op = f.op ⊗ g.op := rfl
+@[simp] lemma unop_tensorHom {X₁ Y₁ X₂ Y₂ : Cᵒᵖ} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂) :
+ (f ⊗ g).unop = f.unop ⊗ g.unop := rfl
+
+@[simp] lemma op_whiskerLeft (X : C) {Y Z : C} (f : Y ⟶ Z) :
+ (X ◁ f).op = op X ◁ f.op := rfl
+@[simp] lemma unop_whiskerLeft (X : Cᵒᵖ) {Y Z : Cᵒᵖ} (f : Y ⟶ Z) :
+ (X ◁ f).unop = unop X ◁ f.unop := rfl
+
+@[simp] lemma op_whiskerRight {X Y : C} (f : X ⟶ Y) (Z : C) :
+ (f ▷ Z).op = f.op ▷ op Z := rfl
+@[simp] lemma unop_whiskerRight {X Y : Cᵒᵖ} (f : X ⟶ Y) (Z : Cᵒᵖ) :
+ (f ▷ Z).unop = f.unop ▷ unop Z := rfl
+
+@[simp] lemma op_associator (X Y Z : C) :
+ (α_ X Y Z).op = (α_ (op X) (op Y) (op Z)).symm := rfl
+@[simp] lemma unop_associator (X Y Z : Cᵒᵖ) :
+ (α_ X Y Z).unop = (α_ (unop X) (unop Y) (unop Z)).symm := rfl
+
+@[simp] lemma op_hom_associator (X Y Z : C) :
+ (α_ X Y Z).hom.op = (α_ (op X) (op Y) (op Z)).inv := rfl
+@[simp] lemma unop_hom_associator (X Y Z : Cᵒᵖ) :
+ (α_ X Y Z).hom.unop = (α_ (unop X) (unop Y) (unop Z)).inv := rfl
+
+@[simp] lemma op_inv_associator (X Y Z : C) :
+ (α_ X Y Z).inv.op = (α_ (op X) (op Y) (op Z)).hom := rfl
+@[simp] lemma unop_inv_associator (X Y Z : Cᵒᵖ) :
+ (α_ X Y Z).inv.unop = (α_ (unop X) (unop Y) (unop Z)).hom := rfl
+
+@[simp] lemma op_leftUnitor (X : C) : (λ_ X).op = (λ_ (op X)).symm := rfl
+@[simp] lemma unop_leftUnitor (X : Cᵒᵖ) : (λ_ X).unop = (λ_ (unop X)).symm := rfl
+
+@[simp] lemma op_hom_leftUnitor (X : C) : (λ_ X).hom.op = (λ_ (op X)).inv := rfl
+@[simp] lemma unop_hom_leftUnitor (X : Cᵒᵖ) : (λ_ X).hom.unop = (λ_ (unop X)).inv := rfl
+
+@[simp] lemma op_inv_leftUnitor (X : C) : (λ_ X).inv.op = (λ_ (op X)).hom := rfl
+@[simp] lemma unop_inv_leftUnitor (X : Cᵒᵖ) : (λ_ X).inv.unop = (λ_ (unop X)).hom := rfl
+
+@[simp] lemma op_rightUnitor (X : C) : (ρ_ X).op = (ρ_ (op X)).symm := rfl
+@[simp] lemma unop_rightUnitor (X : Cᵒᵖ) : (ρ_ X).unop = (ρ_ (unop X)).symm := rfl
+
+@[simp] lemma op_hom_rightUnitor (X : C) : (ρ_ X).hom.op = (ρ_ (op X)).inv := rfl
+@[simp] lemma unop_hom_rightUnitor (X : Cᵒᵖ) : (ρ_ X).hom.unop = (ρ_ (unop X)).inv := rfl
+
+@[simp] lemma op_inv_rightUnitor (X : C) : (ρ_ X).inv.op = (ρ_ (op X)).hom := rfl
+@[simp] lemma unop_inv_rightUnitor (X : Cᵒᵖ) : (ρ_ X).inv.unop = (ρ_ (unop X)).hom := rfl
+
+end OppositeLemmas
instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ where
tensorObj X Y := mop (unmop Y ⊗ unmop X)
whiskerLeft X _ _ f := (f.unmop ▷ X.unmop).mop
whiskerRight f X := (X.unmop ◁ f.unmop).mop
tensorHom f g := (g.unmop ⊗ f.unmop).mop
- tensorHom_def f g := unmop_inj (tensorHom_def' _ _)
+ tensorHom_def f g := Quiver.Hom.unmop_inj (tensorHom_def' _ _)
tensorUnit := mop (𝟙_ C)
associator X Y Z := (α_ (unmop Z) (unmop Y) (unmop X)).symm.mop
leftUnitor X := (ρ_ (unmop X)).mop
rightUnitor X := (λ_ (unmop X)).mop
- associator_naturality f g h := unmop_inj (by simp)
- leftUnitor_naturality f := unmop_inj (by simp)
- rightUnitor_naturality f := unmop_inj (by simp)
- triangle X Y := unmop_inj (by simp) -- Porting note: Changed `by coherence` to `by simp`
- pentagon W X Y Z := unmop_inj (by dsimp; coherence)
+ associator_naturality f g h := Quiver.Hom.unmop_inj (by simp)
+ leftUnitor_naturality f := Quiver.Hom.unmop_inj (by simp)
+ rightUnitor_naturality f := Quiver.Hom.unmop_inj (by simp)
+ -- Porting note: Changed `by coherence` to `by simp` below
+ triangle X Y := Quiver.Hom.unmop_inj (by simp)
+ pentagon W X Y Z := Quiver.Hom.unmop_inj (by dsimp; coherence)
#align category_theory.monoidal_category_mop CategoryTheory.monoidalCategoryMop
-theorem mop_tensorObj (X Y : Cᴹᵒᵖ) : X ⊗ Y = mop (unmop Y ⊗ unmop X) :=
- rfl
-#align category_theory.mop_tensor_obj CategoryTheory.mop_tensorObj
+-- it would be nice if we could autogenerate all of these somehow
+section MonoidalOppositeLemmas
-theorem mop_tensorUnit : 𝟙_ Cᴹᵒᵖ = mop (𝟙_ C) :=
- rfl
-#align category_theory.mop_tensor_unit CategoryTheory.mop_tensorUnit
+@[simp] lemma mop_tensorObj (X Y : C) : mop (X ⊗ Y) = mop Y ⊗ mop X := rfl
+@[simp] lemma unmop_tensorObj (X Y : Cᴹᵒᵖ) : unmop (X ⊗ Y) = unmop Y ⊗ unmop X := rfl
+
+@[simp] lemma mop_tensorUnit : mop (𝟙_ C) = 𝟙_ Cᴹᵒᵖ := rfl
+@[simp] lemma unmop_tensorUnit : unmop (𝟙_ Cᴹᵒᵖ) = 𝟙_ C := rfl
+
+@[simp] lemma mop_tensorHom {X₁ Y₁ X₂ Y₂ : C} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂) :
+ (f ⊗ g).mop = g.mop ⊗ f.mop := rfl
+@[simp] lemma unmop_tensorHom {X₁ Y₁ X₂ Y₂ : Cᴹᵒᵖ} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂) :
+ (f ⊗ g).unmop = g.unmop ⊗ f.unmop := rfl
+
+@[simp] lemma mop_whiskerLeft (X : C) {Y Z : C} (f : Y ⟶ Z) :
+ (X ◁ f).mop = f.mop ▷ mop X := rfl
+@[simp] lemma unmop_whiskerLeft (X : Cᴹᵒᵖ) {Y Z : Cᴹᵒᵖ} (f : Y ⟶ Z) :
+ (X ◁ f).unmop = f.unmop ▷ unmop X := rfl
+
+@[simp] lemma mop_whiskerRight {X Y : C} (f : X ⟶ Y) (Z : C) :
+ (f ▷ Z).mop = mop Z ◁ f.mop := rfl
+@[simp] lemma unmop_whiskerRight {X Y : Cᴹᵒᵖ} (f : X ⟶ Y) (Z : Cᴹᵒᵖ) :
+ (f ▷ Z).unmop = unmop Z ◁ f.unmop := rfl
+
+@[simp] lemma mop_associator (X Y Z : C) :
+ (α_ X Y Z).mop = (α_ (mop Z) (mop Y) (mop X)).symm := rfl
+@[simp] lemma unmop_associator (X Y Z : Cᴹᵒᵖ) :
+ (α_ X Y Z).unmop = (α_ (unmop Z) (unmop Y) (unmop X)).symm := rfl
+
+@[simp] lemma mop_hom_associator (X Y Z : C) :
+ (α_ X Y Z).hom.mop = (α_ (mop Z) (mop Y) (mop X)).inv := rfl
+@[simp] lemma unmop_hom_associator (X Y Z : Cᴹᵒᵖ) :
+ (α_ X Y Z).hom.unmop = (α_ (unmop Z) (unmop Y) (unmop X)).inv := rfl
+
+@[simp] lemma mop_inv_associator (X Y Z : C) :
+ (α_ X Y Z).inv.mop = (α_ (mop Z) (mop Y) (mop X)).hom := rfl
+@[simp] lemma unmop_inv_associator (X Y Z : Cᴹᵒᵖ) :
+ (α_ X Y Z).inv.unmop = (α_ (unmop Z) (unmop Y) (unmop X)).hom := rfl
+
+@[simp] lemma mop_leftUnitor (X : C) : (λ_ X).mop = (ρ_ (mop X)) := rfl
+@[simp] lemma unmop_leftUnitor (X : Cᴹᵒᵖ) : (λ_ X).unmop = ρ_ (unmop X) := rfl
+
+@[simp] lemma mop_hom_leftUnitor (X : C) : (λ_ X).hom.mop = (ρ_ (mop X)).hom := rfl
+@[simp] lemma unmop_hom_leftUnitor (X : Cᴹᵒᵖ) : (λ_ X).hom.unmop = (ρ_ (unmop X)).hom := rfl
+
+@[simp] lemma mop_inv_leftUnitor (X : C) : (λ_ X).inv.mop = (ρ_ (mop X)).inv := rfl
+@[simp] lemma unmop_inv_leftUnitor (X : Cᴹᵒᵖ) : (λ_ X).inv.unmop = (ρ_ (unmop X)).inv := rfl
+
+@[simp] lemma mop_rightUnitor (X : C) : (ρ_ X).mop = (λ_ (mop X)) := rfl
+@[simp] lemma unmop_rightUnitor (X : Cᴹᵒᵖ) : (ρ_ X).unmop = λ_ (unmop X) := rfl
+
+@[simp] lemma mop_hom_rightUnitor (X : C) : (ρ_ X).hom.mop = (λ_ (mop X)).hom := rfl
+@[simp] lemma unmop_hom_rightUnitor (X : Cᴹᵒᵖ) : (ρ_ X).hom.unmop = (λ_ (unmop X)).hom := rfl
+
+@[simp] lemma mop_inv_rightUnitor (X : C) : (ρ_ X).inv.mop = (λ_ (mop X)).inv := rfl
+@[simp] lemma unmop_inv_rightUnitor (X : Cᴹᵒᵖ) : (ρ_ X).inv.unmop = (λ_ (unmop X)).inv := rfl
+
+end MonoidalOppositeLemmas
+
+variable (C)
+
+/-- The identity functor on `C`, viewed as a functor from `C` to its monoidal opposite. -/
+@[simps!] def mopFunctor : C ⥤ Cᴹᵒᵖ := Functor.mk ⟨mop, .mop⟩
+/-- The identity functor on `C`, viewed as a functor from the monoidal opposite of `C` to `C`. -/
+@[simps!] def unmopFunctor : Cᴹᵒᵖ ⥤ C := Functor.mk ⟨unmop, .unmop⟩
+
+/-- The (identity) equivalence between `C` and its monoidal opposite. -/
+@[simps!] def MonoidalOpposite.underlyingEquiv : C ≌ Cᴹᵒᵖ := Equivalence.refl
+
+-- todo: upgrade to monoidal equivalence
+/-- The equivalence between `C` and its monoidal opposite's monoidal opposite. -/
+@[simps!] def MonoidalOpposite.mopMopEquivalence : Cᴹᵒᵖᴹᵒᵖ ≌ C := Equivalence.refl
+
+/-- The identification `mop X ⊗ mop Y = mop (Y ⊗ X)` as a natural isomorphism. -/
+@[simps!]
+def MonoidalOpposite.tensorIso :
+ tensor Cᴹᵒᵖ ≅ (unmopFunctor C).prod (unmopFunctor C) ⋙
+ Prod.swap C C ⋙ tensor C ⋙ mopFunctor C :=
+ Iso.refl _
+
+variable {C}
+
+/-- The identification `X ⊗ - = mop (- ⊗ unmop X)` as a natural isomorphism. -/
+@[simps!]
+def MonoidalOpposite.tensorLeftIso (X : Cᴹᵒᵖ) :
+ tensorLeft X ≅ unmopFunctor C ⋙ tensorRight (unmop X) ⋙ mopFunctor C :=
+ Iso.refl _
+
+/-- The identification `mop X ⊗ - = mop (- ⊗ X)` as a natural isomorphism. -/
+@[simps!]
+def MonoidalOpposite.tensorLeftMopIso (X : C) :
+ tensorLeft (mop X) ≅ unmopFunctor C ⋙ tensorRight X ⋙ mopFunctor C :=
+ Iso.refl _
+
+/-- The identification `unmop X ⊗ - = unmop (mop - ⊗ X)` as a natural isomorphism. -/
+@[simps!]
+def MonoidalOpposite.tensorLeftUnmopIso (X : Cᴹᵒᵖ) :
+ tensorLeft (unmop X) ≅ mopFunctor C ⋙ tensorRight X ⋙ unmopFunctor C :=
+ Iso.refl _
+
+/-- The identification `- ⊗ X = mop (unmop X ⊗ -)` as a natural isomorphism. -/
+@[simps!]
+def MonoidalOpposite.tensorRightIso (X : Cᴹᵒᵖ) :
+ tensorRight X ≅ unmopFunctor C ⋙ tensorLeft (unmop X) ⋙ mopFunctor C :=
+ Iso.refl _
+
+/-- The identification `- ⊗ mop X = mop (- ⊗ unmop X)` as a natural isomorphism. -/
+@[simps!]
+def MonoidalOpposite.tensorRightMopIso (X : C) :
+ tensorRight (mop X) ≅ unmopFunctor C ⋙ tensorLeft X ⋙ mopFunctor C :=
+ Iso.refl _
+
+/-- The identification `- ⊗ unmop X = unmop (X ⊗ mop -)` as a natural isomorphism. -/
+@[simps!]
+def MonoidalOpposite.tensorRightUnmopIso (X : Cᴹᵒᵖ) :
+ tensorRight (unmop X) ≅ mopFunctor C ⋙ tensorLeft X ⋙ unmopFunctor C :=
+ Iso.refl _
end CategoryTheory
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.
@@ -170,6 +170,8 @@ variable [MonoidalCategory.{v₁} C]
open Opposite MonoidalCategory
+attribute [local simp] id_tensorHom tensorHom_id
+
instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ where
tensorObj X Y := op (unop X ⊗ unop Y)
whiskerLeft X _ _ f := (X.unop ◁ f.unop).op
@[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.
@@ -31,6 +31,7 @@ def MonoidalOpposite (C : Type u₁) :=
namespace MonoidalOpposite
+@[inherit_doc]
notation:max C "ᴹᵒᵖ" => MonoidalOpposite C
/-- Think of an object of `C` as an object of `Cᴹᵒᵖ`. -/
@@ -3,7 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import Mathlib.CategoryTheory.Monoidal.CoherenceLemmas
+import Mathlib.CategoryTheory.Monoidal.Free.Coherence
+import Mathlib.Tactic.CategoryTheory.Coherence
#align_import category_theory.monoidal.opposite from "leanprover-community/mathlib"@"14b69e9f3c16630440a2cbd46f1ddad0d561dee7"
MonoidalCategory
into a Struct
class (#7279)
This matches the approach for CategoryStruct
, and allows us to use the notation within MonoidalCategory
.
It also makes it easier to induce the lawful structure along a faithful functor, as again it means by the time we are providing the proof fields, the notation is already available.
This also eliminates tensorUnit
vs tensorUnit'
, adding a custom pretty-printer to provide the unprimed version with appropriate notation.
@@ -174,7 +174,7 @@ instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ where
whiskerRight f X := (f.unop ▷ X.unop).op
tensorHom f g := (f.unop ⊗ g.unop).op
tensorHom_def f g := Quiver.Hom.unop_inj (tensorHom_def' _ _)
- tensorUnit' := op (𝟙_ C)
+ tensorUnit := op (𝟙_ C)
associator X Y Z := (α_ (unop X) (unop Y) (unop Z)).symm.op
leftUnitor X := (λ_ (unop X)).symm.op
rightUnitor X := (ρ_ (unop X)).symm.op
@@ -199,7 +199,7 @@ instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ where
whiskerRight f X := (X.unmop ◁ f.unmop).mop
tensorHom f g := (g.unmop ⊗ f.unmop).mop
tensorHom_def f g := unmop_inj (tensorHom_def' _ _)
- tensorUnit' := mop (𝟙_ C)
+ tensorUnit := mop (𝟙_ C)
associator X Y Z := (α_ (unmop Z) (unmop Y) (unmop X)).symm.mop
leftUnitor X := (ρ_ (unmop X)).mop
rightUnitor X := (λ_ (unmop X)).mop
@@ -170,7 +170,10 @@ open Opposite MonoidalCategory
instance monoidalCategoryOp : MonoidalCategory Cᵒᵖ where
tensorObj X Y := op (unop X ⊗ unop Y)
+ whiskerLeft X _ _ f := (X.unop ◁ f.unop).op
+ whiskerRight f X := (f.unop ▷ X.unop).op
tensorHom f g := (f.unop ⊗ g.unop).op
+ tensorHom_def f g := Quiver.Hom.unop_inj (tensorHom_def' _ _)
tensorUnit' := op (𝟙_ C)
associator X Y Z := (α_ (unop X) (unop Y) (unop Z)).symm.op
leftUnitor X := (λ_ (unop X)).symm.op
@@ -192,7 +195,10 @@ theorem op_tensorUnit : 𝟙_ Cᵒᵖ = op (𝟙_ C) :=
instance monoidalCategoryMop : MonoidalCategory Cᴹᵒᵖ where
tensorObj X Y := mop (unmop Y ⊗ unmop X)
+ whiskerLeft X _ _ f := (f.unmop ▷ X.unmop).mop
+ whiskerRight f X := (X.unmop ◁ f.unmop).mop
tensorHom f g := (g.unmop ⊗ f.unmop).mop
+ tensorHom_def f g := unmop_inj (tensorHom_def' _ _)
tensorUnit' := mop (𝟙_ C)
associator X Y Z := (α_ (unmop Z) (unmop Y) (unmop X)).symm.mop
leftUnitor X := (ρ_ (unmop X)).mop
@@ -2,14 +2,11 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module category_theory.monoidal.opposite
-! leanprover-community/mathlib commit 14b69e9f3c16630440a2cbd46f1ddad0d561dee7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Monoidal.CoherenceLemmas
+#align_import category_theory.monoidal.opposite from "leanprover-community/mathlib"@"14b69e9f3c16630440a2cbd46f1ddad0d561dee7"
+
/-!
# Monoidal opposites
@@ -75,16 +75,8 @@ theorem unmop_mop (X : C) : unmop (mop X) = X :=
rfl
#align category_theory.monoidal_opposite.unmop_mop CategoryTheory.MonoidalOpposite.unmop_mop
-instance monoidalOppositeCategory [I : Category.{v₁} C] : Category Cᴹᵒᵖ where
- Hom X Y := unmop X ⟶ unmop Y
- id X := 𝟙 (unmop X)
- comp f g :=
- letI : CategoryStruct Cᴹᵒᵖ := I.toCategoryStruct -- Porting note: Added this instance
- f ≫ g
- -- Porting note: Added a new proof for `id_comp`, `comp_id`, `assoc`
- id_comp f := Category.id_comp (self := I) f
- comp_id f := Category.comp_id (self := I) f
- assoc f g h := Category.assoc (self := I) f g h
+instance monoidalOppositeCategory [Category.{v₁} C] : Category Cᴹᵒᵖ :=
+ InducedCategory.category unmop
#align category_theory.monoidal_opposite.monoidal_opposite_category CategoryTheory.MonoidalOpposite.monoidalOppositeCategory
end MonoidalOpposite
@@ -167,8 +159,10 @@ variable {X Y : C}
def mop (f : X ≅ Y) : mop X ≅ mop Y where
hom := f.hom.mop
inv := f.inv.mop
- hom_inv_id := unmop_inj (by simp) -- Porting note: Changed `f.inv_hom_id` to `by simp`
- inv_hom_id := unmop_inj (by simp) -- Porting note: Changed `f.inv_hom_id` to `by simp`
+ -- Porting note: it's a pity `attribute [aesop safe apply (rule_sets [CategoryTheory])] unmop_inj`
+ -- doesn't automate these proofs.
+ hom_inv_id := unmop_inj (by simp)
+ inv_hom_id := unmop_inj (by simp)
#align category_theory.iso.mop CategoryTheory.Iso.mop
end Iso
All dependencies are ported!