category_theory.monoidal.transportMathlib.CategoryTheory.Monoidal.Transport

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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`.
Diff
@@ -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
 
Diff
@@ -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"
 
Diff
@@ -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.
 
Diff
@@ -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
 
Diff
@@ -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 -/
 /--
Diff
@@ -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]
Diff
@@ -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
Diff
@@ -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`.
Diff
@@ -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]

Changes in mathlib4

mathlib3
mathlib4
chore(CategoryTheory): move Full, Faithful, EssSurj, IsEquivalence and ReflectsIsomorphisms to the Functor namespace (#11985)

These notions on functors are now Functor.Full, Functor.Faithful, Functor.EssSurj, Functor.IsEquivalence, Functor.ReflectsIsomorphisms. Deprecated aliases are introduced for the previous names.

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

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -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
feat(CategoryTheory/Monoidal): replace 𝟙 X ⊗ f with X ◁ f (#10912)

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

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

Extracted from #6307. The main reason why #6307 is so large is that many tensoring of identity morphisms that appear in mathlib should be replaced with whiskerings. This PR will leave this issue and deal with other parts. That is, we do not set id_tensorHom and tensorHom_id as simple lemmas at this moment, We can set them as simp lemmas locally to enable simple normal forms.

Diff
@@ -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.
refactor(CategoryTheory/Monoidal): split the naturality condition of monoidal functors (#9988)

Extracted from #6307. We replace μ_natural with μ_natural_left and μ_natural_right since we prefer to use the whiskerings to the tensor of morphisms in the refactor #6307.

Diff
@@ -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]
chore: tidy various files (#8823)
Diff
@@ -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`.
chore: space after (#8178)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -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]
 
 
 /--
refactor(CategoryTheory/Monoidal/Transport): flip the direction of μ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>

Diff
@@ -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. -/
refactor: Move the data fields of 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.

Diff
@@ -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) :
feat(CategoryTheory/Monoidal/Transport): generalize to a faithful functor (#7237)

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:

  • A new 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.
Diff
@@ -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
feat(CategoryTheory/Monoidal/Skeleton): CommMonoid instance (#7130)

This also names the instances so that the docstring can refer to them.

Diff
@@ -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) :
feat(CategoryTheory/Monoidal): define whiskering operators (#6420)

Extracted from #6307. Just put the whiskerings into the constructor.

Diff
@@ -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 :=
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,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.
 
chore: fix focusing dots (#5708)

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.

Diff
@@ -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]
feat: port CategoryTheory.Monoidal.Transport (#3151)

Dependencies 19

20 files ported (100.0%)
5961 lines ported (100.0%)

All dependencies are ported!