category_theory.limits.preserves.shapes.products
⟷
Mathlib.CategoryTheory.Limits.Preserves.Shapes.Products
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison, Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
-/
-import Mathbin.CategoryTheory.Limits.Shapes.Products
-import Mathbin.CategoryTheory.Limits.Preserves.Basic
+import CategoryTheory.Limits.Shapes.Products
+import CategoryTheory.Limits.Preserves.Basic
#align_import category_theory.limits.preserves.shapes.products from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2020 Scott Morrison, Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
-
-! This file was ported from Lean 3 source module category_theory.limits.preserves.shapes.products
-! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Limits.Shapes.Products
import Mathbin.CategoryTheory.Limits.Preserves.Basic
+#align_import category_theory.limits.preserves.shapes.products from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
+
/-!
# Preserving products
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -42,6 +42,7 @@ namespace CategoryTheory.Limits
variable {J : Type w} (f : J → C)
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
+#print CategoryTheory.Limits.isLimitMapConeFanMkEquiv /-
/-- The map of a fan is a limit iff the fan consisting of the mapped morphisms is a limit. This
essentially lets us commute `fan.mk` with `functor.map_cone`.
-/
@@ -57,25 +58,31 @@ def isLimitMapConeFanMkEquiv {P : C} (g : ∀ j, P ⟶ f j) :
"./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]";
dsimp; simp
#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquiv
+-/
+#print CategoryTheory.Limits.isLimitFanMkObjOfIsLimit /-
/-- The property of preserving products expressed in terms of fans. -/
def isLimitFanMkObjOfIsLimit [PreservesLimit (Discrete.functor f) G] {P : C} (g : ∀ j, P ⟶ f j)
(t : IsLimit (Fan.mk _ g)) :
IsLimit (Fan.mk (G.obj P) fun j => G.map (g j) : Fan fun j => G.obj (f j)) :=
isLimitMapConeFanMkEquiv _ _ _ (PreservesLimit.preserves t)
#align category_theory.limits.is_limit_fan_mk_obj_of_is_limit CategoryTheory.Limits.isLimitFanMkObjOfIsLimit
+-/
+#print CategoryTheory.Limits.isLimitOfIsLimitFanMkObj /-
/-- The property of reflecting products expressed in terms of fans. -/
def isLimitOfIsLimitFanMkObj [ReflectsLimit (Discrete.functor f) G] {P : C} (g : ∀ j, P ⟶ f j)
(t : IsLimit (Fan.mk _ fun j => G.map (g j) : Fan fun j => G.obj (f j))) :
IsLimit (Fan.mk P g) :=
ReflectsLimit.reflects ((isLimitMapConeFanMkEquiv _ _ _).symm t)
#align category_theory.limits.is_limit_of_is_limit_fan_mk_obj CategoryTheory.Limits.isLimitOfIsLimitFanMkObj
+-/
section
variable [HasProduct f]
+#print CategoryTheory.Limits.isLimitOfHasProductOfPreservesLimit /-
/--
If `G` preserves products and `C` has them, then the fan constructed of the mapped projection of a
product is a limit.
@@ -84,9 +91,11 @@ def isLimitOfHasProductOfPreservesLimit [PreservesLimit (Discrete.functor f) G]
IsLimit (Fan.mk _ fun j : J => G.map (Pi.π f j) : Fan fun j => G.obj (f j)) :=
isLimitFanMkObjOfIsLimit G f _ (productIsProduct _)
#align category_theory.limits.is_limit_of_has_product_of_preserves_limit CategoryTheory.Limits.isLimitOfHasProductOfPreservesLimit
+-/
variable [HasProduct fun j : J => G.obj (f j)]
+#print CategoryTheory.Limits.PreservesProduct.ofIsoComparison /-
/-- If `pi_comparison G f` is an isomorphism, then `G` preserves the limit of `f`. -/
def PreservesProduct.ofIsoComparison [i : IsIso (piComparison G f)] :
PreservesLimit (Discrete.functor f) G :=
@@ -96,9 +105,11 @@ def PreservesProduct.ofIsoComparison [i : IsIso (piComparison G f)] :
apply is_limit.of_point_iso (limit.is_limit (discrete.functor fun j : J => G.obj (f j)))
apply i
#align category_theory.limits.preserves_product.of_iso_comparison CategoryTheory.Limits.PreservesProduct.ofIsoComparison
+-/
variable [PreservesLimit (Discrete.functor f) G]
+#print CategoryTheory.Limits.PreservesProduct.iso /-
/--
If `G` preserves limits, we have an isomorphism from the image of a product to the product of the
images.
@@ -106,11 +117,14 @@ images.
def PreservesProduct.iso : G.obj (∏ f) ≅ ∏ fun j => G.obj (f j) :=
IsLimit.conePointUniqueUpToIso (isLimitOfHasProductOfPreservesLimit G f) (limit.isLimit _)
#align category_theory.limits.preserves_product.iso CategoryTheory.Limits.PreservesProduct.iso
+-/
+#print CategoryTheory.Limits.PreservesProduct.iso_hom /-
@[simp]
theorem PreservesProduct.iso_hom : (PreservesProduct.iso G f).Hom = piComparison G f :=
rfl
#align category_theory.limits.preserves_product.iso_hom CategoryTheory.Limits.PreservesProduct.iso_hom
+-/
instance : IsIso (piComparison G f) :=
by
@@ -120,6 +134,7 @@ instance : IsIso (piComparison G f) :=
end
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
+#print CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv /-
/-- The map of a cofan is a colimit iff the cofan consisting of the mapped morphisms is a colimit.
This essentially lets us commute `cofan.mk` with `functor.map_cocone`.
-/
@@ -135,14 +150,18 @@ def isColimitMapCoconeCofanMkEquiv {P : C} (g : ∀ j, f j ⟶ P) :
"./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]";
dsimp; simp
#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv
+-/
+#print CategoryTheory.Limits.isColimitCofanMkObjOfIsColimit /-
/-- The property of preserving coproducts expressed in terms of cofans. -/
def isColimitCofanMkObjOfIsColimit [PreservesColimit (Discrete.functor f) G] {P : C}
(g : ∀ j, f j ⟶ P) (t : IsColimit (Cofan.mk _ g)) :
IsColimit (Cofan.mk (G.obj P) fun j => G.map (g j) : Cofan fun j => G.obj (f j)) :=
isColimitMapCoconeCofanMkEquiv _ _ _ (PreservesColimit.preserves t)
#align category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit CategoryTheory.Limits.isColimitCofanMkObjOfIsColimit
+-/
+#print CategoryTheory.Limits.isColimitOfIsColimitCofanMkObj /-
/-- The property of reflecting coproducts expressed in terms of cofans. -/
def isColimitOfIsColimitCofanMkObj [ReflectsColimit (Discrete.functor f) G] {P : C}
(g : ∀ j, f j ⟶ P)
@@ -150,11 +169,13 @@ def isColimitOfIsColimitCofanMkObj [ReflectsColimit (Discrete.functor f) G] {P :
IsColimit (Cofan.mk P g) :=
ReflectsColimit.reflects ((isColimitMapCoconeCofanMkEquiv _ _ _).symm t)
#align category_theory.limits.is_colimit_of_is_colimit_cofan_mk_obj CategoryTheory.Limits.isColimitOfIsColimitCofanMkObj
+-/
section
variable [HasCoproduct f]
+#print CategoryTheory.Limits.isColimitOfHasCoproductOfPreservesColimit /-
/-- If `G` preserves coproducts and `C` has them,
then the cofan constructed of the mapped inclusion of a coproduct is a colimit.
-/
@@ -162,9 +183,11 @@ def isColimitOfHasCoproductOfPreservesColimit [PreservesColimit (Discrete.functo
IsColimit (Cofan.mk _ fun j : J => G.map (Sigma.ι f j) : Cofan fun j => G.obj (f j)) :=
isColimitCofanMkObjOfIsColimit G f _ (coproductIsCoproduct _)
#align category_theory.limits.is_colimit_of_has_coproduct_of_preserves_colimit CategoryTheory.Limits.isColimitOfHasCoproductOfPreservesColimit
+-/
variable [HasCoproduct fun j : J => G.obj (f j)]
+#print CategoryTheory.Limits.PreservesCoproduct.ofIsoComparison /-
/-- If `sigma_comparison G f` is an isomorphism, then `G` preserves the colimit of `f`. -/
def PreservesCoproduct.ofIsoComparison [i : IsIso (sigmaComparison G f)] :
PreservesColimit (Discrete.functor f) G :=
@@ -174,9 +197,11 @@ def PreservesCoproduct.ofIsoComparison [i : IsIso (sigmaComparison G f)] :
apply is_colimit.of_point_iso (colimit.is_colimit (discrete.functor fun j : J => G.obj (f j)))
apply i
#align category_theory.limits.preserves_coproduct.of_iso_comparison CategoryTheory.Limits.PreservesCoproduct.ofIsoComparison
+-/
variable [PreservesColimit (Discrete.functor f) G]
+#print CategoryTheory.Limits.PreservesCoproduct.iso /-
/-- If `G` preserves colimits,
we have an isomorphism from the image of a coproduct to the coproduct of the images.
-/
@@ -184,11 +209,14 @@ def PreservesCoproduct.iso : G.obj (∐ f) ≅ ∐ fun j => G.obj (f j) :=
IsColimit.coconePointUniqueUpToIso (isColimitOfHasCoproductOfPreservesColimit G f)
(colimit.isColimit _)
#align category_theory.limits.preserves_coproduct.iso CategoryTheory.Limits.PreservesCoproduct.iso
+-/
+#print CategoryTheory.Limits.PreservesCoproduct.inv_hom /-
@[simp]
theorem PreservesCoproduct.inv_hom : (PreservesCoproduct.iso G f).inv = sigmaComparison G f :=
rfl
#align category_theory.limits.preserves_coproduct.inv_hom CategoryTheory.Limits.PreservesCoproduct.inv_hom
+-/
instance : IsIso (sigmaComparison G f) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -41,12 +41,6 @@ namespace CategoryTheory.Limits
variable {J : Type w} (f : J → C)
-/- warning: category_theory.limits.is_limit_map_cone_fan_mk_equiv -> CategoryTheory.Limits.isLimitMapConeFanMkEquiv is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), Equiv.{max (succ u1) (succ u5) (succ u3), max (succ u1) (succ u5) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P (f j) (g j))))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), Equiv.{max (max (succ u5) (succ u1)) (succ u3), max (max (succ u5) (succ u1)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 G (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (b : J) => f b)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P (f j) (g j))))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquivₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
/-- The map of a fan is a limit iff the fan consisting of the mapped morphisms is a limit. This
essentially lets us commute `fan.mk` with `functor.map_cone`.
@@ -64,12 +58,6 @@ def isLimitMapConeFanMkEquiv {P : C} (g : ∀ j, P ⟶ f j) :
dsimp; simp
#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquiv
-/- warning: category_theory.limits.is_limit_fan_mk_obj_of_is_limit -> CategoryTheory.Limits.isLimitFanMkObjOfIsLimit is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P (f j) (g j))))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P (f j) (g j))))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_fan_mk_obj_of_is_limit CategoryTheory.Limits.isLimitFanMkObjOfIsLimitₓ'. -/
/-- The property of preserving products expressed in terms of fans. -/
def isLimitFanMkObjOfIsLimit [PreservesLimit (Discrete.functor f) G] {P : C} (g : ∀ j, P ⟶ f j)
(t : IsLimit (Fan.mk _ g)) :
@@ -77,12 +65,6 @@ def isLimitFanMkObjOfIsLimit [PreservesLimit (Discrete.functor f) G] {P : C} (g
isLimitMapConeFanMkEquiv _ _ _ (PreservesLimit.preserves t)
#align category_theory.limits.is_limit_fan_mk_obj_of_is_limit CategoryTheory.Limits.isLimitFanMkObjOfIsLimit
-/- warning: category_theory.limits.is_limit_of_is_limit_fan_mk_obj -> CategoryTheory.Limits.isLimitOfIsLimitFanMkObj is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P (f j) (g j)))) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P (f j) (g j)))) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_is_limit_fan_mk_obj CategoryTheory.Limits.isLimitOfIsLimitFanMkObjₓ'. -/
/-- The property of reflecting products expressed in terms of fans. -/
def isLimitOfIsLimitFanMkObj [ReflectsLimit (Discrete.functor f) G] {P : C} (g : ∀ j, P ⟶ f j)
(t : IsLimit (Fan.mk _ fun j => G.map (g j) : Fan fun j => G.obj (f j))) :
@@ -94,12 +76,6 @@ section
variable [HasProduct f]
-/- warning: category_theory.limits.is_limit_of_has_product_of_preserves_limit -> CategoryTheory.Limits.isLimitOfHasProductOfPreservesLimit is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3) (f j) (CategoryTheory.Limits.Pi.π.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3) (f j) (CategoryTheory.Limits.Pi.π.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_has_product_of_preserves_limit CategoryTheory.Limits.isLimitOfHasProductOfPreservesLimitₓ'. -/
/--
If `G` preserves products and `C` has them, then the fan constructed of the mapped projection of a
product is a limit.
@@ -111,12 +87,6 @@ def isLimitOfHasProductOfPreservesLimit [PreservesLimit (Discrete.functor f) G]
variable [HasProduct fun j : J => G.obj (f j)]
-/- warning: category_theory.limits.preserves_product.of_iso_comparison -> CategoryTheory.Limits.PreservesProduct.ofIsoComparison is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f b)) _inst_4) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f b)) _inst_4) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_product.of_iso_comparison CategoryTheory.Limits.PreservesProduct.ofIsoComparisonₓ'. -/
/-- If `pi_comparison G f` is an isomorphism, then `G` preserves the limit of `f`. -/
def PreservesProduct.ofIsoComparison [i : IsIso (piComparison G f)] :
PreservesLimit (Discrete.functor f) G :=
@@ -129,12 +99,6 @@ def PreservesProduct.ofIsoComparison [i : IsIso (piComparison G f)] :
variable [PreservesLimit (Discrete.functor f) G]
-/- warning: category_theory.limits.preserves_product.iso -> CategoryTheory.Limits.PreservesProduct.iso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4)
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_product.iso CategoryTheory.Limits.PreservesProduct.isoₓ'. -/
/--
If `G` preserves limits, we have an isomorphism from the image of a product to the product of the
images.
@@ -143,12 +107,6 @@ def PreservesProduct.iso : G.obj (∏ f) ≅ ∏ fun j => G.obj (f j) :=
IsLimit.conePointUniqueUpToIso (isLimitOfHasProductOfPreservesLimit G f) (limit.isLimit _)
#align category_theory.limits.preserves_product.iso CategoryTheory.Limits.PreservesProduct.iso
-/- warning: category_theory.limits.preserves_product.iso_hom -> CategoryTheory.Limits.PreservesProduct.iso_hom is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4)) (CategoryTheory.Iso.hom.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4) (CategoryTheory.Limits.PreservesProduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4)) (CategoryTheory.Iso.hom.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4) (CategoryTheory.Limits.PreservesProduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_product.iso_hom CategoryTheory.Limits.PreservesProduct.iso_homₓ'. -/
@[simp]
theorem PreservesProduct.iso_hom : (PreservesProduct.iso G f).Hom = piComparison G f :=
rfl
@@ -161,12 +119,6 @@ instance : IsIso (piComparison G f) :=
end
-/- warning: category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv -> CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), Equiv.{max (succ u1) (succ u5) (succ u3), max (succ u1) (succ u5) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCocone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) P (g j))))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), Equiv.{max (max (succ u5) (succ u1)) (succ u3), max (max (succ u5) (succ u1)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCocone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 G (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (b : J) => f b)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) P (g j))))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquivₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
/-- The map of a cofan is a colimit iff the cofan consisting of the mapped morphisms is a colimit.
This essentially lets us commute `cofan.mk` with `functor.map_cocone`.
@@ -184,12 +136,6 @@ def isColimitMapCoconeCofanMkEquiv {P : C} (g : ∀ j, f j ⟶ P) :
dsimp; simp
#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv
-/- warning: category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit -> CategoryTheory.Limits.isColimitCofanMkObjOfIsColimit is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) P (g j))))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) P (g j))))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit CategoryTheory.Limits.isColimitCofanMkObjOfIsColimitₓ'. -/
/-- The property of preserving coproducts expressed in terms of cofans. -/
def isColimitCofanMkObjOfIsColimit [PreservesColimit (Discrete.functor f) G] {P : C}
(g : ∀ j, f j ⟶ P) (t : IsColimit (Cofan.mk _ g)) :
@@ -197,12 +143,6 @@ def isColimitCofanMkObjOfIsColimit [PreservesColimit (Discrete.functor f) G] {P
isColimitMapCoconeCofanMkEquiv _ _ _ (PreservesColimit.preserves t)
#align category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit CategoryTheory.Limits.isColimitCofanMkObjOfIsColimit
-/- warning: category_theory.limits.is_colimit_of_is_colimit_cofan_mk_obj -> CategoryTheory.Limits.isColimitOfIsColimitCofanMkObj is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) P (g j)))) -> (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) P (g j)))) -> (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_is_colimit_cofan_mk_obj CategoryTheory.Limits.isColimitOfIsColimitCofanMkObjₓ'. -/
/-- The property of reflecting coproducts expressed in terms of cofans. -/
def isColimitOfIsColimitCofanMkObj [ReflectsColimit (Discrete.functor f) G] {P : C}
(g : ∀ j, f j ⟶ P)
@@ -215,12 +155,6 @@ section
variable [HasCoproduct f]
-/- warning: category_theory.limits.is_colimit_of_has_coproduct_of_preserves_colimit -> CategoryTheory.Limits.isColimitOfHasCoproductOfPreservesColimit is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3) (CategoryTheory.Limits.Sigma.ι.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3) (CategoryTheory.Limits.Sigma.ι.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_has_coproduct_of_preserves_colimit CategoryTheory.Limits.isColimitOfHasCoproductOfPreservesColimitₓ'. -/
/-- If `G` preserves coproducts and `C` has them,
then the cofan constructed of the mapped inclusion of a coproduct is a colimit.
-/
@@ -231,12 +165,6 @@ def isColimitOfHasCoproductOfPreservesColimit [PreservesColimit (Discrete.functo
variable [HasCoproduct fun j : J => G.obj (f j)]
-/- warning: category_theory.limits.preserves_coproduct.of_iso_comparison -> CategoryTheory.Limits.PreservesCoproduct.ofIsoComparison is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f b)) _inst_4) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f b)) _inst_4) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_coproduct.of_iso_comparison CategoryTheory.Limits.PreservesCoproduct.ofIsoComparisonₓ'. -/
/-- If `sigma_comparison G f` is an isomorphism, then `G` preserves the colimit of `f`. -/
def PreservesCoproduct.ofIsoComparison [i : IsIso (sigmaComparison G f)] :
PreservesColimit (Discrete.functor f) G :=
@@ -249,12 +177,6 @@ def PreservesCoproduct.ofIsoComparison [i : IsIso (sigmaComparison G f)] :
variable [PreservesColimit (Discrete.functor f) G]
-/- warning: category_theory.limits.preserves_coproduct.iso -> CategoryTheory.Limits.PreservesCoproduct.iso is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4)
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_coproduct.iso CategoryTheory.Limits.PreservesCoproduct.isoₓ'. -/
/-- If `G` preserves colimits,
we have an isomorphism from the image of a coproduct to the coproduct of the images.
-/
@@ -263,12 +185,6 @@ def PreservesCoproduct.iso : G.obj (∐ f) ≅ ∐ fun j => G.obj (f j) :=
(colimit.isColimit _)
#align category_theory.limits.preserves_coproduct.iso CategoryTheory.Limits.PreservesCoproduct.iso
-/- warning: category_theory.limits.preserves_coproduct.inv_hom -> CategoryTheory.Limits.PreservesCoproduct.inv_hom is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3))) (CategoryTheory.Iso.inv.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4) (CategoryTheory.Limits.PreservesCoproduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
-but is expected to have type
- forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3))) (CategoryTheory.Iso.inv.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4) (CategoryTheory.Limits.PreservesCoproduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_coproduct.inv_hom CategoryTheory.Limits.PreservesCoproduct.inv_homₓ'. -/
@[simp]
theorem PreservesCoproduct.inv_hom : (PreservesCoproduct.iso G f).inv = sigmaComparison G f :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -58,12 +58,10 @@ def isLimitMapConeFanMkEquiv {P : C} (g : ∀ j, P ⟶ f j) :
refine' (is_limit.postcompose_hom_equiv _ _).symm.trans (is_limit.equiv_iso_limit _)
refine' discrete.nat_iso fun j => iso.refl (G.obj (f j.as))
refine'
- cones.ext (iso.refl _) fun j =>
- by
+ cones.ext (iso.refl _) fun j => by
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]"
- dsimp
- simp
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]";
+ dsimp; simp
#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquiv
/- warning: category_theory.limits.is_limit_fan_mk_obj_of_is_limit -> CategoryTheory.Limits.isLimitFanMkObjOfIsLimit is a dubious translation:
@@ -180,12 +178,10 @@ def isColimitMapCoconeCofanMkEquiv {P : C} (g : ∀ j, f j ⟶ P) :
refine' (is_colimit.precompose_hom_equiv _ _).symm.trans (is_colimit.equiv_iso_colimit _)
refine' discrete.nat_iso fun j => iso.refl (G.obj (f j.as))
refine'
- cocones.ext (iso.refl _) fun j =>
- by
+ cocones.ext (iso.refl _) fun j => by
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]"
- dsimp
- simp
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]";
+ dsimp; simp
#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv
/- warning: category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit -> CategoryTheory.Limits.isColimitCofanMkObjOfIsColimit is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
! This file was ported from Lean 3 source module category_theory.limits.preserves.shapes.products
-! leanprover-community/mathlib commit 024a4231815538ac739f52d08dd20a55da0d6b23
+! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.CategoryTheory.Limits.Preserves.Basic
/-!
# Preserving products
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Constructions to relate the notions of preserving products and reflecting products
to concrete fans.
mathlib commit https://github.com/leanprover-community/mathlib/commit/3b267e70a936eebb21ab546f49a8df34dd300b25
@@ -38,6 +38,12 @@ namespace CategoryTheory.Limits
variable {J : Type w} (f : J → C)
+/- warning: category_theory.limits.is_limit_map_cone_fan_mk_equiv -> CategoryTheory.Limits.isLimitMapConeFanMkEquiv is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), Equiv.{max (succ u1) (succ u5) (succ u3), max (succ u1) (succ u5) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P (f j) (g j))))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), Equiv.{max (max (succ u5) (succ u1)) (succ u3), max (max (succ u5) (succ u1)) (succ u3)} (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 G (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (b : J) => f b)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P (f j) (g j))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquivₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
/-- The map of a fan is a limit iff the fan consisting of the mapped morphisms is a limit. This
essentially lets us commute `fan.mk` with `functor.map_cone`.
@@ -57,6 +63,12 @@ def isLimitMapConeFanMkEquiv {P : C} (g : ∀ j, P ⟶ f j) :
simp
#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquiv
+/- warning: category_theory.limits.is_limit_fan_mk_obj_of_is_limit -> CategoryTheory.Limits.isLimitFanMkObjOfIsLimit is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P (f j) (g j))))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P (f j) (g j))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_fan_mk_obj_of_is_limit CategoryTheory.Limits.isLimitFanMkObjOfIsLimitₓ'. -/
/-- The property of preserving products expressed in terms of fans. -/
def isLimitFanMkObjOfIsLimit [PreservesLimit (Discrete.functor f) G] {P : C} (g : ∀ j, P ⟶ f j)
(t : IsLimit (Fan.mk _ g)) :
@@ -64,6 +76,12 @@ def isLimitFanMkObjOfIsLimit [PreservesLimit (Discrete.functor f) G] {P : C} (g
isLimitMapConeFanMkEquiv _ _ _ (PreservesLimit.preserves t)
#align category_theory.limits.is_limit_fan_mk_obj_of_is_limit CategoryTheory.Limits.isLimitFanMkObjOfIsLimit
+/- warning: category_theory.limits.is_limit_of_is_limit_fan_mk_obj -> CategoryTheory.Limits.isLimitOfIsLimitFanMkObj is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P (f j) (g j)))) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) P (f j)), (CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P (f j) (g j)))) -> (CategoryTheory.Limits.IsLimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Fan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_is_limit_fan_mk_obj CategoryTheory.Limits.isLimitOfIsLimitFanMkObjₓ'. -/
/-- The property of reflecting products expressed in terms of fans. -/
def isLimitOfIsLimitFanMkObj [ReflectsLimit (Discrete.functor f) G] {P : C} (g : ∀ j, P ⟶ f j)
(t : IsLimit (Fan.mk _ fun j => G.map (g j) : Fan fun j => G.obj (f j))) :
@@ -75,6 +93,12 @@ section
variable [HasProduct f]
+/- warning: category_theory.limits.is_limit_of_has_product_of_preserves_limit -> CategoryTheory.Limits.isLimitOfHasProductOfPreservesLimit is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3) (f j) (CategoryTheory.Limits.Pi.π.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsLimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Fan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3) (f j) (CategoryTheory.Limits.Pi.π.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit_of_has_product_of_preserves_limit CategoryTheory.Limits.isLimitOfHasProductOfPreservesLimitₓ'. -/
/--
If `G` preserves products and `C` has them, then the fan constructed of the mapped projection of a
product is a limit.
@@ -86,6 +110,12 @@ def isLimitOfHasProductOfPreservesLimit [PreservesLimit (Discrete.functor f) G]
variable [HasProduct fun j : J => G.obj (f j)]
+/- warning: category_theory.limits.preserves_product.of_iso_comparison -> CategoryTheory.Limits.PreservesProduct.ofIsoComparison is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f b)) _inst_4) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f b)) _inst_4) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_product.of_iso_comparison CategoryTheory.Limits.PreservesProduct.ofIsoComparisonₓ'. -/
/-- If `pi_comparison G f` is an isomorphism, then `G` preserves the limit of `f`. -/
def PreservesProduct.ofIsoComparison [i : IsIso (piComparison G f)] :
PreservesLimit (Discrete.functor f) G :=
@@ -98,6 +128,12 @@ def PreservesProduct.ofIsoComparison [i : IsIso (piComparison G f)] :
variable [PreservesLimit (Discrete.functor f) G]
+/- warning: category_theory.limits.preserves_product.iso -> CategoryTheory.Limits.PreservesProduct.iso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4)
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_product.iso CategoryTheory.Limits.PreservesProduct.isoₓ'. -/
/--
If `G` preserves limits, we have an isomorphism from the image of a product to the product of the
images.
@@ -106,6 +142,12 @@ def PreservesProduct.iso : G.obj (∏ f) ≅ ∏ fun j => G.obj (f j) :=
IsLimit.conePointUniqueUpToIso (isLimitOfHasProductOfPreservesLimit G f) (limit.isLimit _)
#align category_theory.limits.preserves_product.iso CategoryTheory.Limits.PreservesProduct.iso
+/- warning: category_theory.limits.preserves_product.iso_hom -> CategoryTheory.Limits.PreservesProduct.iso_hom is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4)) (CategoryTheory.Iso.hom.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4) (CategoryTheory.Limits.PreservesProduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasProduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasProduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesLimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4)) (CategoryTheory.Iso.hom.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.piObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.piObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4) (CategoryTheory.Limits.PreservesProduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.piComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_product.iso_hom CategoryTheory.Limits.PreservesProduct.iso_homₓ'. -/
@[simp]
theorem PreservesProduct.iso_hom : (PreservesProduct.iso G f).Hom = piComparison G f :=
rfl
@@ -118,6 +160,12 @@ instance : IsIso (piComparison G f) :=
end
+/- warning: category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv -> CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), Equiv.{max (succ u1) (succ u5) (succ u3), max (succ u1) (succ u5) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCocone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) P (g j))))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), Equiv.{max (max (succ u5) (succ u1)) (succ u3), max (max (succ u5) (succ u1)) (succ u3)} (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Functor.comp.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) G) (CategoryTheory.Functor.mapCocone.{u1, u2, u3, u1, u4, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 D _inst_2 G (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (b : J) => f b)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))) (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) P (g j))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquivₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
/-- The map of a cofan is a colimit iff the cofan consisting of the mapped morphisms is a colimit.
This essentially lets us commute `cofan.mk` with `functor.map_cocone`.
@@ -137,6 +185,12 @@ def isColimitMapCoconeCofanMkEquiv {P : C} (g : ∀ j, f j ⟶ P) :
simp
#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv
+/- warning: category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit -> CategoryTheory.Limits.isColimitCofanMkObjOfIsColimit is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) P (g j))))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) P (g j))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit CategoryTheory.Limits.isColimitCofanMkObjOfIsColimitₓ'. -/
/-- The property of preserving coproducts expressed in terms of cofans. -/
def isColimitCofanMkObjOfIsColimit [PreservesColimit (Discrete.functor f) G] {P : C}
(g : ∀ j, f j ⟶ P) (t : IsColimit (Cofan.mk _ g)) :
@@ -144,6 +198,12 @@ def isColimitCofanMkObjOfIsColimit [PreservesColimit (Discrete.functor f) G] {P
isColimitMapCoconeCofanMkEquiv _ _ _ (PreservesColimit.preserves t)
#align category_theory.limits.is_colimit_cofan_mk_obj_of_is_colimit CategoryTheory.Limits.isColimitCofanMkObjOfIsColimit
+/- warning: category_theory.limits.is_colimit_of_is_colimit_cofan_mk_obj -> CategoryTheory.Limits.isColimitOfIsColimitCofanMkObj is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G P) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) P (g j)))) -> (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.ReflectsColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G] {P : C} (g : forall (j : J), Quiver.Hom.{succ u2, u4} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (f j) P), (CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) P) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) P (g j)))) -> (CategoryTheory.Limits.IsColimit.{u1, u2, u1, u4} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) C _inst_1 (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J (fun (j : J) => f j)) (CategoryTheory.Limits.Cofan.mk.{u1, u2, u4} J C _inst_1 (fun (j : J) => f j) P g))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_is_colimit_cofan_mk_obj CategoryTheory.Limits.isColimitOfIsColimitCofanMkObjₓ'. -/
/-- The property of reflecting coproducts expressed in terms of cofans. -/
def isColimitOfIsColimitCofanMkObj [ReflectsColimit (Discrete.functor f) G] {P : C}
(g : ∀ j, f j ⟶ P)
@@ -156,6 +216,12 @@ section
variable [HasCoproduct f]
+/- warning: category_theory.limits.is_colimit_of_has_coproduct_of_preserves_colimit -> CategoryTheory.Limits.isColimitOfHasCoproductOfPreservesColimit is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => CategoryTheory.Functor.map.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3) (CategoryTheory.Limits.Sigma.ι.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Limits.IsColimit.{u1, u3, u1, u5} (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) D _inst_2 (CategoryTheory.Discrete.functor.{u3, u1, u5} D _inst_2 J (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))) (CategoryTheory.Limits.Cofan.mk.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (fun (j : J) => Prefunctor.map.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3) (CategoryTheory.Limits.Sigma.ι.{u1, u2, u4} J C _inst_1 f _inst_3 j)))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit_of_has_coproduct_of_preserves_colimit CategoryTheory.Limits.isColimitOfHasCoproductOfPreservesColimitₓ'. -/
/-- If `G` preserves coproducts and `C` has them,
then the cofan constructed of the mapped inclusion of a coproduct is a colimit.
-/
@@ -166,6 +232,12 @@ def isColimitOfHasCoproductOfPreservesColimit [PreservesColimit (Discrete.functo
variable [HasCoproduct fun j : J => G.obj (f j)]
+/- warning: category_theory.limits.preserves_coproduct.of_iso_comparison -> CategoryTheory.Limits.PreservesCoproduct.ofIsoComparison is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f b)) _inst_4) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [i : CategoryTheory.IsIso.{u3, u5} D _inst_2 (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (b : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f b)) _inst_4) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)], CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_coproduct.of_iso_comparison CategoryTheory.Limits.PreservesCoproduct.ofIsoComparisonₓ'. -/
/-- If `sigma_comparison G f` is an isomorphism, then `G` preserves the colimit of `f`. -/
def PreservesCoproduct.ofIsoComparison [i : IsIso (sigmaComparison G f)] :
PreservesColimit (Discrete.functor f) G :=
@@ -178,6 +250,12 @@ def PreservesCoproduct.ofIsoComparison [i : IsIso (sigmaComparison G f)] :
variable [PreservesColimit (Discrete.functor f) G]
+/- warning: category_theory.limits.preserves_coproduct.iso -> CategoryTheory.Limits.PreservesCoproduct.iso is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4)
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], CategoryTheory.Iso.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_coproduct.iso CategoryTheory.Limits.PreservesCoproduct.isoₓ'. -/
/-- If `G` preserves colimits,
we have an isomorphism from the image of a coproduct to the coproduct of the images.
-/
@@ -186,6 +264,12 @@ def PreservesCoproduct.iso : G.obj (∐ f) ≅ ∐ fun j => G.obj (f j) :=
(colimit.isColimit _)
#align category_theory.limits.preserves_coproduct.iso CategoryTheory.Limits.PreservesCoproduct.iso
+/- warning: category_theory.limits.preserves_coproduct.inv_hom -> CategoryTheory.Limits.PreservesCoproduct.inv_hom is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4) (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3))) (CategoryTheory.Iso.inv.{u3, u5} D _inst_2 (CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => CategoryTheory.Functor.obj.{u2, u3, u4, u5} C _inst_1 D _inst_2 G (f j)) _inst_4) (CategoryTheory.Limits.PreservesCoproduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
+but is expected to have type
+ forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (G : CategoryTheory.Functor.{u2, u3, u4, u5} C _inst_1 D _inst_2) {J : Type.{u1}} (f : J -> C) [_inst_3 : CategoryTheory.Limits.HasCoproduct.{u1, u2, u4} J C _inst_1 f] [_inst_4 : CategoryTheory.Limits.HasCoproduct.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j))] [_inst_5 : CategoryTheory.Limits.PreservesColimit.{u1, u1, u2, u3, u4, u5} C _inst_1 D _inst_2 (CategoryTheory.Discrete.{u1} J) (CategoryTheory.discreteCategory.{u1} J) (CategoryTheory.Discrete.functor.{u2, u1, u4} C _inst_1 J f) G], Eq.{succ u3} (Quiver.Hom.{succ u3, u5} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4) (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3))) (CategoryTheory.Iso.inv.{u3, u5} D _inst_2 (Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (CategoryTheory.Limits.sigmaObj.{u1, u2, u4} J C _inst_1 f _inst_3)) (CategoryTheory.Limits.sigmaObj.{u1, u3, u5} J D _inst_2 (fun (j : J) => Prefunctor.obj.{succ u2, succ u3, u4, u5} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, u3, u4, u5} C _inst_1 D _inst_2 G) (f j)) _inst_4) (CategoryTheory.Limits.PreservesCoproduct.iso.{u1, u2, u3, u4, u5} C _inst_1 D _inst_2 G J f _inst_3 _inst_4 _inst_5)) (CategoryTheory.Limits.sigmaComparison.{u1, u2, u3, u4, u5} J C _inst_1 D _inst_2 G f _inst_3 _inst_4)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.preserves_coproduct.inv_hom CategoryTheory.Limits.PreservesCoproduct.inv_homₓ'. -/
@[simp]
theorem PreservesCoproduct.inv_hom : (PreservesCoproduct.iso G f).inv = sigmaComparison G f :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -38,7 +38,7 @@ namespace CategoryTheory.Limits
variable {J : Type w} (f : J → C)
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `discrete_cases #[] -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
/-- The map of a fan is a limit iff the fan consisting of the mapped morphisms is a limit. This
essentially lets us commute `fan.mk` with `functor.map_cone`.
-/
@@ -52,7 +52,7 @@ def isLimitMapConeFanMkEquiv {P : C} (g : ∀ j, P ⟶ f j) :
cones.ext (iso.refl _) fun j =>
by
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `discrete_cases #[]"
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]"
dsimp
simp
#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquiv
@@ -118,7 +118,7 @@ instance : IsIso (piComparison G f) :=
end
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `discrete_cases #[] -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[] -/
/-- The map of a cofan is a colimit iff the cofan consisting of the mapped morphisms is a colimit.
This essentially lets us commute `cofan.mk` with `functor.map_cocone`.
-/
@@ -132,7 +132,7 @@ def isColimitMapCoconeCofanMkEquiv {P : C} (g : ∀ j, f j ⟶ P) :
cocones.ext (iso.refl _) fun j =>
by
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `discrete_cases #[]"
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `discrete_cases #[]"
dsimp
simp
#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -40,7 +40,7 @@ def isLimitMapConeFanMkEquiv {P : C} (g : ∀ j, P ⟶ f j) :
IsLimit (Functor.mapCone G (Fan.mk P g)) ≃
IsLimit (Fan.mk _ fun j => G.map (g j) : Fan fun j => G.obj (f j)) := by
refine' (IsLimit.postcomposeHomEquiv _ _).symm.trans (IsLimit.equivIsoLimit _)
- refine' Discrete.natIso fun j => Iso.refl (G.obj (f j.as))
+ · refine' Discrete.natIso fun j => Iso.refl (G.obj (f j.as))
refine' Cones.ext (Iso.refl _) fun j =>
by dsimp; cases j; simp
#align category_theory.limits.is_limit_map_cone_fan_mk_equiv CategoryTheory.Limits.isLimitMapConeFanMkEquiv
@@ -112,7 +112,7 @@ def isColimitMapCoconeCofanMkEquiv {P : C} (g : ∀ j, f j ⟶ P) :
IsColimit (Functor.mapCocone G (Cofan.mk P g)) ≃
IsColimit (Cofan.mk _ fun j => G.map (g j) : Cofan fun j => G.obj (f j)) := by
refine' (IsColimit.precomposeHomEquiv _ _).symm.trans (IsColimit.equivIsoColimit _)
- refine' Discrete.natIso fun j => Iso.refl (G.obj (f j.as))
+ · refine' Discrete.natIso fun j => Iso.refl (G.obj (f j.as))
refine' Cocones.ext (Iso.refl _) fun j => by dsimp; cases j; simp
#align category_theory.limits.is_colimit_map_cocone_cofan_mk_equiv CategoryTheory.Limits.isColimitMapCoconeCofanMkEquiv
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)
@@ -26,9 +26,7 @@ universe w v₁ v₂ u₁ u₂
open CategoryTheory CategoryTheory.Category CategoryTheory.Limits
variable {C : Type u₁} [Category.{v₁} C]
-
variable {D : Type u₂} [Category.{v₂} D]
-
variable (G : C ⥤ D)
namespace CategoryTheory.Limits
@@ -2,15 +2,12 @@
Copyright (c) 2020 Scott Morrison, Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison, Bhavik Mehta
-
-! This file was ported from Lean 3 source module category_theory.limits.preserves.shapes.products
-! leanprover-community/mathlib commit 024a4231815538ac739f52d08dd20a55da0d6b23
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Limits.Shapes.Products
import Mathlib.CategoryTheory.Limits.Preserves.Basic
+#align_import category_theory.limits.preserves.shapes.products from "leanprover-community/mathlib"@"024a4231815538ac739f52d08dd20a55da0d6b23"
+
/-!
# Preserving products
vscode is already configured by .vscode/settings.json
to trim these on save. It's not clear how they've managed to stick around.
By doing this all in one PR now, it avoids getting random whitespace diffs in PRs later.
This was done with a regex search in vscode,
@@ -84,7 +84,7 @@ def PreservesProduct.ofIsoComparison [i : IsIso (piComparison G f)] :
PreservesLimit (Discrete.functor f) G := by
apply preservesLimitOfPreservesLimitCone (productIsProduct f)
apply (isLimitMapConeFanMkEquiv _ _ _).symm _
- refine @IsLimit.ofPointIso _ _ _ _ _ _ _
+ refine @IsLimit.ofPointIso _ _ _ _ _ _ _
(limit.isLimit (Discrete.functor fun j : J => G.obj (f j))) ?_
apply i
#align category_theory.limits.preserves_product.of_iso_comparison CategoryTheory.Limits.PreservesProduct.ofIsoComparison
@@ -155,7 +155,7 @@ def PreservesCoproduct.ofIsoComparison [i : IsIso (sigmaComparison G f)] :
PreservesColimit (Discrete.functor f) G := by
apply preservesColimitOfPreservesColimitCocone (coproductIsCoproduct f)
apply (isColimitMapCoconeCofanMkEquiv _ _ _).symm _
- refine @IsColimit.ofPointIso _ _ _ _ _ _ _
+ refine @IsColimit.ofPointIso _ _ _ _ _ _ _
(colimit.isColimit (Discrete.functor fun j : J => G.obj (f j))) ?_
apply i
#align category_theory.limits.preserves_coproduct.of_iso_comparison CategoryTheory.Limits.PreservesCoproduct.ofIsoComparison
@@ -181,4 +181,3 @@ instance : IsIso (sigmaComparison G f) := by
end
end CategoryTheory.Limits
-
All dependencies are ported!