category_theory.limits.cone_category
⟷
Mathlib.CategoryTheory.Limits.ConeCategory
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,7 +5,7 @@ Authors: Andrew Yang
-/
import CategoryTheory.Adjunction.Comma
import CategoryTheory.Limits.Preserves.Shapes.Terminal
-import CategoryTheory.StructuredArrow
+import CategoryTheory.Comma.StructuredArrow
import CategoryTheory.Limits.Shapes.Equivalence
#align_import category_theory.limits.cone_category from "leanprover-community/mathlib"@"69c6a5a12d8a2b159f20933e60115a4f2de62b58"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2021 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-/
-import Mathbin.CategoryTheory.Adjunction.Comma
-import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Terminal
-import Mathbin.CategoryTheory.StructuredArrow
-import Mathbin.CategoryTheory.Limits.Shapes.Equivalence
+import CategoryTheory.Adjunction.Comma
+import CategoryTheory.Limits.Preserves.Shapes.Terminal
+import CategoryTheory.StructuredArrow
+import CategoryTheory.Limits.Shapes.Equivalence
#align_import category_theory.limits.cone_category from "leanprover-community/mathlib"@"69c6a5a12d8a2b159f20933e60115a4f2de62b58"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2021 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module category_theory.limits.cone_category
-! leanprover-community/mathlib commit 69c6a5a12d8a2b159f20933e60115a4f2de62b58
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Adjunction.Comma
import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Terminal
import Mathbin.CategoryTheory.StructuredArrow
import Mathbin.CategoryTheory.Limits.Shapes.Equivalence
+#align_import category_theory.limits.cone_category from "leanprover-community/mathlib"@"69c6a5a12d8a2b159f20933e60115a4f2de62b58"
+
/-!
# Limits and the category of (co)cones
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -65,6 +65,7 @@ def Cone.fromCostructuredArrow (F : J ⥤ C) : CostructuredArrow (const J) F ⥤
#align category_theory.limits.cone.from_costructured_arrow CategoryTheory.Limits.Cone.fromCostructuredArrow
-/
+#print CategoryTheory.Limits.Cone.equivCostructuredArrow /-
/-- The category of cones on `F` is just the comma category `(Δ ↓ F)`, where `Δ` is the constant
functor. -/
@[simps]
@@ -73,6 +74,7 @@ def Cone.equivCostructuredArrow (F : J ⥤ C) : Cone F ≌ CostructuredArrow (co
(NatIso.ofComponents Cones.eta (by tidy))
(NatIso.ofComponents (fun c => (CostructuredArrow.eta _).symm) (by tidy))
#align category_theory.limits.cone.equiv_costructured_arrow CategoryTheory.Limits.Cone.equivCostructuredArrow
+-/
#print CategoryTheory.Limits.Cone.isLimitEquivIsTerminal /-
/-- A cone is a limit cone iff it is terminal. -/
@@ -121,17 +123,21 @@ theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsT
#align category_theory.limits.is_terminal.from_eq_lift_cone_morphism CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism
-/
+#print CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal /-
/-- If `G : cone F ⥤ cone F'` preserves terminal objects, it preserves limit cones. -/
def IsLimit.ofPreservesConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[PreservesLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit c) : IsLimit (G.obj c) :=
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalObj _ _
#align category_theory.limits.is_limit.of_preserves_cone_terminal CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal
+-/
+#print CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal /-
/-- If `G : cone F ⥤ cone F'` reflects terminal objects, it reflects limit cones. -/
def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[ReflectsLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit (G.obj c)) : IsLimit c :=
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalOfObj _ _
#align category_theory.limits.is_limit.of_reflects_cone_terminal CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal
+-/
#print CategoryTheory.Limits.Cocone.toStructuredArrow /-
/-- Construct an object of the category `(F ↓ Δ)` from a cocone on `F`. This is part of an
@@ -157,6 +163,7 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
#align category_theory.limits.cocone.from_structured_arrow CategoryTheory.Limits.Cocone.fromStructuredArrow
-/
+#print CategoryTheory.Limits.Cocone.equivStructuredArrow /-
/-- The category of cocones on `F` is just the comma category `(F ↓ Δ)`, where `Δ` is the constant
functor. -/
@[simps]
@@ -165,6 +172,7 @@ def Cocone.equivStructuredArrow (F : J ⥤ C) : Cocone F ≌ StructuredArrow F (
(NatIso.ofComponents Cocones.eta (by tidy))
(NatIso.ofComponents (fun c => (StructuredArrow.eta _).symm) (by tidy))
#align category_theory.limits.cocone.equiv_structured_arrow CategoryTheory.Limits.Cocone.equivStructuredArrow
+-/
#print CategoryTheory.Limits.Cocone.isColimitEquivIsInitial /-
/-- A cocone is a colimit cocone iff it is initial. -/
@@ -214,13 +222,16 @@ theorem IsInitial.to_eq_descCoconeMorphism {F : J ⥤ C} {c : Cocone F} (hc : Is
#align category_theory.limits.is_initial.to_eq_desc_cocone_morphism CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism
-/
+#print CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial /-
/-- If `G : cocone F ⥤ cocone F'` preserves initial objects, it preserves colimit cocones. -/
def IsColimit.ofPreservesCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
[PreservesColimit (Functor.empty.{0} _) G] {c : Cocone F} (hc : IsColimit c) :
IsColimit (G.obj c) :=
(Cocone.isColimitEquivIsInitial _).symm <| (Cocone.isColimitEquivIsInitial _ hc).isInitialObj _ _
#align category_theory.limits.is_colimit.of_preserves_cocone_initial CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial
+-/
+#print CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitial /-
/-- If `G : cocone F ⥤ cocone F'` reflects initial objects, it reflects colimit cocones. -/
def IsColimit.ofReflectsCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
[ReflectsColimit (Functor.empty.{0} _) G] {c : Cocone F} (hc : IsColimit (G.obj c)) :
@@ -228,6 +239,7 @@ def IsColimit.ofReflectsCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F
(Cocone.isColimitEquivIsInitial _).symm <|
(Cocone.isColimitEquivIsInitial _ hc).isInitialOfObj _ _
#align category_theory.limits.is_colimit.of_reflects_cocone_initial CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitial
+-/
end CategoryTheory.Limits
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -103,7 +103,6 @@ theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
(forall_congr' fun F => (Cone.equivCostructuredArrow F).hasTerminal_iff)
_ ↔ Nonempty (IsLeftAdjoint (const J : C ⥤ _)) :=
nonempty_isLeftAdjoint_iff_hasTerminal_costructuredArrow.symm
-
#align category_theory.limits.has_limits_of_shape_iff_is_left_adjoint_const CategoryTheory.Limits.hasLimitsOfShape_iff_isLeftAdjoint_const
-/
@@ -196,7 +195,6 @@ theorem hasColimitsOfShape_iff_isRightAdjoint_const :
(forall_congr' fun F => (Cocone.equivStructuredArrow F).hasInitial_iff)
_ ↔ Nonempty (IsRightAdjoint (const J : C ⥤ _)) :=
nonempty_isRightAdjoint_iff_hasInitial_structuredArrow.symm
-
#align category_theory.limits.has_colimits_of_shape_iff_is_right_adjoint_const CategoryTheory.Limits.hasColimitsOfShape_iff_isRightAdjoint_const
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -118,7 +118,7 @@ theorem IsLimit.liftConeMorphism_eq_isTerminal_from {F : J ⥤ C} {c : Cone F} (
theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsTerminal c)
(s : Cone F) :
IsTerminal.from hc s = ((Cone.isLimitEquivIsTerminal _).symm hc).liftConeMorphism s := by
- convert(is_limit.lift_cone_morphism_eq_is_terminal_from _ s).symm
+ convert (is_limit.lift_cone_morphism_eq_is_terminal_from _ s).symm
#align category_theory.limits.is_terminal.from_eq_lift_cone_morphism CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism
-/
@@ -154,7 +154,7 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
obj c := ⟨c.right, c.Hom⟩
map c d f :=
{ Hom := f.right
- w' := fun j => by convert(congr_fun (congr_arg nat_trans.app f.w) j).symm; dsimp; simp }
+ w' := fun j => by convert (congr_fun (congr_arg nat_trans.app f.w) j).symm; dsimp; simp }
#align category_theory.limits.cocone.from_structured_arrow CategoryTheory.Limits.Cocone.fromStructuredArrow
-/
@@ -212,7 +212,7 @@ theorem IsColimit.descCoconeMorphism_eq_isInitial_to {F : J ⥤ C} {c : Cocone F
theorem IsInitial.to_eq_descCoconeMorphism {F : J ⥤ C} {c : Cocone F} (hc : IsInitial c)
(s : Cocone F) :
IsInitial.to hc s = ((Cocone.isColimitEquivIsInitial _).symm hc).descCoconeMorphism s := by
- convert(is_colimit.desc_cocone_morphism_eq_is_initial_to _ s).symm
+ convert (is_colimit.desc_cocone_morphism_eq_is_initial_to _ s).symm
#align category_theory.limits.is_initial.to_eq_desc_cocone_morphism CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -65,12 +65,6 @@ def Cone.fromCostructuredArrow (F : J ⥤ C) : CostructuredArrow (const J) F ⥤
#align category_theory.limits.cone.from_costructured_arrow CategoryTheory.Limits.Cone.fromCostructuredArrow
-/
-/- warning: category_theory.limits.cone.equiv_costructured_arrow -> CategoryTheory.Limits.Cone.equivCostructuredArrow is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max u3 u4 u2, max u4 u3 u2} (CategoryTheory.Limits.Cone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.CostructuredArrow.{u2, max u3 u2, u4, max u1 u2 u3 u4} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F) (CategoryTheory.CostructuredArrow.category.{max u3 u2, max u1 u2 u3 u4, u4, u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F)
-but is expected to have type
- forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max (max u4 u3) u2, max u4 u3 u2} (CategoryTheory.Limits.Cone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.CostructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u1) u4) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F) (CategoryTheory.Limits.Cone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.instCategoryCostructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u4) u1) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.cone.equiv_costructured_arrow CategoryTheory.Limits.Cone.equivCostructuredArrowₓ'. -/
/-- The category of cones on `F` is just the comma category `(Δ ↓ F)`, where `Δ` is the constant
functor. -/
@[simps]
@@ -128,24 +122,12 @@ theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsT
#align category_theory.limits.is_terminal.from_eq_lift_cone_morphism CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism
-/
-/- warning: category_theory.limits.is_limit.of_preserves_cone_terminal -> CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesLimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c))
-but is expected to have type
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesLimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit.of_preserves_cone_terminal CategoryTheory.Limits.IsLimit.ofPreservesConeTerminalₓ'. -/
/-- If `G : cone F ⥤ cone F'` preserves terminal objects, it preserves limit cones. -/
def IsLimit.ofPreservesConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[PreservesLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit c) : IsLimit (G.obj c) :=
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalObj _ _
#align category_theory.limits.is_limit.of_preserves_cone_terminal CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal
-/- warning: category_theory.limits.is_limit.of_reflects_cone_terminal -> CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsLimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
-but is expected to have type
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsLimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit.of_reflects_cone_terminal CategoryTheory.Limits.IsLimit.ofReflectsConeTerminalₓ'. -/
/-- If `G : cone F ⥤ cone F'` reflects terminal objects, it reflects limit cones. -/
def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[ReflectsLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit (G.obj c)) : IsLimit c :=
@@ -176,12 +158,6 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
#align category_theory.limits.cocone.from_structured_arrow CategoryTheory.Limits.Cocone.fromStructuredArrow
-/
-/- warning: category_theory.limits.cocone.equiv_structured_arrow -> CategoryTheory.Limits.Cocone.equivStructuredArrow is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max u3 u4 u2, max u4 u3 u2} (CategoryTheory.Limits.Cocone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.StructuredArrow.{u2, max u3 u2, u4, max u1 u2 u3 u4} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3)) (CategoryTheory.StructuredArrow.category.{max u3 u2, max u1 u2 u3 u4, u4, u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3))
-but is expected to have type
- forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max (max u4 u3) u2, max u4 u3 u2} (CategoryTheory.Limits.Cocone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.StructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u4) u1) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3)) (CategoryTheory.Limits.Cocone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.instCategoryStructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u4) u1) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.cocone.equiv_structured_arrow CategoryTheory.Limits.Cocone.equivStructuredArrowₓ'. -/
/-- The category of cocones on `F` is just the comma category `(F ↓ Δ)`, where `Δ` is the constant
functor. -/
@[simps]
@@ -240,12 +216,6 @@ theorem IsInitial.to_eq_descCoconeMorphism {F : J ⥤ C} {c : Cocone F} (hc : Is
#align category_theory.limits.is_initial.to_eq_desc_cocone_morphism CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism
-/
-/- warning: category_theory.limits.is_colimit.of_preserves_cocone_initial -> CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesColimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c))
-but is expected to have type
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesColimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit.of_preserves_cocone_initial CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitialₓ'. -/
/-- If `G : cocone F ⥤ cocone F'` preserves initial objects, it preserves colimit cocones. -/
def IsColimit.ofPreservesCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
[PreservesColimit (Functor.empty.{0} _) G] {c : Cocone F} (hc : IsColimit c) :
@@ -253,12 +223,6 @@ def IsColimit.ofPreservesCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone
(Cocone.isColimitEquivIsInitial _).symm <| (Cocone.isColimitEquivIsInitial _ hc).isInitialObj _ _
#align category_theory.limits.is_colimit.of_preserves_cocone_initial CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial
-/- warning: category_theory.limits.is_colimit.of_reflects_cocone_initial -> CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitial is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsColimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
-but is expected to have type
- forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsColimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit.of_reflects_cocone_initial CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitialₓ'. -/
/-- If `G : cocone F ⥤ cocone F'` reflects initial objects, it reflects colimit cocones. -/
def IsColimit.ofReflectsCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
[ReflectsColimit (Functor.empty.{0} _) G] {c : Cocone F} (hc : IsColimit (G.obj c)) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -48,10 +48,7 @@ variable {C : Type u₃} [Category.{v₃} C] {D : Type u₄} [Category.{v₄} D]
def Cone.toCostructuredArrow (F : J ⥤ C) : Cone F ⥤ CostructuredArrow (const J) F
where
obj c := CostructuredArrow.mk c.π
- map c d f :=
- CostructuredArrow.homMk f.Hom <| by
- ext
- simp
+ map c d f := CostructuredArrow.homMk f.Hom <| by ext; simp
#align category_theory.limits.cone.to_costructured_arrow CategoryTheory.Limits.Cone.toCostructuredArrow
-/
@@ -64,10 +61,7 @@ def Cone.fromCostructuredArrow (F : J ⥤ C) : CostructuredArrow (const J) F ⥤
obj c := ⟨c.left, c.Hom⟩
map c d f :=
{ Hom := f.left
- w' := fun j => by
- convert congr_fun (congr_arg nat_trans.app f.w) j
- dsimp
- simp }
+ w' := fun j => by convert congr_fun (congr_arg nat_trans.app f.w) j; dsimp; simp }
#align category_theory.limits.cone.from_costructured_arrow CategoryTheory.Limits.Cone.fromCostructuredArrow
-/
@@ -165,10 +159,7 @@ def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤
def Cocone.toStructuredArrow (F : J ⥤ C) : Cocone F ⥤ StructuredArrow F (const J)
where
obj c := StructuredArrow.mk c.ι
- map c d f :=
- StructuredArrow.homMk f.Hom <| by
- ext
- simp
+ map c d f := StructuredArrow.homMk f.Hom <| by ext; simp
#align category_theory.limits.cocone.to_structured_arrow CategoryTheory.Limits.Cocone.toStructuredArrow
-/
@@ -181,10 +172,7 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
obj c := ⟨c.right, c.Hom⟩
map c d f :=
{ Hom := f.right
- w' := fun j => by
- convert(congr_fun (congr_arg nat_trans.app f.w) j).symm
- dsimp
- simp }
+ w' := fun j => by convert(congr_fun (congr_arg nat_trans.app f.w) j).symm; dsimp; simp }
#align category_theory.limits.cocone.from_structured_arrow CategoryTheory.Limits.Cocone.fromStructuredArrow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -130,7 +130,7 @@ theorem IsLimit.liftConeMorphism_eq_isTerminal_from {F : J ⥤ C} {c : Cone F} (
theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsTerminal c)
(s : Cone F) :
IsTerminal.from hc s = ((Cone.isLimitEquivIsTerminal _).symm hc).liftConeMorphism s := by
- convert (is_limit.lift_cone_morphism_eq_is_terminal_from _ s).symm
+ convert(is_limit.lift_cone_morphism_eq_is_terminal_from _ s).symm
#align category_theory.limits.is_terminal.from_eq_lift_cone_morphism CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism
-/
@@ -182,7 +182,7 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
map c d f :=
{ Hom := f.right
w' := fun j => by
- convert (congr_fun (congr_arg nat_trans.app f.w) j).symm
+ convert(congr_fun (congr_arg nat_trans.app f.w) j).symm
dsimp
simp }
#align category_theory.limits.cocone.from_structured_arrow CategoryTheory.Limits.Cocone.fromStructuredArrow
@@ -248,7 +248,7 @@ theorem IsColimit.descCoconeMorphism_eq_isInitial_to {F : J ⥤ C} {c : Cocone F
theorem IsInitial.to_eq_descCoconeMorphism {F : J ⥤ C} {c : Cocone F} (hc : IsInitial c)
(s : Cocone F) :
IsInitial.to hc s = ((Cocone.isColimitEquivIsInitial _).symm hc).descCoconeMorphism s := by
- convert (is_colimit.desc_cocone_morphism_eq_is_initial_to _ s).symm
+ convert(is_colimit.desc_cocone_morphism_eq_is_initial_to _ s).symm
#align category_theory.limits.is_initial.to_eq_desc_cocone_morphism CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/2196ab363eb097c008d4497125e0dde23fb36db2
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
! This file was ported from Lean 3 source module category_theory.limits.cone_category
-! leanprover-community/mathlib commit 18302a460eb6a071cf0bfe11a4df025c8f8af244
+! leanprover-community/mathlib commit 69c6a5a12d8a2b159f20933e60115a4f2de62b58
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.CategoryTheory.Limits.Shapes.Equivalence
/-!
# Limits and the category of (co)cones
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This files contains results that stem from the limit API. For the definition and the category
instance of `cone`, please refer to `category_theory/limits/cones.lean`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -38,6 +38,7 @@ variable {J : Type u₁} [Category.{v₁} J] {K : Type u₂} [Category.{v₂} K]
variable {C : Type u₃} [Category.{v₃} C] {D : Type u₄} [Category.{v₄} D]
+#print CategoryTheory.Limits.Cone.toCostructuredArrow /-
/-- Construct an object of the category `(Δ ↓ F)` from a cone on `F`. This is part of an
equivalence, see `cone.equiv_costructured_arrow`. -/
@[simps]
@@ -49,7 +50,9 @@ def Cone.toCostructuredArrow (F : J ⥤ C) : Cone F ⥤ CostructuredArrow (const
ext
simp
#align category_theory.limits.cone.to_costructured_arrow CategoryTheory.Limits.Cone.toCostructuredArrow
+-/
+#print CategoryTheory.Limits.Cone.fromCostructuredArrow /-
/-- Construct a cone on `F` from an object of the category `(Δ ↓ F)`. This is part of an
equivalence, see `cone.equiv_costructured_arrow`. -/
@[simps]
@@ -63,7 +66,14 @@ def Cone.fromCostructuredArrow (F : J ⥤ C) : CostructuredArrow (const J) F ⥤
dsimp
simp }
#align category_theory.limits.cone.from_costructured_arrow CategoryTheory.Limits.Cone.fromCostructuredArrow
+-/
+/- warning: category_theory.limits.cone.equiv_costructured_arrow -> CategoryTheory.Limits.Cone.equivCostructuredArrow is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max u3 u4 u2, max u4 u3 u2} (CategoryTheory.Limits.Cone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.CostructuredArrow.{u2, max u3 u2, u4, max u1 u2 u3 u4} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F) (CategoryTheory.CostructuredArrow.category.{max u3 u2, max u1 u2 u3 u4, u4, u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F)
+but is expected to have type
+ forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max (max u4 u3) u2, max u4 u3 u2} (CategoryTheory.Limits.Cone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.CostructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u1) u4) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F) (CategoryTheory.Limits.Cone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.instCategoryCostructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u4) u1) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3) F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.cone.equiv_costructured_arrow CategoryTheory.Limits.Cone.equivCostructuredArrowₓ'. -/
/-- The category of cones on `F` is just the comma category `(Δ ↓ F)`, where `Δ` is the constant
functor. -/
@[simps]
@@ -73,6 +83,7 @@ def Cone.equivCostructuredArrow (F : J ⥤ C) : Cone F ≌ CostructuredArrow (co
(NatIso.ofComponents (fun c => (CostructuredArrow.eta _).symm) (by tidy))
#align category_theory.limits.cone.equiv_costructured_arrow CategoryTheory.Limits.Cone.equivCostructuredArrow
+#print CategoryTheory.Limits.Cone.isLimitEquivIsTerminal /-
/-- A cone is a limit cone iff it is terminal. -/
def Cone.isLimitEquivIsTerminal {F : J ⥤ C} (c : Cone F) : IsLimit c ≃ IsTerminal c :=
IsLimit.isoUniqueConeMorphism.toEquiv.trans
@@ -81,12 +92,16 @@ def Cone.isLimitEquivIsTerminal {F : J ⥤ C} (c : Cone F) : IsLimit c ≃ IsTer
left_inv := by tidy
right_inv := by tidy }
#align category_theory.limits.cone.is_limit_equiv_is_terminal CategoryTheory.Limits.Cone.isLimitEquivIsTerminal
+-/
+#print CategoryTheory.Limits.hasLimit_iff_hasTerminal_cone /-
theorem hasLimit_iff_hasTerminal_cone (F : J ⥤ C) : HasLimit F ↔ HasTerminal (Cone F) :=
⟨fun h => (cone.is_limit_equiv_is_terminal _ (limit.is_limit F)).HasTerminal, fun h =>
⟨⟨⟨⊤_ _, (cone.is_limit_equiv_is_terminal _).symm terminal_is_terminal⟩⟩⟩⟩
#align category_theory.limits.has_limit_iff_has_terminal_cone CategoryTheory.Limits.hasLimit_iff_hasTerminal_cone
+-/
+#print CategoryTheory.Limits.hasLimitsOfShape_iff_isLeftAdjoint_const /-
theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
HasLimitsOfShape J C ↔ Nonempty (IsLeftAdjoint (const J : C ⥤ _)) :=
calc
@@ -99,30 +114,48 @@ theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
nonempty_isLeftAdjoint_iff_hasTerminal_costructuredArrow.symm
#align category_theory.limits.has_limits_of_shape_iff_is_left_adjoint_const CategoryTheory.Limits.hasLimitsOfShape_iff_isLeftAdjoint_const
+-/
+#print CategoryTheory.Limits.IsLimit.liftConeMorphism_eq_isTerminal_from /-
theorem IsLimit.liftConeMorphism_eq_isTerminal_from {F : J ⥤ C} {c : Cone F} (hc : IsLimit c)
(s : Cone F) : hc.liftConeMorphism s = IsTerminal.from (Cone.isLimitEquivIsTerminal _ hc) _ :=
rfl
#align category_theory.limits.is_limit.lift_cone_morphism_eq_is_terminal_from CategoryTheory.Limits.IsLimit.liftConeMorphism_eq_isTerminal_from
+-/
+#print CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism /-
theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsTerminal c)
(s : Cone F) :
IsTerminal.from hc s = ((Cone.isLimitEquivIsTerminal _).symm hc).liftConeMorphism s := by
convert (is_limit.lift_cone_morphism_eq_is_terminal_from _ s).symm
#align category_theory.limits.is_terminal.from_eq_lift_cone_morphism CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism
+-/
+/- warning: category_theory.limits.is_limit.of_preserves_cone_terminal -> CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesLimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c))
+but is expected to have type
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesLimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit.of_preserves_cone_terminal CategoryTheory.Limits.IsLimit.ofPreservesConeTerminalₓ'. -/
/-- If `G : cone F ⥤ cone F'` preserves terminal objects, it preserves limit cones. -/
def IsLimit.ofPreservesConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[PreservesLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit c) : IsLimit (G.obj c) :=
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalObj _ _
#align category_theory.limits.is_limit.of_preserves_cone_terminal CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal
+/- warning: category_theory.limits.is_limit.of_reflects_cone_terminal -> CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsLimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
+but is expected to have type
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsLimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsLimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c)) -> (CategoryTheory.Limits.IsLimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_limit.of_reflects_cone_terminal CategoryTheory.Limits.IsLimit.ofReflectsConeTerminalₓ'. -/
/-- If `G : cone F ⥤ cone F'` reflects terminal objects, it reflects limit cones. -/
def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[ReflectsLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit (G.obj c)) : IsLimit c :=
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalOfObj _ _
#align category_theory.limits.is_limit.of_reflects_cone_terminal CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal
+#print CategoryTheory.Limits.Cocone.toStructuredArrow /-
/-- Construct an object of the category `(F ↓ Δ)` from a cocone on `F`. This is part of an
equivalence, see `cocone.equiv_structured_arrow`. -/
@[simps]
@@ -134,7 +167,9 @@ def Cocone.toStructuredArrow (F : J ⥤ C) : Cocone F ⥤ StructuredArrow F (con
ext
simp
#align category_theory.limits.cocone.to_structured_arrow CategoryTheory.Limits.Cocone.toStructuredArrow
+-/
+#print CategoryTheory.Limits.Cocone.fromStructuredArrow /-
/-- Construct a cocone on `F` from an object of the category `(F ↓ Δ)`. This is part of an
equivalence, see `cocone.equiv_structured_arrow`. -/
@[simps]
@@ -148,7 +183,14 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
dsimp
simp }
#align category_theory.limits.cocone.from_structured_arrow CategoryTheory.Limits.Cocone.fromStructuredArrow
+-/
+/- warning: category_theory.limits.cocone.equiv_structured_arrow -> CategoryTheory.Limits.Cocone.equivStructuredArrow is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max u3 u4 u2, max u4 u3 u2} (CategoryTheory.Limits.Cocone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.StructuredArrow.{u2, max u3 u2, u4, max u1 u2 u3 u4} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3)) (CategoryTheory.StructuredArrow.category.{max u3 u2, max u1 u2 u3 u4, u4, u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3))
+but is expected to have type
+ forall {J : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u1, u3} J] {C : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u2, u4} C] (F : CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3), CategoryTheory.Equivalence.{u2, max u3 u2, max (max u4 u3) u2, max u4 u3 u2} (CategoryTheory.Limits.Cocone.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.StructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u4) u1) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3)) (CategoryTheory.Limits.Cocone.category.{u1, u2, u3, u4} J _inst_1 C _inst_3 F) (CategoryTheory.instCategoryStructuredArrow.{u2, max u3 u2, u4, max (max (max u3 u4) u1) u2} C _inst_3 (CategoryTheory.Functor.{u1, u2, u3, u4} J _inst_1 C _inst_3) (CategoryTheory.Functor.category.{u1, u2, u3, u4} J _inst_1 C _inst_3) F (CategoryTheory.Functor.const.{u1, u2, u3, u4} J _inst_1 C _inst_3))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.cocone.equiv_structured_arrow CategoryTheory.Limits.Cocone.equivStructuredArrowₓ'. -/
/-- The category of cocones on `F` is just the comma category `(F ↓ Δ)`, where `Δ` is the constant
functor. -/
@[simps]
@@ -158,6 +200,7 @@ def Cocone.equivStructuredArrow (F : J ⥤ C) : Cocone F ≌ StructuredArrow F (
(NatIso.ofComponents (fun c => (StructuredArrow.eta _).symm) (by tidy))
#align category_theory.limits.cocone.equiv_structured_arrow CategoryTheory.Limits.Cocone.equivStructuredArrow
+#print CategoryTheory.Limits.Cocone.isColimitEquivIsInitial /-
/-- A cocone is a colimit cocone iff it is initial. -/
def Cocone.isColimitEquivIsInitial {F : J ⥤ C} (c : Cocone F) : IsColimit c ≃ IsInitial c :=
IsColimit.isoUniqueCoconeMorphism.toEquiv.trans
@@ -166,12 +209,16 @@ def Cocone.isColimitEquivIsInitial {F : J ⥤ C} (c : Cocone F) : IsColimit c
left_inv := by tidy
right_inv := by tidy }
#align category_theory.limits.cocone.is_colimit_equiv_is_initial CategoryTheory.Limits.Cocone.isColimitEquivIsInitial
+-/
+#print CategoryTheory.Limits.hasColimit_iff_hasInitial_cocone /-
theorem hasColimit_iff_hasInitial_cocone (F : J ⥤ C) : HasColimit F ↔ HasInitial (Cocone F) :=
⟨fun h => (cocone.is_colimit_equiv_is_initial _ (colimit.is_colimit F)).HasInitial, fun h =>
⟨⟨⟨⊥_ _, (cocone.is_colimit_equiv_is_initial _).symm initial_is_initial⟩⟩⟩⟩
#align category_theory.limits.has_colimit_iff_has_initial_cocone CategoryTheory.Limits.hasColimit_iff_hasInitial_cocone
+-/
+#print CategoryTheory.Limits.hasColimitsOfShape_iff_isRightAdjoint_const /-
theorem hasColimitsOfShape_iff_isRightAdjoint_const :
HasColimitsOfShape J C ↔ Nonempty (IsRightAdjoint (const J : C ⥤ _)) :=
calc
@@ -184,19 +231,30 @@ theorem hasColimitsOfShape_iff_isRightAdjoint_const :
nonempty_isRightAdjoint_iff_hasInitial_structuredArrow.symm
#align category_theory.limits.has_colimits_of_shape_iff_is_right_adjoint_const CategoryTheory.Limits.hasColimitsOfShape_iff_isRightAdjoint_const
+-/
+#print CategoryTheory.Limits.IsColimit.descCoconeMorphism_eq_isInitial_to /-
theorem IsColimit.descCoconeMorphism_eq_isInitial_to {F : J ⥤ C} {c : Cocone F} (hc : IsColimit c)
(s : Cocone F) :
hc.descCoconeMorphism s = IsInitial.to (Cocone.isColimitEquivIsInitial _ hc) _ :=
rfl
#align category_theory.limits.is_colimit.desc_cocone_morphism_eq_is_initial_to CategoryTheory.Limits.IsColimit.descCoconeMorphism_eq_isInitial_to
+-/
+#print CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism /-
theorem IsInitial.to_eq_descCoconeMorphism {F : J ⥤ C} {c : Cocone F} (hc : IsInitial c)
(s : Cocone F) :
IsInitial.to hc s = ((Cocone.isColimitEquivIsInitial _).symm hc).descCoconeMorphism s := by
convert (is_colimit.desc_cocone_morphism_eq_is_initial_to _ s).symm
#align category_theory.limits.is_initial.to_eq_desc_cocone_morphism CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism
+-/
+/- warning: category_theory.limits.is_colimit.of_preserves_cocone_initial -> CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesColimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c))
+but is expected to have type
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.PreservesColimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c) -> (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit.of_preserves_cocone_initial CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitialₓ'. -/
/-- If `G : cocone F ⥤ cocone F'` preserves initial objects, it preserves colimit cocones. -/
def IsColimit.ofPreservesCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
[PreservesColimit (Functor.empty.{0} _) G] {c : Cocone F} (hc : IsColimit c) :
@@ -204,6 +262,12 @@ def IsColimit.ofPreservesCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone
(Cocone.isColimitEquivIsInitial _).symm <| (Cocone.isColimitEquivIsInitial _ hc).isInitialObj _ _
#align category_theory.limits.is_colimit.of_preserves_cocone_initial CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial
+/- warning: category_theory.limits.is_colimit.of_reflects_cocone_initial -> CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitial is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsColimit.{0, 0, u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max u5 u7 u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (CategoryTheory.Functor.obj.{u3, u4, max u5 u7 u3, max u6 u8 u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G c)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
+but is expected to have type
+ forall {J : Type.{u5}} [_inst_1 : CategoryTheory.Category.{u1, u5} J] {K : Type.{u6}} [_inst_2 : CategoryTheory.Category.{u2, u6} K] {C : Type.{u7}} [_inst_3 : CategoryTheory.Category.{u3, u7} C] {D : Type.{u8}} [_inst_4 : CategoryTheory.Category.{u4, u8} D] {F : CategoryTheory.Functor.{u1, u3, u5, u7} J _inst_1 C _inst_3} {F' : CategoryTheory.Functor.{u2, u4, u6, u8} K _inst_2 D _inst_4} (G : CategoryTheory.Functor.{u3, u4, max (max u7 u5) u3, max (max u8 u6) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F')) [_inst_5 : CategoryTheory.Limits.ReflectsColimit.{0, 0, u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Discrete.{0} PEmpty.{1}) (CategoryTheory.discreteCategory.{0} PEmpty.{1}) (CategoryTheory.Functor.empty.{0, u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F)) G] {c : CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F}, (CategoryTheory.Limits.IsColimit.{u2, u4, u6, u8} K _inst_2 D _inst_4 F' (Prefunctor.obj.{succ u3, succ u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.CategoryStruct.toQuiver.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Category.toCategoryStruct.{u3, max (max u5 u7) u3} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F))) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.CategoryStruct.toQuiver.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Category.toCategoryStruct.{u4, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F'))) (CategoryTheory.Functor.toPrefunctor.{u3, u4, max (max u5 u7) u3, max (max u6 u8) u4} (CategoryTheory.Limits.Cocone.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.category.{u1, u3, u5, u7} J _inst_1 C _inst_3 F) (CategoryTheory.Limits.Cocone.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') (CategoryTheory.Limits.Cocone.category.{u2, u4, u6, u8} K _inst_2 D _inst_4 F') G) c)) -> (CategoryTheory.Limits.IsColimit.{u1, u3, u5, u7} J _inst_1 C _inst_3 F c)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.is_colimit.of_reflects_cocone_initial CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitialₓ'. -/
/-- If `G : cocone F ⥤ cocone F'` reflects initial objects, it reflects colimit cocones. -/
def IsColimit.ofReflectsCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
[ReflectsColimit (Functor.empty.{0} _) G] {c : Cocone F} (hc : IsColimit (G.obj c)) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -92,9 +92,9 @@ theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
calc
HasLimitsOfShape J C ↔ ∀ F : J ⥤ C, HasLimit F :=
⟨fun h => h.HasLimit, fun h => has_limits_of_shape.mk⟩
- _ ↔ ∀ F : J ⥤ C, HasTerminal (Cone F) := forall_congr' hasLimit_iff_hasTerminal_cone
+ _ ↔ ∀ F : J ⥤ C, HasTerminal (Cone F) := (forall_congr' hasLimit_iff_hasTerminal_cone)
_ ↔ ∀ F : J ⥤ C, HasTerminal (CostructuredArrow (const J) F) :=
- forall_congr' fun F => (Cone.equivCostructuredArrow F).hasTerminal_iff
+ (forall_congr' fun F => (Cone.equivCostructuredArrow F).hasTerminal_iff)
_ ↔ Nonempty (IsLeftAdjoint (const J : C ⥤ _)) :=
nonempty_isLeftAdjoint_iff_hasTerminal_costructuredArrow.symm
@@ -177,9 +177,9 @@ theorem hasColimitsOfShape_iff_isRightAdjoint_const :
calc
HasColimitsOfShape J C ↔ ∀ F : J ⥤ C, HasColimit F :=
⟨fun h => h.HasColimit, fun h => has_colimits_of_shape.mk⟩
- _ ↔ ∀ F : J ⥤ C, HasInitial (Cocone F) := forall_congr' hasColimit_iff_hasInitial_cocone
+ _ ↔ ∀ F : J ⥤ C, HasInitial (Cocone F) := (forall_congr' hasColimit_iff_hasInitial_cocone)
_ ↔ ∀ F : J ⥤ C, HasInitial (StructuredArrow F (const J)) :=
- forall_congr' fun F => (Cocone.equivStructuredArrow F).hasInitial_iff
+ (forall_congr' fun F => (Cocone.equivStructuredArrow F).hasInitial_iff)
_ ↔ Nonempty (IsRightAdjoint (const J : C ⥤ _)) :=
nonempty_isRightAdjoint_iff_hasInitial_structuredArrow.symm
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -182,7 +182,7 @@ theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
calc
HasLimitsOfShape J C ↔ ∀ F : J ⥤ C, HasLimit F :=
⟨fun h => h.has_limit, fun h => HasLimitsOfShape.mk⟩
- _ ↔ ∀ F : J ⥤ C, HasTerminal (Cone F) := (forall_congr' hasLimit_iff_hasTerminal_cone)
+ _ ↔ ∀ F : J ⥤ C, HasTerminal (Cone F) := forall_congr' hasLimit_iff_hasTerminal_cone
_ ↔ ∀ F : J ⥤ C, HasTerminal (CostructuredArrow (const J) F) :=
(forall_congr' fun F => (Cone.equivCostructuredArrow F).hasTerminal_iff)
_ ↔ Nonempty (IsLeftAdjoint (const J : C ⥤ _)) :=
@@ -352,7 +352,7 @@ theorem hasColimitsOfShape_iff_isRightAdjoint_const :
calc
HasColimitsOfShape J C ↔ ∀ F : J ⥤ C, HasColimit F :=
⟨fun h => h.has_colimit, fun h => HasColimitsOfShape.mk⟩
- _ ↔ ∀ F : J ⥤ C, HasInitial (Cocone F) := (forall_congr' hasColimit_iff_hasInitial_cocone)
+ _ ↔ ∀ F : J ⥤ C, HasInitial (Cocone F) := forall_congr' hasColimit_iff_hasInitial_cocone
_ ↔ ∀ F : J ⥤ C, HasInitial (StructuredArrow F (const J)) :=
(forall_congr' fun F => (Cocone.equivStructuredArrow F).hasInitial_iff)
_ ↔ Nonempty (IsRightAdjoint (const J : C ⥤ _)) :=
@@ -41,6 +41,14 @@ def Cone.toStructuredArrow {F : J ⥤ C} (c : Cone F) : J ⥤ StructuredArrow c.
obj j := StructuredArrow.mk (c.π.app j)
map f := StructuredArrow.homMk f
+/-- If `F` has a limit, then the limit projections can be interpreted as structured arrows
+ `limit F ⟶ F.obj -`. -/
+@[simps]
+noncomputable def limit.toStructuredArrow (F : J ⥤ C) [HasLimit F] :
+ J ⥤ StructuredArrow (limit F) F where
+ obj j := StructuredArrow.mk (limit.π F j)
+ map f := StructuredArrow.homMk f
+
/-- `Cone.toStructuredArrow` can be expressed in terms of `Functor.toStructuredArrow`. -/
def Cone.toStructuredArrowIsoToStructuredArrow {F : J ⥤ C} (c : Cone F) :
c.toStructuredArrow ≅ (𝟭 J).toStructuredArrow c.pt F c.π.app (by simp) :=
@@ -79,6 +87,25 @@ lemma Cone.toStructuredArrow_comp_toUnder_comp_forget {F : J ⥤ C} (c : Cone F)
c.toStructuredArrow ⋙ StructuredArrow.toUnder _ _ ⋙ Under.forget _ = F :=
rfl
+/-- A cone `c` on `F : J ⥤ C` lifts to a cone in `Over c.pt` with cone point `𝟙 c.pt`. -/
+@[simps]
+def Cone.toUnder {F : J ⥤ C} (c : Cone F) :
+ Cone (c.toStructuredArrow ⋙ StructuredArrow.toUnder _ _) where
+ pt := Under.mk (𝟙 c.pt)
+ π := { app := fun j => Under.homMk (c.π.app j) (by simp) }
+
+/-- The limit cone for `F : J ⥤ C` lifts to a cocone in `Under (limit F)` with cone point
+ `𝟙 (limit F)`. This is automatically also a limit cone. -/
+noncomputable def limit.toUnder (F : J ⥤ C) [HasLimit F] :
+ Cone (limit.toStructuredArrow F ⋙ StructuredArrow.toUnder _ _) where
+ pt := Under.mk (𝟙 (limit F))
+ π := { app := fun j => Under.homMk (limit.π F j) (by simp) }
+
+/-- `c.toUnder` is a lift of `c` under the forgetful functor. -/
+@[simps!]
+def Cone.mapConeToUnder {F : J ⥤ C} (c : Cone F) : (Under.forget c.pt).mapCone c.toUnder ≅ c :=
+ Iso.refl _
+
/-- Given a diagram of `StructuredArrow X F`s, we may obtain a cone with cone point `X`. -/
@[simps!]
def Cone.fromStructuredArrow (F : C ⥤ D) {X : D} (G : J ⥤ StructuredArrow X F) :
@@ -192,6 +219,14 @@ def Cocone.toCostructuredArrow {F : J ⥤ C} (c : Cocone F) : J ⥤ Costructured
obj j := CostructuredArrow.mk (c.ι.app j)
map f := CostructuredArrow.homMk f
+/-- If `F` has a colimit, then the colimit inclusions can be interpreted as costructured arrows
+ `F.obj - ⟶ colimit F`. -/
+@[simps]
+noncomputable def colimit.toCostructuredArrow (F : J ⥤ C) [HasColimit F] :
+ J ⥤ CostructuredArrow F (colimit F) where
+ obj j := CostructuredArrow.mk (colimit.ι F j)
+ map f := CostructuredArrow.homMk f
+
/-- `Cocone.toCostructuredArrow` can be expressed in terms of `Functor.toCostructuredArrow`. -/
def Cocone.toCostructuredArrowIsoToCostructuredArrow {F : J ⥤ C} (c : Cocone F) :
c.toCostructuredArrow ≅ (𝟭 J).toCostructuredArrow F c.pt c.ι.app (by simp) :=
@@ -230,6 +265,26 @@ lemma Cocone.toCostructuredArrow_comp_toOver_comp_forget {F : J ⥤ C} (c : Coco
c.toCostructuredArrow ⋙ CostructuredArrow.toOver _ _ ⋙ Over.forget _ = F :=
rfl
+/-- A cocone `c` on `F : J ⥤ C` lifts to a cocone in `Over c.pt` with cone point `𝟙 c.pt`. -/
+@[simps]
+def Cocone.toOver {F : J ⥤ C} (c : Cocone F) :
+ Cocone (c.toCostructuredArrow ⋙ CostructuredArrow.toOver _ _) where
+ pt := Over.mk (𝟙 c.pt)
+ ι := { app := fun j => Over.homMk (c.ι.app j) (by simp) }
+
+/-- The colimit cocone for `F : J ⥤ C` lifts to a cocone in `Over (colimit F)` with cone point
+ `𝟙 (colimit F)`. This is automatically also a colimit cocone. -/
+@[simps]
+noncomputable def colimit.toOver (F : J ⥤ C) [HasColimit F] :
+ Cocone (colimit.toCostructuredArrow F ⋙ CostructuredArrow.toOver _ _) where
+ pt := Over.mk (𝟙 (colimit F))
+ ι := { app := fun j => Over.homMk (colimit.ι F j) (by simp) }
+
+/-- `c.toOver` is a lift of `c` under the forgetful functor. -/
+@[simps!]
+def Cocone.mapCoconeToOver {F : J ⥤ C} (c : Cocone F) : (Over.forget c.pt).mapCocone c.toOver ≅ c :=
+ Iso.refl _
+
/-- Given a diagram `CostructuredArrow F X`s, we may obtain a cocone with cone point `X`. -/
@[simps!]
def Cocone.fromCostructuredArrow (F : C ⥤ D) {X : D} (G : J ⥤ CostructuredArrow F X) :
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)
@@ -32,7 +32,6 @@ open CategoryTheory CategoryTheory.Functor
universe v₁ v₂ v₃ v₄ u₁ u₂ u₃ u₄
variable {J : Type u₁} [Category.{v₁} J] {K : Type u₂} [Category.{v₂} K]
-
variable {C : Type u₃} [Category.{v₃} C] {D : Type u₄} [Category.{v₄} D]
/-- Given a cone `c` over `F`, we can interpret the legs of `c` as structured arrows
@@ -4,9 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-/
import Mathlib.CategoryTheory.Adjunction.Comma
+import Mathlib.CategoryTheory.Comma.Over
import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Terminal
import Mathlib.CategoryTheory.Limits.Shapes.Equivalence
-import Mathlib.CategoryTheory.Over
#align_import category_theory.limits.cone_category from "leanprover-community/mathlib"@"18302a460eb6a071cf0bfe11a4df025c8f8af244"
@@ -103,7 +103,7 @@ def Cone.toStructuredArrowCone {K : J ⥤ C} (c : Cone K) (F : C ⥤ D) {X : D}
def Cone.toCostructuredArrow (F : J ⥤ C) : Cone F ⥤ CostructuredArrow (const J) F
where
obj c := CostructuredArrow.mk c.π
- map f := CostructuredArrow.homMk f.Hom
+ map f := CostructuredArrow.homMk f.hom
#align category_theory.limits.cone.to_costructured_arrow CategoryTheory.Limits.Cone.toCostructuredArrow
/-- Construct a cone on `F` from an object of the category `(Δ ↓ F)`. This is part of an
@@ -113,7 +113,7 @@ def Cone.fromCostructuredArrow (F : J ⥤ C) : CostructuredArrow (const J) F ⥤
where
obj c := ⟨c.left, c.hom⟩
map f :=
- { Hom := f.left
+ { hom := f.left
w := fun j => by
convert congr_fun (congr_arg NatTrans.app f.w) j
dsimp
@@ -252,7 +252,7 @@ def Cocone.toCostructuredArrowCocone {K : J ⥤ C} (c : Cocone K) (F : C ⥤ D)
def Cocone.toStructuredArrow (F : J ⥤ C) : Cocone F ⥤ StructuredArrow F (const J)
where
obj c := StructuredArrow.mk c.ι
- map f := StructuredArrow.homMk f.Hom
+ map f := StructuredArrow.homMk f.hom
#align category_theory.limits.cocone.to_structured_arrow CategoryTheory.Limits.Cocone.toStructuredArrow
/-- Construct a cocone on `F` from an object of the category `(F ↓ Δ)`. This is part of an
@@ -262,7 +262,7 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
where
obj c := ⟨c.right, c.hom⟩
map f :=
- { Hom := f.right
+ { hom := f.right
w := fun j => by
convert (congr_fun (congr_arg NatTrans.app f.w) j).symm
dsimp
@@ -42,6 +42,19 @@ def Cone.toStructuredArrow {F : J ⥤ C} (c : Cone F) : J ⥤ StructuredArrow c.
obj j := StructuredArrow.mk (c.π.app j)
map f := StructuredArrow.homMk f
+/-- `Cone.toStructuredArrow` can be expressed in terms of `Functor.toStructuredArrow`. -/
+def Cone.toStructuredArrowIsoToStructuredArrow {F : J ⥤ C} (c : Cone F) :
+ c.toStructuredArrow ≅ (𝟭 J).toStructuredArrow c.pt F c.π.app (by simp) :=
+ Iso.refl _
+
+/-- `Functor.toStructuredArrow` can be expressed in terms of `Cone.toStructuredArrow`. -/
+def _root_.CategoryTheory.Functor.toStructuredArrowIsoToStructuredArrow (G : J ⥤ K) (X : C)
+ (F : K ⥤ C) (f : (Y : J) → X ⟶ F.obj (G.obj Y))
+ (h : ∀ {Y Z : J} (g : Y ⟶ Z), f Y ≫ F.map (G.map g) = f Z) :
+ G.toStructuredArrow X F f h ≅
+ (Cone.mk X ⟨f, by simp [h]⟩).toStructuredArrow ⋙ StructuredArrow.pre _ _ _ :=
+ Iso.refl _
+
/-- Interpreting the legs of a cone as a structured arrow and then forgetting the arrow again does
nothing. -/
@[simps!]
@@ -180,6 +193,19 @@ def Cocone.toCostructuredArrow {F : J ⥤ C} (c : Cocone F) : J ⥤ Costructured
obj j := CostructuredArrow.mk (c.ι.app j)
map f := CostructuredArrow.homMk f
+/-- `Cocone.toCostructuredArrow` can be expressed in terms of `Functor.toCostructuredArrow`. -/
+def Cocone.toCostructuredArrowIsoToCostructuredArrow {F : J ⥤ C} (c : Cocone F) :
+ c.toCostructuredArrow ≅ (𝟭 J).toCostructuredArrow F c.pt c.ι.app (by simp) :=
+ Iso.refl _
+
+/-- `Functor.toCostructuredArrow` can be expressed in terms of `Cocone.toCostructuredArrow`. -/
+def _root_.CategoryTheory.Functor.toCostructuredArrowIsoToCostructuredArrow (G : J ⥤ K)
+ (F : K ⥤ C) (X : C) (f : (Y : J) → F.obj (G.obj Y) ⟶ X)
+ (h : ∀ {Y Z : J} (g : Y ⟶ Z), F.map (G.map g) ≫ f Z = f Y) :
+ G.toCostructuredArrow F X f h ≅
+ (Cocone.mk X ⟨f, by simp [h]⟩).toCostructuredArrow ⋙ CostructuredArrow.pre _ _ _ :=
+ Iso.refl _
+
/-- Interpreting the legs of a cocone as a costructured arrow and then forgetting the arrow again
does nothing. -/
@[simps!]
After making this PR I noticed that this already existed in Functor/Flat.lean
, so I unified the two developments.
@@ -5,8 +5,8 @@ Authors: Andrew Yang
-/
import Mathlib.CategoryTheory.Adjunction.Comma
import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Terminal
-import Mathlib.CategoryTheory.StructuredArrow
import Mathlib.CategoryTheory.Limits.Shapes.Equivalence
+import Mathlib.CategoryTheory.Over
#align_import category_theory.limits.cone_category from "leanprover-community/mathlib"@"18302a460eb6a071cf0bfe11a4df025c8f8af244"
@@ -35,6 +35,55 @@ variable {J : Type u₁} [Category.{v₁} J] {K : Type u₂} [Category.{v₂} K]
variable {C : Type u₃} [Category.{v₃} C] {D : Type u₄} [Category.{v₄} D]
+/-- Given a cone `c` over `F`, we can interpret the legs of `c` as structured arrows
+ `c.pt ⟶ F.obj -`. -/
+@[simps]
+def Cone.toStructuredArrow {F : J ⥤ C} (c : Cone F) : J ⥤ StructuredArrow c.pt F where
+ obj j := StructuredArrow.mk (c.π.app j)
+ map f := StructuredArrow.homMk f
+
+/-- Interpreting the legs of a cone as a structured arrow and then forgetting the arrow again does
+ nothing. -/
+@[simps!]
+def Cone.toStructuredArrowCompProj {F : J ⥤ C} (c : Cone F) :
+ c.toStructuredArrow ⋙ StructuredArrow.proj _ _ ≅ 𝟭 J :=
+ Iso.refl _
+
+@[simp]
+lemma Cone.toStructuredArrow_comp_proj {F : J ⥤ C} (c : Cone F) :
+ c.toStructuredArrow ⋙ StructuredArrow.proj _ _ = 𝟭 J :=
+ rfl
+
+/-- Interpreting the legs of a cone as a structured arrow, interpreting this arrow as an arrow over
+ the cone point, and finally forgetting the arrow is the same as just applying the functor the
+ cone was over. -/
+@[simps!]
+def Cone.toStructuredArrowCompToUnderCompForget {F : J ⥤ C} (c : Cone F) :
+ c.toStructuredArrow ⋙ StructuredArrow.toUnder _ _ ⋙ Under.forget _ ≅ F :=
+ Iso.refl _
+
+@[simp]
+lemma Cone.toStructuredArrow_comp_toUnder_comp_forget {F : J ⥤ C} (c : Cone F) :
+ c.toStructuredArrow ⋙ StructuredArrow.toUnder _ _ ⋙ Under.forget _ = F :=
+ rfl
+
+/-- Given a diagram of `StructuredArrow X F`s, we may obtain a cone with cone point `X`. -/
+@[simps!]
+def Cone.fromStructuredArrow (F : C ⥤ D) {X : D} (G : J ⥤ StructuredArrow X F) :
+ Cone (G ⋙ StructuredArrow.proj X F ⋙ F) where
+ π := { app := fun j => (G.obj j).hom }
+#align category_theory.structured_arrow_cone.diagram_to_cone CategoryTheory.Limits.Cone.fromStructuredArrow
+
+/-- Given a cone `c : Cone K` and a map `f : X ⟶ F.obj c.X`, we can construct a cone of structured
+arrows over `X` with `f` as the cone point.
+-/
+@[simps]
+def Cone.toStructuredArrowCone {K : J ⥤ C} (c : Cone K) (F : C ⥤ D) {X : D} (f : X ⟶ F.obj c.pt) :
+ Cone ((F.mapCone c).toStructuredArrow ⋙ StructuredArrow.map f ⋙ StructuredArrow.pre _ K F) where
+ pt := StructuredArrow.mk f
+ π := { app := fun j => StructuredArrow.homMk (c.π.app j) rfl }
+#align category_theory.structured_arrow_cone.to_cone CategoryTheory.Limits.Cone.toStructuredArrowCone
+
/-- Construct an object of the category `(Δ ↓ F)` from a cone on `F`. This is part of an
equivalence, see `Cone.equivCostructuredArrow`. -/
@[simps]
@@ -124,6 +173,53 @@ def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalOfObj _ _
#align category_theory.limits.is_limit.of_reflects_cone_terminal CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal
+/-- Given a cocone `c` over `F`, we can interpret the legs of `c` as costructured arrows
+ `F.obj - ⟶ c.pt`. -/
+@[simps]
+def Cocone.toCostructuredArrow {F : J ⥤ C} (c : Cocone F) : J ⥤ CostructuredArrow F c.pt where
+ obj j := CostructuredArrow.mk (c.ι.app j)
+ map f := CostructuredArrow.homMk f
+
+/-- Interpreting the legs of a cocone as a costructured arrow and then forgetting the arrow again
+ does nothing. -/
+@[simps!]
+def Cocone.toCostructuredArrowCompProj {F : J ⥤ C} (c : Cocone F) :
+ c.toCostructuredArrow ⋙ CostructuredArrow.proj _ _ ≅ 𝟭 J :=
+ Iso.refl _
+
+@[simp]
+lemma Cocone.toCostructuredArrow_comp_proj {F : J ⥤ C} (c : Cocone F) :
+ c.toCostructuredArrow ⋙ CostructuredArrow.proj _ _ = 𝟭 J :=
+ rfl
+
+/-- Interpreting the legs of a cocone as a costructured arrow, interpreting this arrow as an arrow
+ over the cocone point, and finally forgetting the arrow is the same as just applying the
+ functor the cocone was over. -/
+@[simps!]
+def Cocone.toCostructuredArrowCompToOverCompForget {F : J ⥤ C} (c : Cocone F) :
+ c.toCostructuredArrow ⋙ CostructuredArrow.toOver _ _ ⋙ Over.forget _ ≅ F :=
+ Iso.refl _
+
+@[simp]
+lemma Cocone.toCostructuredArrow_comp_toOver_comp_forget {F : J ⥤ C} (c : Cocone F) :
+ c.toCostructuredArrow ⋙ CostructuredArrow.toOver _ _ ⋙ Over.forget _ = F :=
+ rfl
+
+/-- Given a diagram `CostructuredArrow F X`s, we may obtain a cocone with cone point `X`. -/
+@[simps!]
+def Cocone.fromCostructuredArrow (F : C ⥤ D) {X : D} (G : J ⥤ CostructuredArrow F X) :
+ Cocone (G ⋙ CostructuredArrow.proj F X ⋙ F) where
+ ι := { app := fun j => (G.obj j).hom }
+
+/-- Given a cocone `c : Cocone K` and a map `f : F.obj c.X ⟶ X`, we can construct a cocone of
+ costructured arrows over `X` with `f` as the cone point. -/
+@[simps]
+def Cocone.toCostructuredArrowCocone {K : J ⥤ C} (c : Cocone K) (F : C ⥤ D) {X : D}
+ (f : F.obj c.pt ⟶ X) : Cocone ((F.mapCocone c).toCostructuredArrow ⋙
+ CostructuredArrow.map f ⋙ CostructuredArrow.pre _ _ _) where
+ pt := CostructuredArrow.mk f
+ ι := { app := fun j => CostructuredArrow.homMk (c.ι.app j) rfl }
+
/-- Construct an object of the category `(F ↓ Δ)` from a cocone on `F`. This is part of an
equivalence, see `Cocone.equivStructuredArrow`. -/
@[simps]
@@ -2,17 +2,14 @@
Copyright (c) 2021 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module category_theory.limits.cone_category
-! leanprover-community/mathlib commit 18302a460eb6a071cf0bfe11a4df025c8f8af244
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Adjunction.Comma
import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Terminal
import Mathlib.CategoryTheory.StructuredArrow
import Mathlib.CategoryTheory.Limits.Shapes.Equivalence
+#align_import category_theory.limits.cone_category from "leanprover-community/mathlib"@"18302a460eb6a071cf0bfe11a4df025c8f8af244"
+
/-!
# Limits and the category of (co)cones
@@ -44,10 +44,7 @@ variable {C : Type u₃} [Category.{v₃} C] {D : Type u₄} [Category.{v₄} D]
def Cone.toCostructuredArrow (F : J ⥤ C) : Cone F ⥤ CostructuredArrow (const J) F
where
obj c := CostructuredArrow.mk c.π
- map f :=
- CostructuredArrow.homMk f.Hom <| by
- ext
- simp
+ map f := CostructuredArrow.homMk f.Hom
#align category_theory.limits.cone.to_costructured_arrow CategoryTheory.Limits.Cone.toCostructuredArrow
/-- Construct a cone on `F` from an object of the category `(Δ ↓ F)`. This is part of an
@@ -76,9 +73,8 @@ Similarly for `Cocone.equivStructuredArrow`.
@[simps! (config := { notRecursive := [`PLift, `ULift] })]
def Cone.equivCostructuredArrow (F : J ⥤ C) : Cone F ≌ CostructuredArrow (const J) F :=
Equivalence.mk (Cone.toCostructuredArrow F) (Cone.fromCostructuredArrow F)
- (NatIso.ofComponents Cones.eta (by aesop_cat))
- (NatIso.ofComponents (fun c => (CostructuredArrow.eta _).symm)
- (by intros ; apply CostructuredArrow.ext ; aesop_cat))
+ (NatIso.ofComponents Cones.eta)
+ (NatIso.ofComponents fun c => (CostructuredArrow.eta _).symm)
#align category_theory.limits.cone.equiv_costructured_arrow CategoryTheory.Limits.Cone.equivCostructuredArrow
/-- A cone is a limit cone iff it is terminal. -/
@@ -137,10 +133,7 @@ def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤
def Cocone.toStructuredArrow (F : J ⥤ C) : Cocone F ⥤ StructuredArrow F (const J)
where
obj c := StructuredArrow.mk c.ι
- map f :=
- StructuredArrow.homMk f.Hom <| by
- ext
- simp
+ map f := StructuredArrow.homMk f.Hom
#align category_theory.limits.cocone.to_structured_arrow CategoryTheory.Limits.Cocone.toStructuredArrow
/-- Construct a cocone on `F` from an object of the category `(F ↓ Δ)`. This is part of an
@@ -162,9 +155,8 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
@[simps! (config := { notRecursive := [`PLift, `ULift] })]
def Cocone.equivStructuredArrow (F : J ⥤ C) : Cocone F ≌ StructuredArrow F (const J) :=
Equivalence.mk (Cocone.toStructuredArrow F) (Cocone.fromStructuredArrow F)
- (NatIso.ofComponents Cocones.eta (by aesop_cat))
- (NatIso.ofComponents (fun c => (StructuredArrow.eta _).symm)
- (by intros ; apply StructuredArrow.ext ; aesop_cat))
+ (NatIso.ofComponents Cocones.eta)
+ (NatIso.ofComponents fun c => (StructuredArrow.eta _).symm)
#align category_theory.limits.cocone.equiv_structured_arrow CategoryTheory.Limits.Cocone.equivStructuredArrow
/-- A cocone is a colimit cocone iff it is initial. -/
This PR fixes two things:
align
statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align
). This is often seen in the mathport output after ending calc
blocks.#align
statements. (This was needed for a script I wrote for #3630.)@@ -106,7 +106,6 @@ theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
(forall_congr' fun F => (Cone.equivCostructuredArrow F).hasTerminal_iff)
_ ↔ Nonempty (IsLeftAdjoint (const J : C ⥤ _)) :=
nonempty_isLeftAdjoint_iff_hasTerminal_costructuredArrow.symm
-
#align category_theory.limits.has_limits_of_shape_iff_is_left_adjoint_const CategoryTheory.Limits.hasLimitsOfShape_iff_isLeftAdjoint_const
theorem IsLimit.liftConeMorphism_eq_isTerminal_from {F : J ⥤ C} {c : Cone F} (hc : IsLimit c)
@@ -193,7 +192,6 @@ theorem hasColimitsOfShape_iff_isRightAdjoint_const :
(forall_congr' fun F => (Cocone.equivStructuredArrow F).hasInitial_iff)
_ ↔ Nonempty (IsRightAdjoint (const J : C ⥤ _)) :=
nonempty_isRightAdjoint_iff_hasInitial_structuredArrow.symm
-
#align category_theory.limits.has_colimits_of_shape_iff_is_right_adjoint_const CategoryTheory.Limits.hasColimitsOfShape_iff_isRightAdjoint_const
theorem IsColimit.descCoconeMorphism_eq_isInitial_to {F : J ⥤ C} {c : Cocone F} (hc : IsColimit c)
Result of running
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^#align ([^[:space:]]+)\n *([^[:space:]]+)$/#align \1 \2/' {} \;
Some scripts depend on those statements being on one line. I think it is not important enough to have a special linter or github workflow for that, especially considering this is only needed during the port. I plan to just run this once in a while.
Co-authored-by: Moritz Firsching <firsching@google.com>
@@ -156,8 +156,7 @@ def Cocone.fromStructuredArrow (F : J ⥤ C) : StructuredArrow F (const J) ⥤ C
convert (congr_fun (congr_arg NatTrans.app f.w) j).symm
dsimp
simp }
-#align category_theory.limits.cocone.from_structured_arrow
- CategoryTheory.Limits.Cocone.fromStructuredArrow
+#align category_theory.limits.cocone.from_structured_arrow CategoryTheory.Limits.Cocone.fromStructuredArrow
/-- The category of cocones on `F` is just the comma category `(F ↓ Δ)`, where `Δ` is the constant
functor. -/
@@ -182,8 +181,7 @@ theorem hasColimit_iff_hasInitial_cocone (F : J ⥤ C) : HasColimit F ↔ HasIni
⟨fun _ => (Cocone.isColimitEquivIsInitial _ (colimit.isColimit F)).hasInitial, fun h =>
haveI : HasInitial (Cocone F) := h
⟨⟨⟨⊥_ _, (Cocone.isColimitEquivIsInitial _).symm initialIsInitial⟩⟩⟩⟩
-#align category_theory.limits.has_colimit_iff_has_initial_cocone
- CategoryTheory.Limits.hasColimit_iff_hasInitial_cocone
+#align category_theory.limits.has_colimit_iff_has_initial_cocone CategoryTheory.Limits.hasColimit_iff_hasInitial_cocone
theorem hasColimitsOfShape_iff_isRightAdjoint_const :
HasColimitsOfShape J C ↔ Nonempty (IsRightAdjoint (const J : C ⥤ _)) :=
@@ -196,8 +194,7 @@ theorem hasColimitsOfShape_iff_isRightAdjoint_const :
_ ↔ Nonempty (IsRightAdjoint (const J : C ⥤ _)) :=
nonempty_isRightAdjoint_iff_hasInitial_structuredArrow.symm
-#align category_theory.limits.has_colimits_of_shape_iff_is_right_adjoint_const
- CategoryTheory.Limits.hasColimitsOfShape_iff_isRightAdjoint_const
+#align category_theory.limits.has_colimits_of_shape_iff_is_right_adjoint_const CategoryTheory.Limits.hasColimitsOfShape_iff_isRightAdjoint_const
theorem IsColimit.descCoconeMorphism_eq_isInitial_to {F : J ⥤ C} {c : Cocone F} (hc : IsColimit c)
(s : Cocone F) :
Same as #3103, I missed those before, probably because I didn't rebase on HEAD before. This shouldnow include all cases of aligns with linebreak.
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^#align ([^[:space:]]+)\n *([^[:space:]]+)$/#align \1 \2/' {} \;
Co-authored-by: Moritz Firsching <firsching@google.com>
@@ -62,8 +62,7 @@ def Cone.fromCostructuredArrow (F : J ⥤ C) : CostructuredArrow (const J) F ⥤
convert congr_fun (congr_arg NatTrans.app f.w) j
dsimp
simp }
-#align category_theory.limits.cone.from_costructured_arrow
- CategoryTheory.Limits.Cone.fromCostructuredArrow
+#align category_theory.limits.cone.from_costructured_arrow CategoryTheory.Limits.Cone.fromCostructuredArrow
/-
Porting note:
@@ -80,8 +79,7 @@ def Cone.equivCostructuredArrow (F : J ⥤ C) : Cone F ≌ CostructuredArrow (co
(NatIso.ofComponents Cones.eta (by aesop_cat))
(NatIso.ofComponents (fun c => (CostructuredArrow.eta _).symm)
(by intros ; apply CostructuredArrow.ext ; aesop_cat))
-#align category_theory.limits.cone.equiv_costructured_arrow
- CategoryTheory.Limits.Cone.equivCostructuredArrow
+#align category_theory.limits.cone.equiv_costructured_arrow CategoryTheory.Limits.Cone.equivCostructuredArrow
/-- A cone is a limit cone iff it is terminal. -/
def Cone.isLimitEquivIsTerminal {F : J ⥤ C} (c : Cone F) : IsLimit c ≃ IsTerminal c :=
@@ -90,8 +88,7 @@ def Cone.isLimitEquivIsTerminal {F : J ⥤ C} (c : Cone F) : IsLimit c ≃ IsTer
invFun := fun h s => ⟨⟨IsTerminal.from h s⟩, fun a => IsTerminal.hom_ext h a _⟩
left_inv := by aesop_cat
right_inv := by aesop_cat }
-#align category_theory.limits.cone.is_limit_equiv_is_terminal
- CategoryTheory.Limits.Cone.isLimitEquivIsTerminal
+#align category_theory.limits.cone.is_limit_equiv_is_terminal CategoryTheory.Limits.Cone.isLimitEquivIsTerminal
theorem hasLimit_iff_hasTerminal_cone (F : J ⥤ C) : HasLimit F ↔ HasTerminal (Cone F) :=
⟨fun _ => (Cone.isLimitEquivIsTerminal _ (limit.isLimit F)).hasTerminal, fun h =>
@@ -121,8 +118,7 @@ theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsT
(s : Cone F) :
IsTerminal.from hc s = ((Cone.isLimitEquivIsTerminal _).symm hc).liftConeMorphism s :=
(IsLimit.liftConeMorphism_eq_isTerminal_from (c.isLimitEquivIsTerminal.symm hc) s).symm
-#align category_theory.limits.is_terminal.from_eq_lift_cone_morphism
- CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism
+#align category_theory.limits.is_terminal.from_eq_lift_cone_morphism CategoryTheory.Limits.IsTerminal.from_eq_liftConeMorphism
/-- If `G : Cone F ⥤ Cone F'` preserves terminal objects, it preserves limit cones. -/
def IsLimit.ofPreservesConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
@@ -134,8 +130,7 @@ def IsLimit.ofPreservesConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤
def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[ReflectsLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit (G.obj c)) : IsLimit c :=
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalOfObj _ _
-#align category_theory.limits.is_limit.of_reflects_cone_terminal
- CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal
+#align category_theory.limits.is_limit.of_reflects_cone_terminal CategoryTheory.Limits.IsLimit.ofReflectsConeTerminal
/-- Construct an object of the category `(F ↓ Δ)` from a cocone on `F`. This is part of an
equivalence, see `Cocone.equivStructuredArrow`. -/
@@ -214,16 +209,14 @@ theorem IsInitial.to_eq_descCoconeMorphism {F : J ⥤ C} {c : Cocone F} (hc : Is
(s : Cocone F) :
IsInitial.to hc s = ((Cocone.isColimitEquivIsInitial _).symm hc).descCoconeMorphism s :=
(IsColimit.descCoconeMorphism_eq_isInitial_to (c.isColimitEquivIsInitial.symm hc) s).symm
-#align category_theory.limits.is_initial.to_eq_desc_cocone_morphism
- CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism
+#align category_theory.limits.is_initial.to_eq_desc_cocone_morphism CategoryTheory.Limits.IsInitial.to_eq_descCoconeMorphism
/-- If `G : Cocone F ⥤ Cocone F'` preserves initial objects, it preserves colimit cocones. -/
def IsColimit.ofPreservesCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
[PreservesColimit (Functor.empty.{0} _) G] {c : Cocone F} (hc : IsColimit c) :
IsColimit (G.obj c) :=
(Cocone.isColimitEquivIsInitial _).symm <| (Cocone.isColimitEquivIsInitial _ hc).isInitialObj _ _
-#align category_theory.limits.is_colimit.of_preserves_cocone_initial
- CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial
+#align category_theory.limits.is_colimit.of_preserves_cocone_initial CategoryTheory.Limits.IsColimit.ofPreservesCoconeInitial
/-- If `G : Cocone F ⥤ Cocone F'` reflects initial objects, it reflects colimit cocones. -/
def IsColimit.ofReflectsCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F ⥤ Cocone F')
Apparently we have CI scripts that assume those fall on a single line. The command line used to fix the aligns was:
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^#align ([^[:space:]]+)\n *([^[:space:]]+)$/#align \1 \2/' {} \;
Co-authored-by: Moritz Firsching <firsching@google.com>
@@ -48,8 +48,7 @@ def Cone.toCostructuredArrow (F : J ⥤ C) : Cone F ⥤ CostructuredArrow (const
CostructuredArrow.homMk f.Hom <| by
ext
simp
-#align category_theory.limits.cone.to_costructured_arrow
- CategoryTheory.Limits.Cone.toCostructuredArrow
+#align category_theory.limits.cone.to_costructured_arrow CategoryTheory.Limits.Cone.toCostructuredArrow
/-- Construct a cone on `F` from an object of the category `(Δ ↓ F)`. This is part of an
equivalence, see `Cone.equivCostructuredArrow`. -/
@@ -98,8 +97,7 @@ theorem hasLimit_iff_hasTerminal_cone (F : J ⥤ C) : HasLimit F ↔ HasTerminal
⟨fun _ => (Cone.isLimitEquivIsTerminal _ (limit.isLimit F)).hasTerminal, fun h =>
haveI : HasTerminal (Cone F) := h
⟨⟨⟨⊤_ _, (Cone.isLimitEquivIsTerminal _).symm terminalIsTerminal⟩⟩⟩⟩
-#align category_theory.limits.has_limit_iff_has_terminal_cone
- CategoryTheory.Limits.hasLimit_iff_hasTerminal_cone
+#align category_theory.limits.has_limit_iff_has_terminal_cone CategoryTheory.Limits.hasLimit_iff_hasTerminal_cone
theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
HasLimitsOfShape J C ↔ Nonempty (IsLeftAdjoint (const J : C ⥤ _)) :=
@@ -112,14 +110,12 @@ theorem hasLimitsOfShape_iff_isLeftAdjoint_const :
_ ↔ Nonempty (IsLeftAdjoint (const J : C ⥤ _)) :=
nonempty_isLeftAdjoint_iff_hasTerminal_costructuredArrow.symm
-#align category_theory.limits.has_limits_of_shape_iff_is_left_adjoint_const
- CategoryTheory.Limits.hasLimitsOfShape_iff_isLeftAdjoint_const
+#align category_theory.limits.has_limits_of_shape_iff_is_left_adjoint_const CategoryTheory.Limits.hasLimitsOfShape_iff_isLeftAdjoint_const
theorem IsLimit.liftConeMorphism_eq_isTerminal_from {F : J ⥤ C} {c : Cone F} (hc : IsLimit c)
(s : Cone F) : hc.liftConeMorphism s = IsTerminal.from (Cone.isLimitEquivIsTerminal _ hc) _ :=
rfl
-#align category_theory.limits.is_limit.lift_cone_morphism_eq_is_terminal_from
- CategoryTheory.Limits.IsLimit.liftConeMorphism_eq_isTerminal_from
+#align category_theory.limits.is_limit.lift_cone_morphism_eq_is_terminal_from CategoryTheory.Limits.IsLimit.liftConeMorphism_eq_isTerminal_from
theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsTerminal c)
(s : Cone F) :
@@ -132,8 +128,7 @@ theorem IsTerminal.from_eq_liftConeMorphism {F : J ⥤ C} {c : Cone F} (hc : IsT
def IsLimit.ofPreservesConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
[PreservesLimit (Functor.empty.{0} _) G] {c : Cone F} (hc : IsLimit c) : IsLimit (G.obj c) :=
(Cone.isLimitEquivIsTerminal _).symm <| (Cone.isLimitEquivIsTerminal _ hc).isTerminalObj _ _
-#align category_theory.limits.is_limit.of_preserves_cone_terminal
- CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal
+#align category_theory.limits.is_limit.of_preserves_cone_terminal CategoryTheory.Limits.IsLimit.ofPreservesConeTerminal
/-- If `G : Cone F ⥤ Cone F'` reflects terminal objects, it reflects limit cones. -/
def IsLimit.ofReflectsConeTerminal {F : J ⥤ C} {F' : K ⥤ D} (G : Cone F ⥤ Cone F')
@@ -152,8 +147,7 @@ def Cocone.toStructuredArrow (F : J ⥤ C) : Cocone F ⥤ StructuredArrow F (con
StructuredArrow.homMk f.Hom <| by
ext
simp
-#align category_theory.limits.cocone.to_structured_arrow
- CategoryTheory.Limits.Cocone.toStructuredArrow
+#align category_theory.limits.cocone.to_structured_arrow CategoryTheory.Limits.Cocone.toStructuredArrow
/-- Construct a cocone on `F` from an object of the category `(F ↓ Δ)`. This is part of an
equivalence, see `Cocone.equivStructuredArrow`. -/
@@ -178,8 +172,7 @@ def Cocone.equivStructuredArrow (F : J ⥤ C) : Cocone F ≌ StructuredArrow F (
(NatIso.ofComponents Cocones.eta (by aesop_cat))
(NatIso.ofComponents (fun c => (StructuredArrow.eta _).symm)
(by intros ; apply StructuredArrow.ext ; aesop_cat))
-#align category_theory.limits.cocone.equiv_structured_arrow
- CategoryTheory.Limits.Cocone.equivStructuredArrow
+#align category_theory.limits.cocone.equiv_structured_arrow CategoryTheory.Limits.Cocone.equivStructuredArrow
/-- A cocone is a colimit cocone iff it is initial. -/
def Cocone.isColimitEquivIsInitial {F : J ⥤ C} (c : Cocone F) : IsColimit c ≃ IsInitial c :=
@@ -188,8 +181,7 @@ def Cocone.isColimitEquivIsInitial {F : J ⥤ C} (c : Cocone F) : IsColimit c
invFun := fun h s => ⟨⟨IsInitial.to h s⟩, fun a => IsInitial.hom_ext h a _⟩
left_inv := by aesop_cat
right_inv := by aesop_cat }
-#align category_theory.limits.cocone.is_colimit_equiv_is_initial
- CategoryTheory.Limits.Cocone.isColimitEquivIsInitial
+#align category_theory.limits.cocone.is_colimit_equiv_is_initial CategoryTheory.Limits.Cocone.isColimitEquivIsInitial
theorem hasColimit_iff_hasInitial_cocone (F : J ⥤ C) : HasColimit F ↔ HasInitial (Cocone F) :=
⟨fun _ => (Cocone.isColimitEquivIsInitial _ (colimit.isColimit F)).hasInitial, fun h =>
@@ -216,8 +208,7 @@ theorem IsColimit.descCoconeMorphism_eq_isInitial_to {F : J ⥤ C} {c : Cocone F
(s : Cocone F) :
hc.descCoconeMorphism s = IsInitial.to (Cocone.isColimitEquivIsInitial _ hc) _ :=
rfl
-#align category_theory.limits.is_colimit.desc_cocone_morphism_eq_is_initial_to
- CategoryTheory.Limits.IsColimit.descCoconeMorphism_eq_isInitial_to
+#align category_theory.limits.is_colimit.desc_cocone_morphism_eq_is_initial_to CategoryTheory.Limits.IsColimit.descCoconeMorphism_eq_isInitial_to
theorem IsInitial.to_eq_descCoconeMorphism {F : J ⥤ C} {c : Cocone F} (hc : IsInitial c)
(s : Cocone F) :
@@ -240,7 +231,6 @@ def IsColimit.ofReflectsCoconeInitial {F : J ⥤ C} {F' : K ⥤ D} (G : Cocone F
IsColimit c :=
(Cocone.isColimitEquivIsInitial _).symm <|
(Cocone.isColimitEquivIsInitial _ hc).isInitialOfObj _ _
-#align category_theory.limits.is_colimit.of_reflects_cocone_initial
- CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitial
+#align category_theory.limits.is_colimit.of_reflects_cocone_initial CategoryTheory.Limits.IsColimit.ofReflectsCoconeInitial
end CategoryTheory.Limits
Co-authored-by: adamtopaz <github@adamtopaz.com>
All dependencies are ported!