category_theory.monoidal.transport
⟷
Mathlib.CategoryTheory.Monoidal.Transport
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)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -259,7 +259,8 @@ def toTransported (e : C ≌ D) : MonoidalFunctor C (Transported e)
end
-instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor := by dsimp; infer_instance
+instance (e : C ≌ D) : CategoryTheory.Functor.IsEquivalence (toTransported e).toFunctor := by dsimp;
+ infer_instance
#print CategoryTheory.Monoidal.fromTransported /-
/-- We can upgrade `e.inverse` to a monoidal functor from `D` with the transported structure to `C`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/c8f305514e0d47dfaa710f5a52f0d21b588e6328
@@ -185,7 +185,6 @@ attribute [local simp] transport_tensor_hom transport_associator transport_left_
transport_right_unitor
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print CategoryTheory.Monoidal.laxToTransported /-
/--
We can upgrade `e.functor` to a lax monoidal functor from `C` to `D` with the transported structure.
-/
@@ -243,7 +242,6 @@ def laxToTransported (e : C ≌ D) : LaxMonoidalFunctor C (Transported e)
congr 1
simp only [← right_unitor_naturality, id_comp, ← tensor_comp_assoc, comp_id]
#align category_theory.monoidal.lax_to_transported CategoryTheory.Monoidal.laxToTransported
--/
end
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.NaturalTransformation
+import CategoryTheory.Monoidal.NaturalTransformation
#align_import category_theory.monoidal.transport from "leanprover-community/mathlib"@"31ca6f9cf5f90a6206092cd7f84b359dcb6d52e0"
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.transport
-! leanprover-community/mathlib commit 31ca6f9cf5f90a6206092cd7f84b359dcb6d52e0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Monoidal.NaturalTransformation
+#align_import category_theory.monoidal.transport from "leanprover-community/mathlib"@"31ca6f9cf5f90a6206092cd7f84b359dcb6d52e0"
+
/-!
# Transport a monoidal structure along an equivalence.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -47,6 +47,7 @@ variable {D : Type u₂} [Category.{v₂} D]
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.Monoidal.transport /-
-- We just want these simp lemmas locally
/-- Transport a monoidal structure along an equivalence of (plain) categories.
-/
@@ -160,13 +161,16 @@ def transport (e : C ≌ D) : MonoidalCategory.{v₂} D
slice_rhs 2 3 => rw [id_tensor_comp_tensor_id, ← tensor_id_comp_id_tensor]
slice_rhs 1 2 => rw [id_tensor_comp_tensor_id]
#align category_theory.monoidal.transport CategoryTheory.Monoidal.transport
+-/
+#print CategoryTheory.Monoidal.Transported /-
/-- A type synonym for `D`, which will carry the transported monoidal structure. -/
@[nolint unused_arguments]
def Transported (e : C ≌ D) :=
D
deriving Category
#align category_theory.monoidal.transported CategoryTheory.Monoidal.Transported
+-/
instance (e : C ≌ D) : MonoidalCategory (Transported e) :=
transport e
@@ -184,6 +188,7 @@ attribute [local simp] transport_tensor_hom transport_associator transport_left_
transport_right_unitor
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.Monoidal.laxToTransported /-
/--
We can upgrade `e.functor` to a lax monoidal functor from `C` to `D` with the transported structure.
-/
@@ -241,9 +246,11 @@ def laxToTransported (e : C ≌ D) : LaxMonoidalFunctor C (Transported e)
congr 1
simp only [← right_unitor_naturality, id_comp, ← tensor_comp_assoc, comp_id]
#align category_theory.monoidal.lax_to_transported CategoryTheory.Monoidal.laxToTransported
+-/
end
+#print CategoryTheory.Monoidal.toTransported /-
/-- We can upgrade `e.functor` to a monoidal functor from `C` to `D` with the transported structure.
-/
@[simps]
@@ -253,27 +260,33 @@ def toTransported (e : C ≌ D) : MonoidalFunctor C (Transported e)
ε_isIso := by dsimp; infer_instance
μ_isIso X Y := by dsimp; infer_instance
#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransported
+-/
end
instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor := by dsimp; infer_instance
+#print CategoryTheory.Monoidal.fromTransported /-
/-- We can upgrade `e.inverse` to a monoidal functor from `D` with the transported structure to `C`.
-/
@[simps]
def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C :=
monoidalInverse (toTransported e)
#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransported
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.Monoidal.transportedMonoidalUnitIso /-
/-- The unit isomorphism upgrades to a monoidal isomorphism. -/
@[simps]
def transportedMonoidalUnitIso (e : C ≌ D) :
LaxMonoidalFunctor.id C ≅ laxToTransported e ⊗⋙ (fromTransported e).toLaxMonoidalFunctor :=
asIso (monoidalUnit (toTransported e))
#align category_theory.monoidal.transported_monoidal_unit_iso CategoryTheory.Monoidal.transportedMonoidalUnitIso
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print CategoryTheory.Monoidal.transportedMonoidalCounitIso /-
/-- The counit isomorphism upgrades to a monoidal isomorphism. -/
@[simps]
def transportedMonoidalCounitIso (e : C ≌ D) :
@@ -281,6 +294,7 @@ def transportedMonoidalCounitIso (e : C ≌ D) :
LaxMonoidalFunctor.id (Transported e) :=
asIso (monoidalCounit (toTransported e))
#align category_theory.monoidal.transported_monoidal_counit_iso CategoryTheory.Monoidal.transportedMonoidalCounitIso
+-/
end CategoryTheory.Monoidal
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -164,7 +164,8 @@ def transport (e : C ≌ D) : MonoidalCategory.{v₂} D
/-- A type synonym for `D`, which will carry the transported monoidal structure. -/
@[nolint unused_arguments]
def Transported (e : C ≌ D) :=
- D deriving Category
+ D
+deriving Category
#align category_theory.monoidal.transported CategoryTheory.Monoidal.Transported
instance (e : C ≌ D) : MonoidalCategory (Transported e) :=
@@ -179,8 +180,8 @@ attribute [local simp] transport_tensor_unit
section
-attribute [local simp]
- transport_tensor_hom transport_associator transport_left_unitor transport_right_unitor
+attribute [local simp] transport_tensor_hom transport_associator transport_left_unitor
+ transport_right_unitor
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/--
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -41,12 +41,6 @@ variable {C : Type u₁} [Category.{v₁} C] [MonoidalCategory.{v₁} C]
variable {D : Type u₂} [Category.{v₂} D]
-/- warning: category_theory.monoidal.transport -> CategoryTheory.Monoidal.transport is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3) -> (CategoryTheory.MonoidalCategory.{u2, u4} D _inst_3)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3) -> (CategoryTheory.MonoidalCategory.{u2, u4} D _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transport CategoryTheory.Monoidal.transportₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -167,12 +161,6 @@ def transport (e : C ≌ D) : MonoidalCategory.{v₂} D
slice_rhs 1 2 => rw [id_tensor_comp_tensor_id]
#align category_theory.monoidal.transport CategoryTheory.Monoidal.transport
-/- warning: category_theory.monoidal.transported -> CategoryTheory.Monoidal.Transported is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3) -> Type.{u4}
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {_inst_2 : Type.{u4}} [D : CategoryTheory.Category.{u2, u4} _inst_2], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_2 _inst_1 D) -> Type.{u4}
-Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transported CategoryTheory.Monoidal.Transportedₓ'. -/
/-- A type synonym for `D`, which will carry the transported monoidal structure. -/
@[nolint unused_arguments]
def Transported (e : C ≌ D) :=
@@ -194,12 +182,6 @@ section
attribute [local simp]
transport_tensor_hom transport_associator transport_left_unitor transport_right_unitor
-/- warning: category_theory.monoidal.lax_to_transported -> CategoryTheory.Monoidal.laxToTransported is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.LaxMonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.LaxMonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
-Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.lax_to_transported CategoryTheory.Monoidal.laxToTransportedₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/--
We can upgrade `e.functor` to a lax monoidal functor from `C` to `D` with the transported structure.
@@ -261,12 +243,6 @@ def laxToTransported (e : C ≌ D) : LaxMonoidalFunctor C (Transported e)
end
-/- warning: category_theory.monoidal.to_transported -> CategoryTheory.Monoidal.toTransported is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.MonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.MonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
-Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransportedₓ'. -/
/-- We can upgrade `e.functor` to a monoidal functor from `C` to `D` with the transported structure.
-/
@[simps]
@@ -281,12 +257,6 @@ end
instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor := by dsimp; infer_instance
-/- warning: category_theory.monoidal.from_transported -> CategoryTheory.Monoidal.fromTransported is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.MonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.MonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2
-Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransportedₓ'. -/
/-- We can upgrade `e.inverse` to a monoidal functor from `D` with the transported structure to `C`.
-/
@[simps]
@@ -294,12 +264,6 @@ def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C :=
monoidalInverse (toTransported e)
#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransported
-/- warning: category_theory.monoidal.transported_monoidal_unit_iso -> CategoryTheory.Monoidal.transportedMonoidalUnitIso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.Iso.{max u3 u1, max u3 u1} (CategoryTheory.LaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.id.{u1, u3} C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.comp.{u1, u2, u1, u3, u4, u3} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.Iso.{max u3 u1, max u3 u1} (CategoryTheory.LaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.id.{u1, u3} C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.comp.{u1, u2, u1, u3, u4, u3} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)))
-Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transported_monoidal_unit_iso CategoryTheory.Monoidal.transportedMonoidalUnitIsoₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The unit isomorphism upgrades to a monoidal isomorphism. -/
@[simps]
@@ -308,12 +272,6 @@ def transportedMonoidalUnitIso (e : C ≌ D) :
asIso (monoidalUnit (toTransported e))
#align category_theory.monoidal.transported_monoidal_unit_iso CategoryTheory.Monoidal.transportedMonoidalUnitIso
-/- warning: category_theory.monoidal.transported_monoidal_counit_iso -> CategoryTheory.Monoidal.transportedMonoidalCounitIso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.Iso.{max u4 u2, max u4 u2} (CategoryTheory.LaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.comp.{u2, u1, u2, u4, u3, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.id.{u2, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e))
-but is expected to have type
- forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.Iso.{max u4 u2, max u4 u2} (CategoryTheory.LaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.comp.{u2, u1, u2, u4, u3, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.id.{u2, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e))
-Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transported_monoidal_counit_iso CategoryTheory.Monoidal.transportedMonoidalCounitIsoₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The counit isomorphism upgrades to a monoidal isomorphism. -/
@[simps]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -273,20 +273,13 @@ Case conversion may be inaccurate. Consider using '#align category_theory.monoid
def toTransported (e : C ≌ D) : MonoidalFunctor C (Transported e)
where
toLaxMonoidalFunctor := laxToTransported e
- ε_isIso := by
- dsimp
- infer_instance
- μ_isIso X Y := by
- dsimp
- infer_instance
+ ε_isIso := by dsimp; infer_instance
+ μ_isIso X Y := by dsimp; infer_instance
#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransported
end
-instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor :=
- by
- dsimp
- infer_instance
+instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor := by dsimp; infer_instance
/- warning: category_theory.monoidal.from_transported -> CategoryTheory.Monoidal.fromTransported is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/3cacc945118c8c637d89950af01da78307f59325
@@ -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.transport
-! leanprover-community/mathlib commit 31529827d0f68d1fbd429edc393a928f677f4aba
+! leanprover-community/mathlib commit 31ca6f9cf5f90a6206092cd7f84b359dcb6d52e0
! 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.NaturalTransformation
/-!
# Transport a monoidal structure along an equivalence.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
When `C` and `D` are equivalent as categories,
we can transport a monoidal structure on `C` along the equivalence,
obtaining a monoidal structure on `D`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/0148d455199ed64bf8eb2f493a1e7eb9211ce170
@@ -38,6 +38,12 @@ variable {C : Type u₁} [Category.{v₁} C] [MonoidalCategory.{v₁} C]
variable {D : Type u₂} [Category.{v₂} D]
+/- warning: category_theory.monoidal.transport -> CategoryTheory.Monoidal.transport is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3) -> (CategoryTheory.MonoidalCategory.{u2, u4} D _inst_3)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3) -> (CategoryTheory.MonoidalCategory.{u2, u4} D _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transport CategoryTheory.Monoidal.transportₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -158,6 +164,12 @@ def transport (e : C ≌ D) : MonoidalCategory.{v₂} D
slice_rhs 1 2 => rw [id_tensor_comp_tensor_id]
#align category_theory.monoidal.transport CategoryTheory.Monoidal.transport
+/- warning: category_theory.monoidal.transported -> CategoryTheory.Monoidal.Transported is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3) -> Type.{u4}
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] {_inst_2 : Type.{u4}} [D : CategoryTheory.Category.{u2, u4} _inst_2], (CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_2 _inst_1 D) -> Type.{u4}
+Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transported CategoryTheory.Monoidal.Transportedₓ'. -/
/-- A type synonym for `D`, which will carry the transported monoidal structure. -/
@[nolint unused_arguments]
def Transported (e : C ≌ D) :=
@@ -179,6 +191,12 @@ section
attribute [local simp]
transport_tensor_hom transport_associator transport_left_unitor transport_right_unitor
+/- warning: category_theory.monoidal.lax_to_transported -> CategoryTheory.Monoidal.laxToTransported is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.LaxMonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.LaxMonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
+Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.lax_to_transported CategoryTheory.Monoidal.laxToTransportedₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/--
We can upgrade `e.functor` to a lax monoidal functor from `C` to `D` with the transported structure.
@@ -240,6 +258,12 @@ def laxToTransported (e : C ≌ D) : LaxMonoidalFunctor C (Transported e)
end
+/- warning: category_theory.monoidal.to_transported -> CategoryTheory.Monoidal.toTransported is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.MonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.MonoidalFunctor.{u1, u2, u3, u4} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)
+Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransportedₓ'. -/
/-- We can upgrade `e.functor` to a monoidal functor from `C` to `D` with the transported structure.
-/
@[simps]
@@ -261,6 +285,12 @@ instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor :=
dsimp
infer_instance
+/- warning: category_theory.monoidal.from_transported -> CategoryTheory.Monoidal.fromTransported is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.MonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.MonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2
+Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransportedₓ'. -/
/-- We can upgrade `e.inverse` to a monoidal functor from `D` with the transported structure to `C`.
-/
@[simps]
@@ -268,6 +298,12 @@ def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C :=
monoidalInverse (toTransported e)
#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransported
+/- warning: category_theory.monoidal.transported_monoidal_unit_iso -> CategoryTheory.Monoidal.transportedMonoidalUnitIso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.Iso.{max u3 u1, max u3 u1} (CategoryTheory.LaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.id.{u1, u3} C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.comp.{u1, u2, u1, u3, u4, u3} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.Iso.{max u3 u1, max u3 u1} (CategoryTheory.LaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u1, u1, u3, u3} C _inst_1 _inst_2 C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.id.{u1, u3} C _inst_1 _inst_2) (CategoryTheory.LaxMonoidalFunctor.comp.{u1, u2, u1, u3, u4, u3} C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)))
+Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transported_monoidal_unit_iso CategoryTheory.Monoidal.transportedMonoidalUnitIsoₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The unit isomorphism upgrades to a monoidal isomorphism. -/
@[simps]
@@ -276,6 +312,12 @@ def transportedMonoidalUnitIso (e : C ≌ D) :
asIso (monoidalUnit (toTransported e))
#align category_theory.monoidal.transported_monoidal_unit_iso CategoryTheory.Monoidal.transportedMonoidalUnitIso
+/- warning: category_theory.monoidal.transported_monoidal_counit_iso -> CategoryTheory.Monoidal.transportedMonoidalCounitIso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C _inst_1 D _inst_3), CategoryTheory.Iso.{max u4 u2, max u4 u2} (CategoryTheory.LaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.comp.{u2, u1, u2, u4, u3, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.id.{u2, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.category.{u2, u4, u3, u1} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.CategoryTheory.monoidalCategory.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e))
+but is expected to have type
+ forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} C] [_inst_2 : CategoryTheory.MonoidalCategory.{u1, u3} C _inst_1] {D : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} D] (e : CategoryTheory.Equivalence.{u1, u2, u3, u4} C D _inst_1 _inst_3), CategoryTheory.Iso.{max u4 u2, max u4 u2} (CategoryTheory.LaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.MonoidalNatTrans.categoryLaxMonoidalFunctor.{u2, u2, u4, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.comp.{u2, u1, u2, u4, u3, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) (CategoryTheory.MonoidalFunctor.toLaxMonoidalFunctor.{u2, u1, u4, u3} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e) C _inst_1 _inst_2 (CategoryTheory.Monoidal.fromTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.Monoidal.laxToTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e)) (CategoryTheory.LaxMonoidalFunctor.id.{u2, u4} (CategoryTheory.Monoidal.Transported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instCategoryTransported.{u1, u2, u3, u4} C _inst_1 D _inst_3 e) (CategoryTheory.Monoidal.instMonoidalCategoryTransportedInstCategoryTransported.{u1, u2, u3, u4} C _inst_1 _inst_2 D _inst_3 e))
+Case conversion may be inaccurate. Consider using '#align category_theory.monoidal.transported_monoidal_counit_iso CategoryTheory.Monoidal.transportedMonoidalCounitIsoₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The counit isomorphism upgrades to a monoidal isomorphism. -/
@[simps]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -89,7 +89,7 @@ The functor `F` must preserve all the data parts of the monoidal structure betwe
categories.
-/
-abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
+abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [F.Faithful]
(fData : InducingFunctorData F) :
MonoidalCategory.{v₂} D where
tensorHom_def {X₁ Y₁ X₂ Y₂} f g := F.map_injective <| by
@@ -121,7 +121,7 @@ abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
We can upgrade `F` to a monoidal functor from `D` to `E` with the induced structure.
-/
@[simps]
-def fromInduced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
+def fromInduced [MonoidalCategoryStruct D] (F : D ⥤ C) [F.Faithful]
(fData : InducingFunctorData F) :
letI := induced F fData
MonoidalFunctor D C :=
@@ -191,7 +191,7 @@ def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C := by
#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransported
instance instIsEquivalence_fromTransported (e : C ≌ D) :
- IsEquivalence (fromTransported e).toFunctor := by
+ (fromTransported e).IsEquivalence := by
dsimp [fromTransported]
infer_instance
@@ -204,8 +204,8 @@ def toTransported (e : C ≌ D) : MonoidalFunctor C (Transported e) :=
monoidalInverse (fromTransported e)
#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransported
-instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor :=
- inferInstanceAs (IsEquivalence e.functor)
+instance (e : C ≌ D) : (toTransported e).IsEquivalence :=
+ inferInstanceAs (e.functor.IsEquivalence)
/-- The unit isomorphism upgrades to a monoidal isomorphism. -/
@[simps! hom inv]
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -37,7 +37,6 @@ open CategoryTheory.MonoidalCategory
namespace CategoryTheory.Monoidal
variable {C : Type u₁} [Category.{v₁} C] [MonoidalCategory.{v₁} C]
-
variable {D : Type u₂} [Category.{v₂} D]
/-- The data needed to induce a `MonoidalCategory` via the functor `F`; namely, pre-existing
@@ -102,21 +102,19 @@ abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
id_whiskerRight X Y := F.map_injective <| by simp [fData.whiskerRight_eq]
triangle X Y := F.map_injective <| by cases fData; aesop_cat
pentagon W X Y Z := F.map_injective <| by
- simp only [Functor.map_comp, fData.tensorHom_eq, fData.associator_eq, Iso.trans_assoc,
+ simp only [Functor.map_comp, fData.whiskerRight_eq, fData.associator_eq, Iso.trans_assoc,
Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, tensorHom_id, id_tensorHom,
- Functor.map_id, comp_whiskerRight, whisker_assoc, assoc, MonoidalCategory.whiskerLeft_comp,
- Iso.hom_inv_id_assoc, whiskerLeft_hom_inv_assoc, hom_inv_whiskerRight_assoc,
- Iso.inv_hom_id_assoc, Iso.cancel_iso_inv_left]
+ comp_whiskerRight, whisker_assoc, assoc, fData.whiskerLeft_eq,
+ MonoidalCategory.whiskerLeft_comp, Iso.hom_inv_id_assoc, whiskerLeft_hom_inv_assoc,
+ hom_inv_whiskerRight_assoc, Iso.inv_hom_id_assoc, Iso.cancel_iso_inv_left]
slice_lhs 5 6 =>
rw [← MonoidalCategory.whiskerLeft_comp, hom_inv_whiskerRight]
rw [whisker_exchange_assoc]
simp
leftUnitor_naturality {X Y : D} f := F.map_injective <| by
- simp [fData.leftUnitor_eq, fData.tensorHom_eq, whisker_exchange_assoc,
- id_tensorHom, tensorHom_id]
+ simp [fData.leftUnitor_eq, fData.whiskerLeft_eq, whisker_exchange_assoc]
rightUnitor_naturality {X Y : D} f := F.map_injective <| by
- simp [fData.rightUnitor_eq, fData.tensorHom_eq, ← whisker_exchange_assoc,
- id_tensorHom, tensorHom_id]
+ simp [fData.rightUnitor_eq, fData.whiskerRight_eq, ← whisker_exchange_assoc]
associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃} f₁ f₂ f₃ := F.map_injective <| by
simp [fData.tensorHom_eq, fData.associator_eq, tensorHom_def, whisker_exchange_assoc]
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.
@@ -103,40 +103,22 @@ abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
triangle X Y := F.map_injective <| by cases fData; aesop_cat
pentagon W X Y Z := F.map_injective <| by
simp only [Functor.map_comp, fData.tensorHom_eq, fData.associator_eq, Iso.trans_assoc,
- Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, Functor.map_id, comp_tensor_id,
- associator_conjugation, tensor_id, assoc, id_tensor_comp, Iso.hom_inv_id_assoc,
- tensor_hom_inv_id_assoc, id_comp, hom_inv_id_tensor_assoc, Iso.inv_hom_id_assoc,
- id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_inv_left]
- slice_lhs 6 8 =>
- rw [← id_tensor_comp, hom_inv_id_tensor, tensor_id, comp_id,
- tensor_id]
- simp only [comp_id, assoc, pentagon_assoc, Iso.inv_hom_id_assoc,
- ← associator_naturality_assoc, tensor_id, tensor_id_comp_id_tensor_assoc]
+ Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, tensorHom_id, id_tensorHom,
+ Functor.map_id, comp_whiskerRight, whisker_assoc, assoc, MonoidalCategory.whiskerLeft_comp,
+ Iso.hom_inv_id_assoc, whiskerLeft_hom_inv_assoc, hom_inv_whiskerRight_assoc,
+ Iso.inv_hom_id_assoc, Iso.cancel_iso_inv_left]
+ slice_lhs 5 6 =>
+ rw [← MonoidalCategory.whiskerLeft_comp, hom_inv_whiskerRight]
+ rw [whisker_exchange_assoc]
+ simp
leftUnitor_naturality {X Y : D} f := F.map_injective <| by
- have := leftUnitor_naturality (F.map f)
- simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.leftUnitor_eq,
- Iso.trans_assoc, Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, assoc,
- Iso.hom_inv_id_assoc, id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_inv_left]
- rw [← this, ← assoc, ← tensor_comp, id_comp, comp_id]
+ simp [fData.leftUnitor_eq, fData.tensorHom_eq, whisker_exchange_assoc,
+ id_tensorHom, tensorHom_id]
rightUnitor_naturality {X Y : D} f := F.map_injective <| by
- have := rightUnitor_naturality (F.map f)
- simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.rightUnitor_eq,
- Iso.trans_assoc, Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, assoc,
- Iso.hom_inv_id_assoc, tensor_id_comp_id_tensor_assoc, Iso.cancel_iso_inv_left]
- rw [← this, ← assoc, ← tensor_comp, id_comp, comp_id]
+ simp [fData.rightUnitor_eq, fData.tensorHom_eq, ← whisker_exchange_assoc,
+ id_tensorHom, tensorHom_id]
associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃} f₁ f₂ f₃ := F.map_injective <| by
- have := associator_naturality (F.map f₁) (F.map f₂) (F.map f₃)
- simp [fData.associator_eq, fData.tensorHom_eq]
- simp_rw [← assoc, ← tensor_comp, assoc, Iso.hom_inv_id, ← assoc]
- congr 1
- conv_rhs => rw [← comp_id (F.map f₁), ← id_comp (F.map f₁)]
- simp only [tensor_comp]
- simp only [tensor_id, comp_id, assoc, tensor_hom_inv_id_assoc, id_comp]
- slice_rhs 2 3 => rw [← this]
- simp only [← assoc, Iso.inv_hom_id, comp_id]
- congr 2
- simp_rw [← tensor_comp, id_comp]
-
+ simp [fData.tensorHom_eq, fData.associator_eq, tensorHom_def, whisker_exchange_assoc]
/--
We can upgrade `F` to a monoidal functor from `D` to `E` with the induced structure.
@@ -150,7 +150,8 @@ def fromInduced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
{ toFunctor := F
ε := fData.εIso.hom
μ := fun X Y => (fData.μIso X Y).hom
- μ_natural := by cases fData; aesop_cat
+ μ_natural_left := by cases fData; aesop_cat
+ μ_natural_right := by cases fData; aesop_cat
associativity := by cases fData; aesop_cat
left_unitality := by cases fData; aesop_cat
right_unitality := by cases fData; aesop_cat }
@@ -224,9 +225,8 @@ def toTransported (e : C ≌ D) : MonoidalFunctor C (Transported e) :=
monoidalInverse (fromTransported e)
#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransported
-instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor := by
- dsimp [toTransported]
- infer_instance
+instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor :=
+ inferInstanceAs (IsEquivalence e.functor)
/-- The unit isomorphism upgrades to a monoidal isomorphism. -/
@[simps! hom inv]
@@ -17,7 +17,7 @@ we can transport a monoidal structure on `C` along the equivalence as
More generally, we can transport the lawfulness of a monoidal structure along a suitable faithful
functor, as `CategoryTheory.Monoidal.induced`.
The comparison is analogous to the difference between `Equiv.monoid` and
-`Function.Injective.Monoid`.
+`Function.Injective.monoid`.
We then upgrade the original functor and its inverse to monoidal functors
with respect to the new monoidal structure on `D`.
@@ -117,25 +117,25 @@ abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.leftUnitor_eq,
Iso.trans_assoc, Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, assoc,
Iso.hom_inv_id_assoc, id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_inv_left]
- rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
+ rw [← this, ← assoc, ← tensor_comp, id_comp, comp_id]
rightUnitor_naturality {X Y : D} f := F.map_injective <| by
have := rightUnitor_naturality (F.map f)
simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.rightUnitor_eq,
Iso.trans_assoc, Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, assoc,
Iso.hom_inv_id_assoc, tensor_id_comp_id_tensor_assoc, Iso.cancel_iso_inv_left]
- rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
+ rw [← this, ← assoc, ← tensor_comp, id_comp, comp_id]
associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃} f₁ f₂ f₃ := F.map_injective <| by
have := associator_naturality (F.map f₁) (F.map f₂) (F.map f₃)
simp [fData.associator_eq, fData.tensorHom_eq]
- simp_rw [←assoc, ←tensor_comp, assoc, Iso.hom_inv_id, ←assoc]
+ simp_rw [← assoc, ← tensor_comp, assoc, Iso.hom_inv_id, ← assoc]
congr 1
- conv_rhs => rw [←comp_id (F.map f₁), ←id_comp (F.map f₁)]
+ conv_rhs => rw [← comp_id (F.map f₁), ← id_comp (F.map f₁)]
simp only [tensor_comp]
simp only [tensor_id, comp_id, assoc, tensor_hom_inv_id_assoc, id_comp]
- slice_rhs 2 3 => rw [←this]
+ slice_rhs 2 3 => rw [← this]
simp only [← assoc, Iso.inv_hom_id, comp_id]
congr 2
- simp_rw [←tensor_comp, id_comp]
+ simp_rw [← tensor_comp, id_comp]
/--
μIso
and εIso
(#7922)
Reversing these makes the API closer to that of CategoryTheory.LaxMonoidalFunctor
, and doesn't seem to have much impact on proof difficulty.
This also golfs a proof rather than attempting to fix the old one.
Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
@@ -44,33 +44,33 @@ variable {D : Type u₂} [Category.{v₂} D]
definitions of `⊗`, `𝟙_`, `▷`, `◁` that are preserved by `F`.
-/
structure InducingFunctorData [MonoidalCategoryStruct D] (F : D ⥤ C) where
- /-- Analogous to the reversed version of `CategoryTheory.LaxMonoidalFunctor.μIso` -/
- μIsoSymm : ∀ X Y,
- F.obj (X ⊗ Y) ≅ F.obj X ⊗ F.obj Y
+ /-- Analogous to `CategoryTheory.LaxMonoidalFunctor.μIso` -/
+ μIso : ∀ X Y,
+ F.obj X ⊗ F.obj Y ≅ F.obj (X ⊗ Y)
whiskerLeft_eq : ∀ (X : D) {Y₁ Y₂ : D} (f : Y₁ ⟶ Y₂),
- F.map (X ◁ f) = (μIsoSymm _ _).hom ≫ (F.obj X ◁ F.map f) ≫ (μIsoSymm _ _).inv :=
+ F.map (X ◁ f) = (μIso _ _).inv ≫ (F.obj X ◁ F.map f) ≫ (μIso _ _).hom :=
by aesop_cat
whiskerRight_eq : ∀ {X₁ X₂ : D} (f : X₁ ⟶ X₂) (Y : D),
- F.map (f ▷ Y) = (μIsoSymm _ _).hom ≫ (F.map f ▷ F.obj Y) ≫ (μIsoSymm _ _).inv :=
+ F.map (f ▷ Y) = (μIso _ _).inv ≫ (F.map f ▷ F.obj Y) ≫ (μIso _ _).hom :=
by aesop_cat
tensorHom_eq : ∀ {X₁ Y₁ X₂ Y₂ : D} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂),
- F.map (f ⊗ g) = (μIsoSymm _ _).hom ≫ (F.map f ⊗ F.map g) ≫ (μIsoSymm _ _).inv :=
+ F.map (f ⊗ g) = (μIso _ _).inv ≫ (F.map f ⊗ F.map g) ≫ (μIso _ _).hom :=
by aesop_cat
- /-- Analogous to the reversed version of `CategoryTheory.LaxMonoidalFunctor.εIso` -/
- εIsoSymm : F.obj (𝟙_ _) ≅ 𝟙_ _
+ /-- Analogous to `CategoryTheory.LaxMonoidalFunctor.εIso` -/
+ εIso : 𝟙_ _ ≅ F.obj (𝟙_ _)
associator_eq : ∀ X Y Z : D,
F.map (α_ X Y Z).hom =
- ((μIsoSymm _ _ ≪≫ (μIsoSymm _ _ ⊗ .refl _))
+ (((μIso _ _).symm ≪≫ ((μIso _ _).symm ⊗ .refl _))
≪≫ α_ (F.obj X) (F.obj Y) (F.obj Z)
- ≪≫ ((.refl _ ⊗ (μIsoSymm _ _).symm) ≪≫ (μIsoSymm _ _).symm)).hom :=
+ ≪≫ ((.refl _ ⊗ μIso _ _) ≪≫ μIso _ _)).hom :=
by aesop_cat
leftUnitor_eq : ∀ X : D,
F.map (λ_ X).hom =
- ((μIsoSymm _ _ ≪≫ (εIsoSymm ⊗ .refl _)) ≪≫ λ_ (F.obj X)).hom :=
+ (((μIso _ _).symm ≪≫ (εIso.symm ⊗ .refl _)) ≪≫ λ_ (F.obj X)).hom :=
by aesop_cat
rightUnitor_eq : ∀ X : D,
F.map (ρ_ X).hom =
- ((μIsoSymm _ _ ≪≫ (.refl _ ⊗ εIsoSymm)) ≪≫ ρ_ (F.obj X)).hom :=
+ (((μIso _ _).symm ≪≫ (.refl _ ⊗ εIso.symm)) ≪≫ ρ_ (F.obj X)).hom :=
by aesop_cat
-- these are theorems so don't need docstrings (std4#217)
@@ -95,53 +95,43 @@ abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
MonoidalCategory.{v₂} D where
tensorHom_def {X₁ Y₁ X₂ Y₂} f g := F.map_injective <| by
rw [fData.tensorHom_eq, Functor.map_comp, fData.whiskerRight_eq, fData.whiskerLeft_eq]
- simp only [tensorHom_def, assoc, Iso.inv_hom_id_assoc]
+ simp only [tensorHom_def, assoc, Iso.hom_inv_id_assoc]
tensor_id X₁ X₂ := F.map_injective <| by cases fData; aesop_cat
tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂} f₁ f₂ g₁ g₂ := F.map_injective <| by cases fData; aesop_cat
whiskerLeft_id X Y := F.map_injective <| by simp [fData.whiskerLeft_eq]
id_whiskerRight X Y := F.map_injective <| by simp [fData.whiskerRight_eq]
triangle X Y := F.map_injective <| by cases fData; aesop_cat
pentagon W X Y Z := F.map_injective <| by
- have := MonoidalCategory.pentagon (F.obj W) (F.obj X) (F.obj Y) (F.obj Z)
simp only [Functor.map_comp, fData.tensorHom_eq, fData.associator_eq, Iso.trans_assoc,
- Iso.trans_hom, tensorIso_hom, Iso.refl_hom, Iso.symm_hom, Functor.map_id, comp_tensor_id,
- associator_conjugation, tensor_id, assoc, id_tensor_comp, Iso.inv_hom_id_assoc,
- tensor_inv_hom_id_assoc, id_comp, inv_hom_id_tensor_assoc, id_tensor_comp_tensor_id_assoc,
- Iso.cancel_iso_hom_left]
- congr 1
- simp only [←assoc]
- congr 2
- simp only [assoc, ←tensor_comp, id_comp, Iso.inv_hom_id, tensor_id]
- congr 1
- conv_rhs => rw [←tensor_id_comp_id_tensor]
- simp only [assoc]
- congr 1
- rw [Iso.inv_comp_eq]
- conv_lhs => rw [←id_comp (𝟙 (F.obj W)), tensor_comp]
- slice_lhs 0 2 => rw [this]
- rw [assoc]
- congr 1
- rw [←associator_naturality, tensor_id]
+ Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, Functor.map_id, comp_tensor_id,
+ associator_conjugation, tensor_id, assoc, id_tensor_comp, Iso.hom_inv_id_assoc,
+ tensor_hom_inv_id_assoc, id_comp, hom_inv_id_tensor_assoc, Iso.inv_hom_id_assoc,
+ id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_inv_left]
+ slice_lhs 6 8 =>
+ rw [← id_tensor_comp, hom_inv_id_tensor, tensor_id, comp_id,
+ tensor_id]
+ simp only [comp_id, assoc, pentagon_assoc, Iso.inv_hom_id_assoc,
+ ← associator_naturality_assoc, tensor_id, tensor_id_comp_id_tensor_assoc]
leftUnitor_naturality {X Y : D} f := F.map_injective <| by
have := leftUnitor_naturality (F.map f)
simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.leftUnitor_eq,
- Iso.trans_assoc, Iso.trans_hom, tensorIso_hom, Iso.refl_hom, assoc, Iso.inv_hom_id_assoc,
- id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_hom_left]
+ Iso.trans_assoc, Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, assoc,
+ Iso.hom_inv_id_assoc, id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_inv_left]
rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
rightUnitor_naturality {X Y : D} f := F.map_injective <| by
have := rightUnitor_naturality (F.map f)
simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.rightUnitor_eq,
- Iso.trans_assoc, Iso.trans_hom, tensorIso_hom, Iso.refl_hom, assoc, Iso.inv_hom_id_assoc,
- tensor_id_comp_id_tensor_assoc, Iso.cancel_iso_hom_left]
+ Iso.trans_assoc, Iso.trans_hom, Iso.symm_hom, tensorIso_hom, Iso.refl_hom, assoc,
+ Iso.hom_inv_id_assoc, tensor_id_comp_id_tensor_assoc, Iso.cancel_iso_inv_left]
rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃} f₁ f₂ f₃ := F.map_injective <| by
have := associator_naturality (F.map f₁) (F.map f₂) (F.map f₃)
simp [fData.associator_eq, fData.tensorHom_eq]
- simp_rw [←assoc, ←tensor_comp, assoc, Iso.inv_hom_id, ←assoc]
+ simp_rw [←assoc, ←tensor_comp, assoc, Iso.hom_inv_id, ←assoc]
congr 1
conv_rhs => rw [←comp_id (F.map f₁), ←id_comp (F.map f₁)]
simp only [tensor_comp]
- simp only [tensor_id, comp_id, assoc, tensor_inv_hom_id_assoc, id_comp]
+ simp only [tensor_id, comp_id, assoc, tensor_hom_inv_id_assoc, id_comp]
slice_rhs 2 3 => rw [←this]
simp only [← assoc, Iso.inv_hom_id, comp_id]
congr 2
@@ -158,8 +148,8 @@ def fromInduced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
MonoidalFunctor D C :=
letI := induced F fData
{ toFunctor := F
- ε := fData.εIsoSymm.inv
- μ := fun X Y => (fData.μIsoSymm X Y).inv
+ ε := fData.εIso.hom
+ μ := fun X Y => (fData.μIso X Y).hom
μ_natural := by cases fData; aesop_cat
associativity := by cases fData; aesop_cat
left_unitality := by cases fData; aesop_cat
@@ -191,8 +181,8 @@ def transportStruct (e : C ≌ D) : MonoidalCategoryStruct.{v₂} D where
def transport (e : C ≌ D) : MonoidalCategory.{v₂} D :=
letI : MonoidalCategoryStruct.{v₂} D := transportStruct e
induced e.inverse
- { μIsoSymm := fun X Y => (e.unitIso.app _).symm
- εIsoSymm := (e.unitIso.app _).symm }
+ { μIso := fun X Y => e.unitIso.app _
+ εIso := e.unitIso.app _ }
#align category_theory.monoidal.transport CategoryTheory.Monoidal.transport
/-- A type synonym for `D`, which will carry the transported monoidal structure. -/
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.
@@ -43,58 +43,36 @@ variable {D : Type u₂} [Category.{v₂} D]
/-- The data needed to induce a `MonoidalCategory` via the functor `F`; namely, pre-existing
definitions of `⊗`, `𝟙_`, `▷`, `◁` that are preserved by `F`.
-/
-structure InducingFunctorData (F : D ⥤ C) where
- tensorObj : D → D → D
+structure InducingFunctorData [MonoidalCategoryStruct D] (F : D ⥤ C) where
/-- Analogous to the reversed version of `CategoryTheory.LaxMonoidalFunctor.μIso` -/
μIsoSymm : ∀ X Y,
- F.obj (tensorObj X Y) ≅ F.obj X ⊗ F.obj Y
- whiskerLeft : ∀ (X : D) {Y₁ Y₂ : D} (_f : Y₁ ⟶ Y₂), tensorObj X Y₁ ⟶ tensorObj X Y₂
+ F.obj (X ⊗ Y) ≅ F.obj X ⊗ F.obj Y
whiskerLeft_eq : ∀ (X : D) {Y₁ Y₂ : D} (f : Y₁ ⟶ Y₂),
- F.map (whiskerLeft X f)
- = (μIsoSymm _ _).hom ≫ (F.obj X ◁ F.map f) ≫ (μIsoSymm _ _).inv :=
+ F.map (X ◁ f) = (μIsoSymm _ _).hom ≫ (F.obj X ◁ F.map f) ≫ (μIsoSymm _ _).inv :=
by aesop_cat
- whiskerRight : ∀ {X₁ X₂ : D} (_f : X₁ ⟶ X₂) (Y : D), tensorObj X₁ Y ⟶ tensorObj X₂ Y
whiskerRight_eq : ∀ {X₁ X₂ : D} (f : X₁ ⟶ X₂) (Y : D),
- F.map (whiskerRight f Y)
- = (μIsoSymm _ _).hom ≫ (F.map f ▷ F.obj Y) ≫ (μIsoSymm _ _).inv :=
+ F.map (f ▷ Y) = (μIsoSymm _ _).hom ≫ (F.map f ▷ F.obj Y) ≫ (μIsoSymm _ _).inv :=
by aesop_cat
- tensorHom :
- ∀ {X₁ Y₁ X₂ Y₂ : D} (_f : X₁ ⟶ Y₁) (_g : X₂ ⟶ Y₂), tensorObj X₁ X₂ ⟶ tensorObj Y₁ Y₂
- tensorHom_eq :
- ∀ {X₁ Y₁ X₂ Y₂ : D} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂),
- F.map (tensorHom f g)
- = (μIsoSymm _ _).hom ≫ (F.map f ⊗ F.map g) ≫ (μIsoSymm _ _).inv :=
+ tensorHom_eq : ∀ {X₁ Y₁ X₂ Y₂ : D} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂),
+ F.map (f ⊗ g) = (μIsoSymm _ _).hom ≫ (F.map f ⊗ F.map g) ≫ (μIsoSymm _ _).inv :=
by aesop_cat
- tensorUnit' : D
/-- Analogous to the reversed version of `CategoryTheory.LaxMonoidalFunctor.εIso` -/
- εIsoSymm : F.obj tensorUnit' ≅ 𝟙_ _
- associator : ∀ X Y Z : D, tensorObj (tensorObj X Y) Z ≅ tensorObj X (tensorObj Y Z)
+ εIsoSymm : F.obj (𝟙_ _) ≅ 𝟙_ _
associator_eq : ∀ X Y Z : D,
- F.map (associator X Y Z).hom =
+ F.map (α_ X Y Z).hom =
((μIsoSymm _ _ ≪≫ (μIsoSymm _ _ ⊗ .refl _))
≪≫ α_ (F.obj X) (F.obj Y) (F.obj Z)
≪≫ ((.refl _ ⊗ (μIsoSymm _ _).symm) ≪≫ (μIsoSymm _ _).symm)).hom :=
by aesop_cat
- leftUnitor : ∀ X : D, tensorObj tensorUnit' X ≅ X
leftUnitor_eq : ∀ X : D,
- F.map (leftUnitor X).hom =
+ F.map (λ_ X).hom =
((μIsoSymm _ _ ≪≫ (εIsoSymm ⊗ .refl _)) ≪≫ λ_ (F.obj X)).hom :=
by aesop_cat
- rightUnitor : ∀ X : D, tensorObj X tensorUnit' ≅ X
rightUnitor_eq : ∀ X : D,
- F.map (rightUnitor X).hom =
+ F.map (ρ_ X).hom =
((μIsoSymm _ _ ≪≫ (.refl _ ⊗ εIsoSymm)) ≪≫ ρ_ (F.obj X)).hom :=
by aesop_cat
-attribute [inherit_doc MonoidalCategory.tensorObj] InducingFunctorData.tensorObj
-attribute [inherit_doc MonoidalCategory.whiskerLeft] InducingFunctorData.whiskerLeft
-attribute [inherit_doc MonoidalCategory.whiskerRight] InducingFunctorData.whiskerRight
-attribute [inherit_doc MonoidalCategory.tensorHom] InducingFunctorData.tensorHom
-attribute [inherit_doc MonoidalCategory.tensorUnit'] InducingFunctorData.tensorUnit'
-attribute [inherit_doc MonoidalCategory.associator] InducingFunctorData.associator
-attribute [inherit_doc MonoidalCategory.leftUnitor] InducingFunctorData.leftUnitor
-attribute [inherit_doc MonoidalCategory.rightUnitor] InducingFunctorData.rightUnitor
-
-- these are theorems so don't need docstrings (std4#217)
attribute [nolint docBlame]
InducingFunctorData.whiskerLeft_eq
@@ -112,20 +90,10 @@ The functor `F` must preserve all the data parts of the monoidal structure betwe
categories.
-/
-@[simps]
-abbrev induced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
+abbrev induced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
+ (fData : InducingFunctorData F) :
MonoidalCategory.{v₂} D where
- -- the data fields are exactly as provided
- tensorObj := fData.tensorObj
- whiskerLeft := fData.whiskerLeft
- whiskerRight := fData.whiskerRight
- tensorHom := fData.tensorHom
- tensorUnit' := fData.tensorUnit'
- associator := fData.associator
- leftUnitor := fData.leftUnitor
- rightUnitor := fData.rightUnitor
tensorHom_def {X₁ Y₁ X₂ Y₂} f g := F.map_injective <| by
- dsimp
rw [fData.tensorHom_eq, Functor.map_comp, fData.whiskerRight_eq, fData.whiskerLeft_eq]
simp only [tensorHom_def, assoc, Iso.inv_hom_id_assoc]
tensor_id X₁ X₂ := F.map_injective <| by cases fData; aesop_cat
@@ -135,7 +103,6 @@ abbrev induced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
triangle X Y := F.map_injective <| by cases fData; aesop_cat
pentagon W X Y Z := F.map_injective <| by
have := MonoidalCategory.pentagon (F.obj W) (F.obj X) (F.obj Y) (F.obj Z)
- dsimp
simp only [Functor.map_comp, fData.tensorHom_eq, fData.associator_eq, Iso.trans_assoc,
Iso.trans_hom, tensorIso_hom, Iso.refl_hom, Iso.symm_hom, Functor.map_id, comp_tensor_id,
associator_conjugation, tensor_id, assoc, id_tensor_comp, Iso.inv_hom_id_assoc,
@@ -157,21 +124,18 @@ abbrev induced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
rw [←associator_naturality, tensor_id]
leftUnitor_naturality {X Y : D} f := F.map_injective <| by
have := leftUnitor_naturality (F.map f)
- dsimp
simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.leftUnitor_eq,
Iso.trans_assoc, Iso.trans_hom, tensorIso_hom, Iso.refl_hom, assoc, Iso.inv_hom_id_assoc,
id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_hom_left]
rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
rightUnitor_naturality {X Y : D} f := F.map_injective <| by
have := rightUnitor_naturality (F.map f)
- dsimp
simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.rightUnitor_eq,
Iso.trans_assoc, Iso.trans_hom, tensorIso_hom, Iso.refl_hom, assoc, Iso.inv_hom_id_assoc,
tensor_id_comp_id_tensor_assoc, Iso.cancel_iso_hom_left]
rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃} f₁ f₂ f₃ := F.map_injective <| by
have := associator_naturality (F.map f₁) (F.map f₂) (F.map f₃)
- dsimp
simp [fData.associator_eq, fData.tensorHom_eq]
simp_rw [←assoc, ←tensor_comp, assoc, Iso.inv_hom_id, ←assoc]
congr 1
@@ -188,7 +152,8 @@ abbrev induced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
We can upgrade `F` to a monoidal functor from `D` to `E` with the induced structure.
-/
@[simps]
-def fromInduced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
+def fromInduced [MonoidalCategoryStruct D] (F : D ⥤ C) [Faithful F]
+ (fData : InducingFunctorData F) :
letI := induced F fData
MonoidalFunctor D C :=
letI := induced F fData
@@ -200,28 +165,34 @@ def fromInduced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
left_unitality := by cases fData; aesop_cat
right_unitality := by cases fData; aesop_cat }
+/-- Transport a monoidal structure along an equivalence of (plain) categories.
+-/
+@[simps]
+def transportStruct (e : C ≌ D) : MonoidalCategoryStruct.{v₂} D where
+ tensorObj X Y := e.functor.obj (e.inverse.obj X ⊗ e.inverse.obj Y)
+ whiskerLeft X _ _ f := e.functor.map (e.inverse.obj X ◁ e.inverse.map f)
+ whiskerRight f X := e.functor.map (e.inverse.map f ▷ e.inverse.obj X)
+ tensorHom f g := e.functor.map (e.inverse.map f ⊗ e.inverse.map g)
+ tensorUnit := e.functor.obj (𝟙_ C)
+ associator X Y Z :=
+ e.functor.mapIso
+ (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫
+ α_ (e.inverse.obj X) (e.inverse.obj Y) (e.inverse.obj Z) ≪≫
+ (Iso.refl _ ⊗ e.unitIso.app _))
+ leftUnitor X :=
+ e.functor.mapIso (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫ λ_ (e.inverse.obj X)) ≪≫
+ e.counitIso.app _
+ rightUnitor X :=
+ e.functor.mapIso ((Iso.refl _ ⊗ (e.unitIso.app _).symm) ≪≫ ρ_ (e.inverse.obj X)) ≪≫
+ e.counitIso.app _
+
/-- Transport a monoidal structure along an equivalence of (plain) categories.
-/
def transport (e : C ≌ D) : MonoidalCategory.{v₂} D :=
+ letI : MonoidalCategoryStruct.{v₂} D := transportStruct e
induced e.inverse
- { tensorObj := fun X Y => e.functor.obj (e.inverse.obj X ⊗ e.inverse.obj Y)
- μIsoSymm := fun X Y => (e.unitIso.app _).symm
- whiskerLeft := fun X _ _ f ↦ e.functor.map (e.inverse.obj X ◁ e.inverse.map f)
- whiskerRight := fun f X ↦ e.functor.map (e.inverse.map f ▷ e.inverse.obj X)
- tensorHom := fun f g => e.functor.map (e.inverse.map f ⊗ e.inverse.map g)
- tensorUnit' := e.functor.obj (𝟙_ C)
- εIsoSymm := (e.unitIso.app _).symm
- associator := fun X Y Z =>
- e.functor.mapIso
- (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫
- α_ (e.inverse.obj X) (e.inverse.obj Y) (e.inverse.obj Z) ≪≫
- (Iso.refl _ ⊗ e.unitIso.app _))
- leftUnitor := fun X =>
- e.functor.mapIso (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫ λ_ (e.inverse.obj X)) ≪≫
- e.counitIso.app _
- rightUnitor := fun X =>
- e.functor.mapIso ((Iso.refl _ ⊗ (e.unitIso.app _).symm) ≪≫ ρ_ (e.inverse.obj X)) ≪≫
- e.counitIso.app _ }
+ { μIsoSymm := fun X Y => (e.unitIso.app _).symm
+ εIsoSymm := (e.unitIso.app _).symm }
#align category_theory.monoidal.transport CategoryTheory.Monoidal.transport
/-- A type synonym for `D`, which will carry the transported monoidal structure. -/
@@ -231,7 +202,11 @@ def Transported (_ : C ≌ D) := D
instance (e : C ≌ D) : Category (Transported e) := (inferInstance : Category D)
-instance Transported.instMonoidalCategory (e : C ≌ D): MonoidalCategory (Transported e) :=
+instance Transported.instMonoidalCategoryStruct (e : C ≌ D) :
+ MonoidalCategoryStruct (Transported e) :=
+ transportStruct e
+
+instance Transported.instMonoidalCategory (e : C ≌ D) : MonoidalCategory (Transported e) :=
transport e
instance (e : C ≌ D) : Inhabited (Transported e) :=
@@ -240,7 +215,9 @@ instance (e : C ≌ D) : Inhabited (Transported e) :=
/-- We can upgrade `e.inverse` to a monoidal functor from `D` with the transported structure to `C`.
-/
@[simps!]
-def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C := fromInduced e.inverse _
+def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C := by
+ dsimp only [transport, Transported.instMonoidalCategory]
+ exact fromInduced (D := Transported e) e.inverse _
#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransported
instance instIsEquivalence_fromTransported (e : C ≌ D) :
I needed this to transfer the monoidal structure from ModuleCat
to QuadraticModuleCat
, but would also work for transferring the same structure from ModuleCat
to AlgebraCat
.
The changes are:
CategoryTheory.Monoidal.induced
definition, proven from scratch with slightly uglier proofs than what transport
used. The new proofs use simp
rather more than targeted slice commands, mainly due to lack of patience on my part.CategoryTheory.Monoidal.transport
now has a trivial implementation in terms of induced
, as does CategoryTheory.MonoidalCategory.fullMonoidalSubcategory
(though this was already fairly trivial)CategoryTheory.Monoidal.laxToTransported
has been removed, as it's just a less useful version of CategoryTheory.Monoidal.toTransported
CategoryTheory.Monoidal.toTransported
has been golfed to oblivion, as it now falls out trivially by showing fromTransported
first.@@ -11,8 +11,13 @@ import Mathlib.CategoryTheory.Monoidal.NaturalTransformation
# Transport a monoidal structure along an equivalence.
When `C` and `D` are equivalent as categories,
-we can transport a monoidal structure on `C` along the equivalence,
-obtaining a monoidal structure on `D`.
+we can transport a monoidal structure on `C` along the equivalence as
+`CategoryTheory.Monoidal.transport`, obtaining a monoidal structure on `D`.
+
+More generally, we can transport the lawfulness of a monoidal structure along a suitable faithful
+functor, as `CategoryTheory.Monoidal.induced`.
+The comparison is analogous to the difference between `Equiv.monoid` and
+`Function.Injective.Monoid`.
We then upgrade the original functor and its inverse to monoidal functors
with respect to the new monoidal structure on `D`.
@@ -35,117 +40,188 @@ variable {C : Type u₁} [Category.{v₁} C] [MonoidalCategory.{v₁} C]
variable {D : Type u₂} [Category.{v₂} D]
--- porting note: it was @[simps {attrs := [`_refl_lemma]}]
-/-- Transport a monoidal structure along an equivalence of (plain) categories.
+/-- The data needed to induce a `MonoidalCategory` via the functor `F`; namely, pre-existing
+definitions of `⊗`, `𝟙_`, `▷`, `◁` that are preserved by `F`.
+-/
+structure InducingFunctorData (F : D ⥤ C) where
+ tensorObj : D → D → D
+ /-- Analogous to the reversed version of `CategoryTheory.LaxMonoidalFunctor.μIso` -/
+ μIsoSymm : ∀ X Y,
+ F.obj (tensorObj X Y) ≅ F.obj X ⊗ F.obj Y
+ whiskerLeft : ∀ (X : D) {Y₁ Y₂ : D} (_f : Y₁ ⟶ Y₂), tensorObj X Y₁ ⟶ tensorObj X Y₂
+ whiskerLeft_eq : ∀ (X : D) {Y₁ Y₂ : D} (f : Y₁ ⟶ Y₂),
+ F.map (whiskerLeft X f)
+ = (μIsoSymm _ _).hom ≫ (F.obj X ◁ F.map f) ≫ (μIsoSymm _ _).inv :=
+ by aesop_cat
+ whiskerRight : ∀ {X₁ X₂ : D} (_f : X₁ ⟶ X₂) (Y : D), tensorObj X₁ Y ⟶ tensorObj X₂ Y
+ whiskerRight_eq : ∀ {X₁ X₂ : D} (f : X₁ ⟶ X₂) (Y : D),
+ F.map (whiskerRight f Y)
+ = (μIsoSymm _ _).hom ≫ (F.map f ▷ F.obj Y) ≫ (μIsoSymm _ _).inv :=
+ by aesop_cat
+ tensorHom :
+ ∀ {X₁ Y₁ X₂ Y₂ : D} (_f : X₁ ⟶ Y₁) (_g : X₂ ⟶ Y₂), tensorObj X₁ X₂ ⟶ tensorObj Y₁ Y₂
+ tensorHom_eq :
+ ∀ {X₁ Y₁ X₂ Y₂ : D} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂),
+ F.map (tensorHom f g)
+ = (μIsoSymm _ _).hom ≫ (F.map f ⊗ F.map g) ≫ (μIsoSymm _ _).inv :=
+ by aesop_cat
+ tensorUnit' : D
+ /-- Analogous to the reversed version of `CategoryTheory.LaxMonoidalFunctor.εIso` -/
+ εIsoSymm : F.obj tensorUnit' ≅ 𝟙_ _
+ associator : ∀ X Y Z : D, tensorObj (tensorObj X Y) Z ≅ tensorObj X (tensorObj Y Z)
+ associator_eq : ∀ X Y Z : D,
+ F.map (associator X Y Z).hom =
+ ((μIsoSymm _ _ ≪≫ (μIsoSymm _ _ ⊗ .refl _))
+ ≪≫ α_ (F.obj X) (F.obj Y) (F.obj Z)
+ ≪≫ ((.refl _ ⊗ (μIsoSymm _ _).symm) ≪≫ (μIsoSymm _ _).symm)).hom :=
+ by aesop_cat
+ leftUnitor : ∀ X : D, tensorObj tensorUnit' X ≅ X
+ leftUnitor_eq : ∀ X : D,
+ F.map (leftUnitor X).hom =
+ ((μIsoSymm _ _ ≪≫ (εIsoSymm ⊗ .refl _)) ≪≫ λ_ (F.obj X)).hom :=
+ by aesop_cat
+ rightUnitor : ∀ X : D, tensorObj X tensorUnit' ≅ X
+ rightUnitor_eq : ∀ X : D,
+ F.map (rightUnitor X).hom =
+ ((μIsoSymm _ _ ≪≫ (.refl _ ⊗ εIsoSymm)) ≪≫ ρ_ (F.obj X)).hom :=
+ by aesop_cat
+
+attribute [inherit_doc MonoidalCategory.tensorObj] InducingFunctorData.tensorObj
+attribute [inherit_doc MonoidalCategory.whiskerLeft] InducingFunctorData.whiskerLeft
+attribute [inherit_doc MonoidalCategory.whiskerRight] InducingFunctorData.whiskerRight
+attribute [inherit_doc MonoidalCategory.tensorHom] InducingFunctorData.tensorHom
+attribute [inherit_doc MonoidalCategory.tensorUnit'] InducingFunctorData.tensorUnit'
+attribute [inherit_doc MonoidalCategory.associator] InducingFunctorData.associator
+attribute [inherit_doc MonoidalCategory.leftUnitor] InducingFunctorData.leftUnitor
+attribute [inherit_doc MonoidalCategory.rightUnitor] InducingFunctorData.rightUnitor
+
+-- these are theorems so don't need docstrings (std4#217)
+attribute [nolint docBlame]
+ InducingFunctorData.whiskerLeft_eq
+ InducingFunctorData.whiskerRight_eq
+ InducingFunctorData.tensorHom_eq
+ InducingFunctorData.associator_eq
+ InducingFunctorData.leftUnitor_eq
+ InducingFunctorData.rightUnitor_eq
+
+/--
+Induce the lawfulness of the monoidal structure along an faithful functor of (plain) categories,
+where the operations are already defined on the destination type `D`.
+
+The functor `F` must preserve all the data parts of the monoidal structure between the two
+categories.
+
-/
@[simps]
-def transport (e : C ≌ D) : MonoidalCategory.{v₂} D where
- tensorObj X Y := e.functor.obj (e.inverse.obj X ⊗ e.inverse.obj Y)
- whiskerLeft := fun X _ _ f ↦ e.functor.map (e.inverse.obj X ◁ e.inverse.map f)
- whiskerRight := fun f X ↦ e.functor.map (e.inverse.map f ▷ e.inverse.obj X)
- tensorHom_def := by simp [tensorHom_def]
- tensorHom f g := e.functor.map (e.inverse.map f ⊗ e.inverse.map g)
- tensorUnit' := e.functor.obj (𝟙_ C)
- associator X Y Z :=
- e.functor.mapIso
- (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫
- α_ (e.inverse.obj X) (e.inverse.obj Y) (e.inverse.obj Z) ≪≫ (Iso.refl _ ⊗ e.unitIso.app _))
- leftUnitor X :=
- e.functor.mapIso (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫ λ_ (e.inverse.obj X)) ≪≫
- e.counitIso.app _
- rightUnitor X :=
- e.functor.mapIso ((Iso.refl _ ⊗ (e.unitIso.app _).symm) ≪≫ ρ_ (e.inverse.obj X)) ≪≫
- e.counitIso.app _
- triangle X Y := by
+abbrev induced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
+ MonoidalCategory.{v₂} D where
+ -- the data fields are exactly as provided
+ tensorObj := fData.tensorObj
+ whiskerLeft := fData.whiskerLeft
+ whiskerRight := fData.whiskerRight
+ tensorHom := fData.tensorHom
+ tensorUnit' := fData.tensorUnit'
+ associator := fData.associator
+ leftUnitor := fData.leftUnitor
+ rightUnitor := fData.rightUnitor
+ tensorHom_def {X₁ Y₁ X₂ Y₂} f g := F.map_injective <| by
dsimp
- simp only [Iso.hom_inv_id_app_assoc, comp_tensor_id, Equivalence.unit_inverse_comp, assoc,
- Equivalence.inv_fun_map, comp_id, Functor.map_comp, id_tensor_comp, e.inverse.map_id]
- simp only [← e.functor.map_comp]
- congr 2
- slice_lhs 2 3 =>
- rw [← id_tensor_comp]
- simp
- rw [Category.id_comp, ← associator_naturality_assoc, triangle]
- pentagon W X Y Z := by
+ rw [fData.tensorHom_eq, Functor.map_comp, fData.whiskerRight_eq, fData.whiskerLeft_eq]
+ simp only [tensorHom_def, assoc, Iso.inv_hom_id_assoc]
+ tensor_id X₁ X₂ := F.map_injective <| by cases fData; aesop_cat
+ tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂} f₁ f₂ g₁ g₂ := F.map_injective <| by cases fData; aesop_cat
+ whiskerLeft_id X Y := F.map_injective <| by simp [fData.whiskerLeft_eq]
+ id_whiskerRight X Y := F.map_injective <| by simp [fData.whiskerRight_eq]
+ triangle X Y := F.map_injective <| by cases fData; aesop_cat
+ pentagon W X Y Z := F.map_injective <| by
+ have := MonoidalCategory.pentagon (F.obj W) (F.obj X) (F.obj Y) (F.obj Z)
dsimp
- simp only [Iso.hom_inv_id_app_assoc, comp_tensor_id, assoc, Equivalence.inv_fun_map,
- Functor.map_comp, id_tensor_comp, e.inverse.map_id]
- simp only [← e.functor.map_comp]
- congr 2
- slice_lhs 4 5 =>
- rw [← comp_tensor_id, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id]
- simp only [Category.id_comp, Category.assoc]
- slice_lhs 5 6 =>
- rw [← id_tensor_comp, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id]
- simp only [Category.id_comp, Category.assoc]
- slice_rhs 2 3 => rw [id_tensor_comp_tensor_id, ← tensor_id_comp_id_tensor]
- slice_rhs 1 2 => rw [← tensor_id, ← associator_naturality]
- slice_rhs 3 4 => rw [← tensor_id, associator_naturality]
- slice_rhs 2 3 => rw [← pentagon]
- simp only [Category.assoc]
+ simp only [Functor.map_comp, fData.tensorHom_eq, fData.associator_eq, Iso.trans_assoc,
+ Iso.trans_hom, tensorIso_hom, Iso.refl_hom, Iso.symm_hom, Functor.map_id, comp_tensor_id,
+ associator_conjugation, tensor_id, assoc, id_tensor_comp, Iso.inv_hom_id_assoc,
+ tensor_inv_hom_id_assoc, id_comp, inv_hom_id_tensor_assoc, id_tensor_comp_tensor_id_assoc,
+ Iso.cancel_iso_hom_left]
+ congr 1
+ simp only [←assoc]
congr 2
- slice_lhs 1 2 => rw [associator_naturality]
- simp only [Category.assoc]
+ simp only [assoc, ←tensor_comp, id_comp, Iso.inv_hom_id, tensor_id]
+ congr 1
+ conv_rhs => rw [←tensor_id_comp_id_tensor]
+ simp only [assoc]
+ congr 1
+ rw [Iso.inv_comp_eq]
+ conv_lhs => rw [←id_comp (𝟙 (F.obj W)), tensor_comp]
+ slice_lhs 0 2 => rw [this]
+ rw [assoc]
congr 1
- slice_lhs 1 2 =>
- rw [← id_tensor_comp, ← comp_tensor_id, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id, tensor_id]
- simp only [Category.id_comp, Category.assoc]
- leftUnitor_naturality f := by
+ rw [←associator_naturality, tensor_id]
+ leftUnitor_naturality {X Y : D} f := F.map_injective <| by
+ have := leftUnitor_naturality (F.map f)
dsimp
- simp only [Functor.map_comp, Functor.map_id, Category.assoc]
- erw [← e.counitIso.hom.naturality]
- simp only [Functor.comp_map, ← e.functor.map_comp_assoc]
- congr 2
- rw [id_tensor_comp_tensor_id_assoc, ← tensor_id_comp_id_tensor_assoc,
- leftUnitor_naturality]
- rightUnitor_naturality f := by
+ simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.leftUnitor_eq,
+ Iso.trans_assoc, Iso.trans_hom, tensorIso_hom, Iso.refl_hom, assoc, Iso.inv_hom_id_assoc,
+ id_tensor_comp_tensor_id_assoc, Iso.cancel_iso_hom_left]
+ rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
+ rightUnitor_naturality {X Y : D} f := F.map_injective <| by
+ have := rightUnitor_naturality (F.map f)
dsimp
- simp only [Functor.map_comp, Functor.map_id, Category.assoc]
- erw [← e.counitIso.hom.naturality]
- simp only [Functor.comp_map, ← e.functor.map_comp_assoc]
- congr 2
- erw [tensor_id_comp_id_tensor_assoc, ← id_tensor_comp_tensor_id_assoc,
- rightUnitor_naturality]
- associator_naturality f₁ f₂ f₃ := by
+ simp only [Functor.map_comp, fData.tensorHom_eq, Functor.map_id, fData.rightUnitor_eq,
+ Iso.trans_assoc, Iso.trans_hom, tensorIso_hom, Iso.refl_hom, assoc, Iso.inv_hom_id_assoc,
+ tensor_id_comp_id_tensor_assoc, Iso.cancel_iso_hom_left]
+ rw [←this, ←assoc, ←tensor_comp, id_comp, comp_id]
+ associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃} f₁ f₂ f₃ := F.map_injective <| by
+ have := associator_naturality (F.map f₁) (F.map f₂) (F.map f₃)
dsimp
- simp only [Equivalence.inv_fun_map, Functor.map_comp, Category.assoc]
- simp only [← e.functor.map_comp]
+ simp [fData.associator_eq, fData.tensorHom_eq]
+ simp_rw [←assoc, ←tensor_comp, assoc, Iso.inv_hom_id, ←assoc]
congr 1
- conv_lhs => rw [← tensor_id_comp_id_tensor]
- slice_lhs 2 3 => rw [id_tensor_comp_tensor_id, ← tensor_id_comp_id_tensor, ← tensor_id]
- simp only [Category.assoc]
- slice_lhs 3 4 => rw [associator_naturality]
- conv_lhs => simp only [comp_tensor_id]
- slice_lhs 3 4 =>
- rw [← comp_tensor_id, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id]
- simp only [Category.id_comp, Category.assoc]
- slice_lhs 2 3 => rw [associator_naturality]
- simp only [Category.assoc]
+ conv_rhs => rw [←comp_id (F.map f₁), ←id_comp (F.map f₁)]
+ simp only [tensor_comp]
+ simp only [tensor_id, comp_id, assoc, tensor_inv_hom_id_assoc, id_comp]
+ slice_rhs 2 3 => rw [←this]
+ simp only [← assoc, Iso.inv_hom_id, comp_id]
congr 2
- slice_lhs 1 1 => rw [← tensor_id_comp_id_tensor]
- slice_lhs 2 3 => rw [← id_tensor_comp, tensor_id_comp_id_tensor]
- slice_lhs 1 2 => rw [tensor_id_comp_id_tensor]
- conv_rhs =>
- congr
- · skip
- · rw [← id_tensor_comp_tensor_id, id_tensor_comp]
- simp only [Category.assoc]
- slice_rhs 1 2 =>
- rw [← id_tensor_comp, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id]
- simp only [Category.id_comp, Category.assoc]
- conv_rhs => rw [id_tensor_comp]
- slice_rhs 2 3 => rw [id_tensor_comp_tensor_id, ← tensor_id_comp_id_tensor]
- slice_rhs 1 2 => rw [id_tensor_comp_tensor_id]
+ simp_rw [←tensor_comp, id_comp]
+
+
+/--
+We can upgrade `F` to a monoidal functor from `D` to `E` with the induced structure.
+-/
+@[simps]
+def fromInduced (F : D ⥤ C) [Faithful F] (fData : InducingFunctorData F):
+ letI := induced F fData
+ MonoidalFunctor D C :=
+ letI := induced F fData
+ { toFunctor := F
+ ε := fData.εIsoSymm.inv
+ μ := fun X Y => (fData.μIsoSymm X Y).inv
+ μ_natural := by cases fData; aesop_cat
+ associativity := by cases fData; aesop_cat
+ left_unitality := by cases fData; aesop_cat
+ right_unitality := by cases fData; aesop_cat }
+
+/-- Transport a monoidal structure along an equivalence of (plain) categories.
+-/
+def transport (e : C ≌ D) : MonoidalCategory.{v₂} D :=
+ induced e.inverse
+ { tensorObj := fun X Y => e.functor.obj (e.inverse.obj X ⊗ e.inverse.obj Y)
+ μIsoSymm := fun X Y => (e.unitIso.app _).symm
+ whiskerLeft := fun X _ _ f ↦ e.functor.map (e.inverse.obj X ◁ e.inverse.map f)
+ whiskerRight := fun f X ↦ e.functor.map (e.inverse.map f ▷ e.inverse.obj X)
+ tensorHom := fun f g => e.functor.map (e.inverse.map f ⊗ e.inverse.map g)
+ tensorUnit' := e.functor.obj (𝟙_ C)
+ εIsoSymm := (e.unitIso.app _).symm
+ associator := fun X Y Z =>
+ e.functor.mapIso
+ (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫
+ α_ (e.inverse.obj X) (e.inverse.obj Y) (e.inverse.obj Z) ≪≫
+ (Iso.refl _ ⊗ e.unitIso.app _))
+ leftUnitor := fun X =>
+ e.functor.mapIso (((e.unitIso.app _).symm ⊗ Iso.refl _) ≪≫ λ_ (e.inverse.obj X)) ≪≫
+ e.counitIso.app _
+ rightUnitor := fun X =>
+ e.functor.mapIso ((Iso.refl _ ⊗ (e.unitIso.app _).symm) ≪≫ ρ_ (e.inverse.obj X)) ≪≫
+ e.counitIso.app _ }
#align category_theory.monoidal.transport CategoryTheory.Monoidal.transport
/-- A type synonym for `D`, which will carry the transported monoidal structure. -/
@@ -155,105 +231,16 @@ def Transported (_ : C ≌ D) := D
instance (e : C ≌ D) : Category (Transported e) := (inferInstance : Category D)
-instance (e : C ≌ D) : MonoidalCategory (Transported e) :=
+instance Transported.instMonoidalCategory (e : C ≌ D): MonoidalCategory (Transported e) :=
transport e
instance (e : C ≌ D) : Inhabited (Transported e) :=
⟨𝟙_ _⟩
-section
-
-attribute [local simp] transport_tensorUnit'
-
-section
-
-attribute [local simp]
- transport_tensorHom transport_associator transport_leftUnitor transport_rightUnitor
-
-/--
-We can upgrade `e.functor` to a lax monoidal functor from `C` to `D` with the transported structure.
--/
-@[simps]
-def laxToTransported (e : C ≌ D) : LaxMonoidalFunctor C (Transported e) where
- toFunctor := e.functor
- ε := 𝟙 (e.functor.obj (𝟙_ C))
- μ X Y := e.functor.map (e.unitInv.app X ⊗ e.unitInv.app Y)
- μ_natural f g := by
- dsimp
- rw [Equivalence.inv_fun_map, Equivalence.inv_fun_map, tensor_comp, Functor.map_comp,
- tensor_comp, ← e.functor.map_comp, ← e.functor.map_comp, ← e.functor.map_comp,
- assoc, assoc, ← tensor_comp, Iso.hom_inv_id_app, Iso.hom_inv_id_app, ← tensor_comp]
- dsimp
- rw [comp_id, comp_id]
- associativity X Y Z := by
- dsimp
- rw [Equivalence.inv_fun_map, Equivalence.inv_fun_map, Functor.map_comp,
- Functor.map_comp, assoc, assoc, e.inverse.map_id, e.inverse.map_id,
- comp_tensor_id, id_tensor_comp, Functor.map_comp, assoc, id_tensor_comp,
- comp_tensor_id, ← e.functor.map_comp, ← e.functor.map_comp, ← e.functor.map_comp,
- ← e.functor.map_comp, ← e.functor.map_comp, ← e.functor.map_comp, ← e.functor.map_comp]
- congr 2
- slice_lhs 3 3 => rw [← tensor_id_comp_id_tensor]
- slice_lhs 2 3 =>
- rw [← comp_tensor_id, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id]
- rw [id_comp]
- slice_rhs 2 3 =>
- rw [←id_tensor_comp, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id]
- rw [id_comp]
- conv_rhs => rw [← id_tensor_comp_tensor_id _ (e.unitInv.app X)]
- dsimp only [Functor.comp_obj]
- slice_rhs 3 4 =>
- rw [← id_tensor_comp, Iso.hom_inv_id_app]
- dsimp
- rw [tensor_id]
- simp only [associator_conjugation, ←tensor_id, ←tensor_comp, Iso.inv_hom_id,
- Iso.inv_hom_id_assoc, assoc, id_comp, comp_id]
- left_unitality X := by
- dsimp
- rw [e.inverse.map_id, e.inverse.map_id, tensor_id, Functor.map_comp, assoc,
- Equivalence.counit_app_functor, ← e.functor.map_comp, ← e.functor.map_comp,
- ← e.functor.map_comp, ← e.functor.map_comp, ← leftUnitor_naturality,
- ← tensor_comp_assoc, comp_id, id_comp, id_comp]
- rfl
- right_unitality X := by
- dsimp
- rw [Functor.map_comp, assoc, e.inverse.map_id, e.inverse.map_id, tensor_id,
- Functor.map_id, id_comp, Equivalence.counit_app_functor, ← e.functor.map_comp,
- ← e.functor.map_comp, ← e.functor.map_comp, ← rightUnitor_naturality,
- ← tensor_comp_assoc, id_comp, comp_id]
- rfl
-#align category_theory.monoidal.lax_to_transported CategoryTheory.Monoidal.laxToTransported
-
-end
-
-/-- We can upgrade `e.functor` to a monoidal functor from `C` to `D` with the transported structure.
--/
-@[simps]
-def toTransported (e : C ≌ D) : MonoidalFunctor C (Transported e) where
- toLaxMonoidalFunctor := laxToTransported e
- ε_isIso := by
- dsimp
- infer_instance
- μ_isIso X Y := by
- dsimp
- infer_instance
-#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransported
-
-end
-
-instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor := by
- dsimp
- infer_instance
-
/-- We can upgrade `e.inverse` to a monoidal functor from `D` with the transported structure to `C`.
-/
@[simps!]
-def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C :=
- monoidalInverse (toTransported e)
+def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C := fromInduced e.inverse _
#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransported
instance instIsEquivalence_fromTransported (e : C ≌ D) :
@@ -261,19 +248,33 @@ instance instIsEquivalence_fromTransported (e : C ≌ D) :
dsimp [fromTransported]
infer_instance
+#noalign category_theory.monoidal.lax_to_transported
+
+/-- We can upgrade `e.functor` to a monoidal functor from `C` to `D` with the transported structure.
+-/
+@[simps!]
+def toTransported (e : C ≌ D) : MonoidalFunctor C (Transported e) :=
+ monoidalInverse (fromTransported e)
+#align category_theory.monoidal.to_transported CategoryTheory.Monoidal.toTransported
+
+instance (e : C ≌ D) : IsEquivalence (toTransported e).toFunctor := by
+ dsimp [toTransported]
+ infer_instance
+
/-- The unit isomorphism upgrades to a monoidal isomorphism. -/
@[simps! hom inv]
def transportedMonoidalUnitIso (e : C ≌ D) :
- LaxMonoidalFunctor.id C ≅ laxToTransported e ⊗⋙ (fromTransported e).toLaxMonoidalFunctor :=
- asIso (monoidalUnit (toTransported e))
+ LaxMonoidalFunctor.id C ≅
+ (toTransported e).toLaxMonoidalFunctor ⊗⋙ (fromTransported e).toLaxMonoidalFunctor :=
+ asIso (monoidalCounit (fromTransported e)) |>.symm
#align category_theory.monoidal.transported_monoidal_unit_iso CategoryTheory.Monoidal.transportedMonoidalUnitIso
/-- The counit isomorphism upgrades to a monoidal isomorphism. -/
@[simps! hom inv]
def transportedMonoidalCounitIso (e : C ≌ D) :
- (fromTransported e).toLaxMonoidalFunctor ⊗⋙ laxToTransported e ≅
+ (fromTransported e).toLaxMonoidalFunctor ⊗⋙ (toTransported e).toLaxMonoidalFunctor ≅
LaxMonoidalFunctor.id (Transported e) :=
- asIso (monoidalCounit (toTransported e))
+ asIso (monoidalUnit (fromTransported e)) |>.symm
#align category_theory.monoidal.transported_monoidal_counit_iso CategoryTheory.Monoidal.transportedMonoidalCounitIso
end CategoryTheory.Monoidal
CommMonoid
instance (#7130)
This also names the instances so that the docstring can refer to them.
@@ -256,6 +256,11 @@ def fromTransported (e : C ≌ D) : MonoidalFunctor (Transported e) C :=
monoidalInverse (toTransported e)
#align category_theory.monoidal.from_transported CategoryTheory.Monoidal.fromTransported
+instance instIsEquivalence_fromTransported (e : C ≌ D) :
+ IsEquivalence (fromTransported e).toFunctor := by
+ dsimp [fromTransported]
+ infer_instance
+
/-- The unit isomorphism upgrades to a monoidal isomorphism. -/
@[simps! hom inv]
def transportedMonoidalUnitIso (e : C ≌ D) :
@@ -41,6 +41,9 @@ variable {D : Type u₂} [Category.{v₂} D]
@[simps]
def transport (e : C ≌ D) : MonoidalCategory.{v₂} D where
tensorObj X Y := e.functor.obj (e.inverse.obj X ⊗ e.inverse.obj Y)
+ whiskerLeft := fun X _ _ f ↦ e.functor.map (e.inverse.obj X ◁ e.inverse.map f)
+ whiskerRight := fun f X ↦ e.functor.map (e.inverse.map f ▷ e.inverse.obj X)
+ tensorHom_def := by simp [tensorHom_def]
tensorHom f g := e.functor.map (e.inverse.map f ⊗ e.inverse.map g)
tensorUnit' := e.functor.obj (𝟙_ C)
associator X Y Z :=
@@ -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.transport
-! leanprover-community/mathlib commit 31529827d0f68d1fbd429edc393a928f677f4aba
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Monoidal.NaturalTransformation
+#align_import category_theory.monoidal.transport from "leanprover-community/mathlib"@"31529827d0f68d1fbd429edc393a928f677f4aba"
+
/-!
# Transport a monoidal structure along an equivalence.
This PR is the result of running
find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;
which firstly replaces .
focusing dots with ·
and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.
@@ -135,8 +135,8 @@ def transport (e : C ≌ D) : MonoidalCategory.{v₂} D where
slice_lhs 1 2 => rw [tensor_id_comp_id_tensor]
conv_rhs =>
congr
- . skip
- . rw [← id_tensor_comp_tensor_id, id_tensor_comp]
+ · skip
+ · rw [← id_tensor_comp_tensor_id, id_tensor_comp]
simp only [Category.assoc]
slice_rhs 1 2 =>
rw [← id_tensor_comp, Iso.hom_inv_id_app]
All dependencies are ported!