category_theory.limits.shapes.wide_pullbacks
⟷
Mathlib.CategoryTheory.Limits.Shapes.WidePullbacks
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta, Jakob von Raumer
-/
-import Mathbin.CategoryTheory.Limits.HasLimits
-import Mathbin.CategoryTheory.Thin
+import CategoryTheory.Limits.HasLimits
+import CategoryTheory.Thin
#align_import category_theory.limits.shapes.wide_pullbacks from "leanprover-community/mathlib"@"832f7b9162039c28b9361289c8681f155cae758f"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2020 Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta, Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.limits.shapes.wide_pullbacks
-! leanprover-community/mathlib commit 832f7b9162039c28b9361289c8681f155cae758f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Limits.HasLimits
import Mathbin.CategoryTheory.Thin
+#align_import category_theory.limits.shapes.wide_pullbacks from "leanprover-community/mathlib"@"832f7b9162039c28b9361289c8681f155cae758f"
+
/-!
# Wide pullbacks
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -133,12 +133,15 @@ def wideCospan (B : C) (objs : J → C) (arrows : ∀ j : J, objs j ⟶ B) : Wid
#align category_theory.limits.wide_pullback_shape.wide_cospan CategoryTheory.Limits.WidePullbackShape.wideCospan
-/
+#print CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospan /-
/-- Every diagram is naturally isomorphic (actually, equal) to a `wide_cospan` -/
def diagramIsoWideCospan (F : WidePullbackShape J ⥤ C) :
F ≅ wideCospan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.term j) :=
(NatIso.ofComponents fun j => eqToIso <| by tidy) <| by tidy
#align category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospan
+-/
+#print CategoryTheory.Limits.WidePullbackShape.mkCone /-
/-- Construct a cone over a wide cospan. -/
@[simps]
def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π : ∀ j, X ⟶ F.obj (some j))
@@ -152,7 +155,9 @@ def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π :
naturality' := fun j j' f => by
cases j <;> cases j' <;> cases f <;> unfold_aux <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pullback_shape.mk_cone CategoryTheory.Limits.WidePullbackShape.mkCone
+-/
+#print CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv /-
/-- Wide pullback diagrams of equivalent index types are equivlent. -/
def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ WidePullbackShape J'
where
@@ -165,13 +170,16 @@ def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ W
NatIso.ofComponents (fun j => by cases j <;> simp) fun j k f => by
simp only [eq_iff_true_of_subsingleton]
#align category_theory.limits.wide_pullback_shape.equivalence_of_equiv CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv
+-/
+#print CategoryTheory.Limits.WidePullbackShape.uliftEquivalence /-
/-- Lifting universe and morphism levels preserves wide pullback diagrams. -/
def uliftEquivalence :
ULiftHom.{w'} (ULift.{w'} (WidePullbackShape J)) ≌ WidePullbackShape (ULift J) :=
(ULiftHomULiftCategory.equiv.{w', w', w, w} (WidePullbackShape J)).symm.trans
(equivalenceOfEquiv _ (Equiv.ulift.{w', w}.symm : J ≃ ULift.{w'} J))
#align category_theory.limits.wide_pullback_shape.ulift_equivalence CategoryTheory.Limits.WidePullbackShape.uliftEquivalence
+-/
end WidePullbackShape
@@ -251,12 +259,15 @@ def wideSpan (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : WideP
#align category_theory.limits.wide_pushout_shape.wide_span CategoryTheory.Limits.WidePushoutShape.wideSpan
-/
+#print CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpan /-
/-- Every diagram is naturally isomorphic (actually, equal) to a `wide_span` -/
def diagramIsoWideSpan (F : WidePushoutShape J ⥤ C) :
F ≅ wideSpan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.init j) :=
(NatIso.ofComponents fun j => eqToIso <| by tidy) <| by tidy
#align category_theory.limits.wide_pushout_shape.diagram_iso_wide_span CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpan
+-/
+#print CategoryTheory.Limits.WidePushoutShape.mkCocone /-
/-- Construct a cocone over a wide span. -/
@[simps]
def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι : ∀ j, F.obj (some j) ⟶ X)
@@ -270,6 +281,7 @@ def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι :
naturality' := fun j j' f => by
cases j <;> cases j' <;> cases f <;> unfold_aux <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pushout_shape.mk_cocone CategoryTheory.Limits.WidePushoutShape.mkCocone
+-/
end WidePushoutShape
@@ -343,10 +355,12 @@ noncomputable abbrev base : widePullback _ _ arrows ⟶ B :=
#align category_theory.limits.wide_pullback.base CategoryTheory.Limits.WidePullback.base
-/
+#print CategoryTheory.Limits.WidePullback.π_arrow /-
@[simp, reassoc]
theorem π_arrow (j : J) : π arrows j ≫ arrows _ = base arrows := by
apply limit.w (wide_pullback_shape.wide_cospan _ _ _) (wide_pullback_shape.hom.term j)
#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.WidePullback.π_arrow
+-/
variable {arrows}
@@ -362,14 +376,19 @@ variable (arrows)
variable {X : C} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j) (w : ∀ j, fs j ≫ arrows j = f)
+#print CategoryTheory.Limits.WidePullback.lift_π /-
@[simp, reassoc]
theorem lift_π (j : J) : lift f fs w ≫ π arrows j = fs _ := by simp; rfl
#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_π
+-/
+#print CategoryTheory.Limits.WidePullback.lift_base /-
@[simp, reassoc]
theorem lift_base : lift f fs w ≫ base arrows = f := by simp; rfl
#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_base
+-/
+#print CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq /-
theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
(∀ j : J, g ≫ π arrows j = fs j) → g ≫ base arrows = f → g = lift f fs w :=
by
@@ -381,14 +400,18 @@ theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
· apply h2
· apply h1
#align category_theory.limits.wide_pullback.eq_lift_of_comp_eq CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq
+-/
+#print CategoryTheory.Limits.WidePullback.hom_eq_lift /-
theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
g = lift (g ≫ base arrows) (fun j => g ≫ π arrows j) (by tidy) :=
by
apply eq_lift_of_comp_eq
tidy
#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_lift
+-/
+#print CategoryTheory.Limits.WidePullback.hom_ext /-
@[ext]
theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) :
(∀ j : J, g1 ≫ π arrows j = g2 ≫ π arrows j) → g1 ≫ base arrows = g2 ≫ base arrows → g1 = g2 :=
@@ -399,6 +422,7 @@ theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) :
· apply h2
· apply h1
#align category_theory.limits.wide_pullback.hom_ext CategoryTheory.Limits.WidePullback.hom_ext
+-/
end WidePullback
@@ -422,10 +446,12 @@ noncomputable abbrev head : B ⟶ widePushout B objs arrows :=
#align category_theory.limits.wide_pushout.head CategoryTheory.Limits.WidePushout.head
-/
+#print CategoryTheory.Limits.WidePushout.arrow_ι /-
@[simp, reassoc]
theorem arrow_ι (j : J) : arrows j ≫ ι arrows j = head arrows := by
apply colimit.w (wide_pushout_shape.wide_span _ _ _) (wide_pushout_shape.hom.init j)
#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.WidePushout.arrow_ι
+-/
variable {arrows}
@@ -441,14 +467,19 @@ variable (arrows)
variable {X : C} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X) (w : ∀ j, arrows j ≫ fs j = f)
+#print CategoryTheory.Limits.WidePushout.ι_desc /-
@[simp, reassoc]
theorem ι_desc (j : J) : ι arrows j ≫ desc f fs w = fs _ := by simp; rfl
#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_desc
+-/
+#print CategoryTheory.Limits.WidePushout.head_desc /-
@[simp, reassoc]
theorem head_desc : head arrows ≫ desc f fs w = f := by simp; rfl
#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_desc
+-/
+#print CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq /-
theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
(∀ j : J, ι arrows j ≫ g = fs j) → head arrows ≫ g = f → g = desc f fs w :=
by
@@ -460,14 +491,18 @@ theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
· apply h2
· apply h1
#align category_theory.limits.wide_pushout.eq_desc_of_comp_eq CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq
+-/
+#print CategoryTheory.Limits.WidePushout.hom_eq_desc /-
theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
g = desc (head arrows ≫ g) (fun j => ι arrows j ≫ g) fun j => by rw [← category.assoc]; simp :=
by
apply eq_desc_of_comp_eq
tidy
#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_desc
+-/
+#print CategoryTheory.Limits.WidePushout.hom_ext /-
@[ext]
theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) :
(∀ j : J, ι arrows j ≫ g1 = ι arrows j ≫ g2) → head arrows ≫ g1 = head arrows ≫ g2 → g1 = g2 :=
@@ -478,6 +513,7 @@ theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) :
· apply h2
· apply h1
#align category_theory.limits.wide_pushout.hom_ext CategoryTheory.Limits.WidePushout.hom_ext
+-/
end WidePushout
@@ -573,6 +609,7 @@ def widePullbackShapeUnopOp : widePullbackShapeOp J ⋙ widePushoutShapeUnop J
#align category_theory.limits.wide_pullback_shape_unop_op CategoryTheory.Limits.widePullbackShapeUnopOp
-/
+#print CategoryTheory.Limits.widePushoutShapeOpEquiv /-
/-- The duality equivalence `(wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J` -/
@[simps]
def widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J
@@ -582,7 +619,9 @@ def widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J
unitIso := (widePushoutShapeOpUnop J).symm
counitIso := widePullbackShapeUnopOp J
#align category_theory.limits.wide_pushout_shape_op_equiv CategoryTheory.Limits.widePushoutShapeOpEquiv
+-/
+#print CategoryTheory.Limits.widePullbackShapeOpEquiv /-
/-- The duality equivalence `(wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J` -/
@[simps]
def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J
@@ -592,6 +631,7 @@ def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape
unitIso := (widePullbackShapeOpUnop J).symm
counitIso := widePushoutShapeUnopOp J
#align category_theory.limits.wide_pullback_shape_op_equiv CategoryTheory.Limits.widePullbackShapeOpEquiv
+-/
#print CategoryTheory.Limits.hasWidePullbacks_shrink /-
/-- If a category has wide pullbacks on a higher universe level it also has wide pullbacks
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -44,14 +44,16 @@ variable (J : Type w)
#print CategoryTheory.Limits.WidePullbackShape /-
/-- A wide pullback shape for any type `J` can be written simply as `option J`. -/
def WidePullbackShape :=
- Option J deriving Inhabited
+ Option J
+deriving Inhabited
#align category_theory.limits.wide_pullback_shape CategoryTheory.Limits.WidePullbackShape
-/
#print CategoryTheory.Limits.WidePushoutShape /-
/-- A wide pushout shape for any type `J` can be written simply as `option J`. -/
def WidePushoutShape :=
- Option J deriving Inhabited
+ Option J
+deriving Inhabited
#align category_theory.limits.wide_pushout_shape CategoryTheory.Limits.WidePushoutShape
-/
@@ -241,7 +243,11 @@ def wideSpan (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : WideP
cases' f with _ j
· apply 𝟙 _
· exact arrows j
- map_comp' := by rintro (_ | _) (_ | _) (_ | _) (_ | _) (_ | _) <;> first |simpa|simp
+ map_comp' := by
+ rintro (_ | _) (_ | _) (_ | _) (_ | _) (_ | _) <;>
+ first
+ | simpa
+ | simp
#align category_theory.limits.wide_pushout_shape.wide_span CategoryTheory.Limits.WidePushoutShape.wideSpan
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -131,24 +131,12 @@ def wideCospan (B : C) (objs : J → C) (arrows : ∀ j : J, objs j ⟶ B) : Wid
#align category_theory.limits.wide_pullback_shape.wide_cospan CategoryTheory.Limits.WidePullbackShape.wideCospan
-/
-/- warning: category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan -> CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospan is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u1 u2, max u1 u2 u1 u3} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePullbackShape.wideCospan.{u1, u2, u3} J C _inst_1 (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (fun (j : J) => CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) (fun (j : J) => CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j)))
-but is expected to have type
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePullbackShape.wideCospan.{u1, u2, u3} J C _inst_1 (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (fun (j : J) => Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) (fun (j : J) => Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j)))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospanₓ'. -/
/-- Every diagram is naturally isomorphic (actually, equal) to a `wide_cospan` -/
def diagramIsoWideCospan (F : WidePullbackShape J ⥤ C) :
F ≅ wideCospan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.term j) :=
(NatIso.ofComponents fun j => eqToIso <| by tidy) <| by tidy
#align category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospan
-/- warning: category_theory.limits.wide_pullback_shape.mk_cone -> CategoryTheory.Limits.WidePullbackShape.mkCone is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J))) (π : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j))), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (π j) (CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j))) f) -> (CategoryTheory.Limits.Cone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F)
-but is expected to have type
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J))) (π : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j))), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (π j) (Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j))) f) -> (CategoryTheory.Limits.Cone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.mk_cone CategoryTheory.Limits.WidePullbackShape.mkConeₓ'. -/
/-- Construct a cone over a wide cospan. -/
@[simps]
def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π : ∀ j, X ⟶ F.obj (some j))
@@ -163,12 +151,6 @@ def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π :
cases j <;> cases j' <;> cases f <;> unfold_aux <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pullback_shape.mk_cone CategoryTheory.Limits.WidePullbackShape.mkCone
-/- warning: category_theory.limits.wide_pullback_shape.equivalence_of_equiv -> CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} (J' : Type.{u2}), (Equiv.{succ u1, succ u2} J J') -> (CategoryTheory.Equivalence.{u1, u2, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) (CategoryTheory.Limits.WidePullbackShape.{u2} J') (CategoryTheory.Limits.WidePullbackShape.category.{u2} J'))
-but is expected to have type
- forall {J : Type.{u1}} (J' : Type.{u2}), (Equiv.{succ u1, succ u2} J J') -> (CategoryTheory.Equivalence.{u1, u2, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.{u2} J') (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u2} J'))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.equivalence_of_equiv CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquivₓ'. -/
/-- Wide pullback diagrams of equivalent index types are equivlent. -/
def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ WidePullbackShape J'
where
@@ -182,12 +164,6 @@ def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ W
simp only [eq_iff_true_of_subsingleton]
#align category_theory.limits.wide_pullback_shape.equivalence_of_equiv CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv
-/- warning: category_theory.limits.wide_pullback_shape.ulift_equivalence -> CategoryTheory.Limits.WidePullbackShape.uliftEquivalence is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}}, CategoryTheory.Equivalence.{max u2 u1, max u1 u2, max u1 u2, max u1 u2} (CategoryTheory.ULiftHom.{u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J))) (CategoryTheory.ULiftHom.category.{u1, u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.uliftCategory.{u1, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.{max u1 u2} (ULift.{u2, u1} J)) (CategoryTheory.Limits.WidePullbackShape.category.{max u1 u2} (ULift.{u2, u1} J))
-but is expected to have type
- forall {J : Type.{u1}}, CategoryTheory.Equivalence.{max u1 u2, max u1 u2, max u2 u1, max u1 u2} (CategoryTheory.ULiftHom.{u2, max u2 u1} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.{max u1 u2} (ULift.{u2, u1} J)) (CategoryTheory.ULiftHom.category.{u1, u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.uliftCategory.{u1, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.category.{max u1 u2} (ULift.{u2, u1} J))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.ulift_equivalence CategoryTheory.Limits.WidePullbackShape.uliftEquivalenceₓ'. -/
/-- Lifting universe and morphism levels preserves wide pullback diagrams. -/
def uliftEquivalence :
ULiftHom.{w'} (ULift.{w'} (WidePullbackShape J)) ≌ WidePullbackShape (ULift J) :=
@@ -269,24 +245,12 @@ def wideSpan (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : WideP
#align category_theory.limits.wide_pushout_shape.wide_span CategoryTheory.Limits.WidePushoutShape.wideSpan
-/
-/- warning: category_theory.limits.wide_pushout_shape.diagram_iso_wide_span -> CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpan is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u1 u2, max u1 u2 u1 u3} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePushoutShape.wideSpan.{u1, u2, u3} J C _inst_1 (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (fun (j : J) => CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) (fun (j : J) => CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)))
-but is expected to have type
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePushoutShape.wideSpan.{u1, u2, u3} J C _inst_1 (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (fun (j : J) => Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) (fun (j : J) => Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout_shape.diagram_iso_wide_span CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpanₓ'. -/
/-- Every diagram is naturally isomorphic (actually, equal) to a `wide_span` -/
def diagramIsoWideSpan (F : WidePushoutShape J ⥤ C) :
F ≅ wideSpan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.init j) :=
(NatIso.ofComponents fun j => eqToIso <| by tidy) <| by tidy
#align category_theory.limits.wide_pushout_shape.diagram_iso_wide_span CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpan
-/- warning: category_theory.limits.wide_pushout_shape.mk_cocone -> CategoryTheory.Limits.WidePushoutShape.mkCocone is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) X) (ι : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) X (CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)) (ι j)) f) -> (CategoryTheory.Limits.Cocone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F)
-but is expected to have type
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) X) (ι : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) X (Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)) (ι j)) f) -> (CategoryTheory.Limits.Cocone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout_shape.mk_cocone CategoryTheory.Limits.WidePushoutShape.mkCoconeₓ'. -/
/-- Construct a cocone over a wide span. -/
@[simps]
def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι : ∀ j, F.obj (some j) ⟶ X)
@@ -373,12 +337,6 @@ noncomputable abbrev base : widePullback _ _ arrows ⟶ B :=
#align category_theory.limits.wide_pullback.base CategoryTheory.Limits.WidePullback.base
-/
-/- warning: category_theory.limits.wide_pullback.π_arrow -> CategoryTheory.Limits.WidePullback.π_arrow is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.WidePullback.π_arrowₓ'. -/
@[simp, reassoc]
theorem π_arrow (j : J) : π arrows j ≫ arrows _ = base arrows := by
apply limit.w (wide_pullback_shape.wide_cospan _ _ _) (wide_pullback_shape.hom.term j)
@@ -398,32 +356,14 @@ variable (arrows)
variable {X : C} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j) (w : ∀ j, fs j ≫ arrows j = f)
-/- warning: category_theory.limits.wide_pullback.lift_π -> CategoryTheory.Limits.WidePullback.lift_π is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) (objs j) (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) (objs j) (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_πₓ'. -/
@[simp, reassoc]
theorem lift_π (j : J) : lift f fs w ≫ π arrows j = fs _ := by simp; rfl
#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_π
-/- warning: category_theory.limits.wide_pullback.lift_base -> CategoryTheory.Limits.WidePullback.lift_base is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (fs j) (arrows j)) f), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) B (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) B (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_baseₓ'. -/
@[simp, reassoc]
theorem lift_base : lift f fs w ≫ base arrows = f := by simp; rfl
#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_base
-/- warning: category_theory.limits.wide_pullback.eq_lift_of_comp_eq -> CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w))
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.eq_lift_of_comp_eq CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eqₓ'. -/
theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
(∀ j : J, g ≫ π arrows j = fs j) → g ≫ base arrows = f → g = lift f fs w :=
by
@@ -436,9 +376,6 @@ theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
· apply h1
#align category_theory.limits.wide_pullback.eq_lift_of_comp_eq CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq
-/- warning: category_theory.limits.wide_pullback.hom_eq_lift -> CategoryTheory.Limits.WidePullback.hom_eq_lift is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_liftₓ'. -/
theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
g = lift (g ≫ base arrows) (fun j => g ≫ π arrows j) (by tidy) :=
by
@@ -446,12 +383,6 @@ theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
tidy
#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_lift
-/- warning: category_theory.limits.wide_pullback.hom_ext -> CategoryTheory.Limits.WidePullback.hom_ext is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (g2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g1 (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g2 (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g1 (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g2 (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g1 g2)
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (g2 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g1 (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g2 (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g1 (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g2 (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g1 g2)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.hom_ext CategoryTheory.Limits.WidePullback.hom_extₓ'. -/
@[ext]
theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) :
(∀ j : J, g1 ≫ π arrows j = g2 ≫ π arrows j) → g1 ≫ base arrows = g2 ≫ base arrows → g1 = g2 :=
@@ -485,12 +416,6 @@ noncomputable abbrev head : B ⟶ widePushout B objs arrows :=
#align category_theory.limits.wide_pushout.head CategoryTheory.Limits.WidePushout.head
-/
-/- warning: category_theory.limits.wide_pushout.arrow_ι -> CategoryTheory.Limits.WidePushout.arrow_ι is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.WidePushout.arrow_ιₓ'. -/
@[simp, reassoc]
theorem arrow_ι (j : J) : arrows j ≫ ι arrows j = head arrows := by
apply colimit.w (wide_pushout_shape.wide_span _ _ _) (wide_pushout_shape.hom.init j)
@@ -510,32 +435,14 @@ variable (arrows)
variable {X : C} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X) (w : ∀ j, arrows j ≫ fs j = f)
-/- warning: category_theory.limits.wide_pushout.ι_desc -> CategoryTheory.Limits.WidePushout.ι_desc is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) (fs j)
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) (fs j)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_descₓ'. -/
@[simp, reassoc]
theorem ι_desc (j : J) : ι arrows j ≫ desc f fs w = fs _ := by simp; rfl
#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_desc
-/- warning: category_theory.limits.wide_pushout.head_desc -> CategoryTheory.Limits.WidePushout.head_desc is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (fs j)) f), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) f
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) f
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_descₓ'. -/
@[simp, reassoc]
theorem head_desc : head arrows ≫ desc f fs w = f := by simp; rfl
#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_desc
-/- warning: category_theory.limits.wide_pushout.eq_desc_of_comp_eq -> CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fs j)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) f) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w))
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fs j)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) f) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w))
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.eq_desc_of_comp_eq CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eqₓ'. -/
theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
(∀ j : J, ι arrows j ≫ g = fs j) → head arrows ≫ g = f → g = desc f fs w :=
by
@@ -548,9 +455,6 @@ theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
· apply h1
#align category_theory.limits.wide_pushout.eq_desc_of_comp_eq CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq
-/- warning: category_theory.limits.wide_pushout.hom_eq_desc -> CategoryTheory.Limits.WidePushout.hom_eq_desc is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_descₓ'. -/
theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
g = desc (head arrows ≫ g) (fun j => ι arrows j ≫ g) fun j => by rw [← category.assoc]; simp :=
by
@@ -558,12 +462,6 @@ theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
tidy
#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_desc
-/- warning: category_theory.limits.wide_pushout.hom_ext -> CategoryTheory.Limits.WidePushout.hom_ext is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (g2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g1) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g2)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g1) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g2)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g1 g2)
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (g2 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g1) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g2)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g1) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g2)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g1 g2)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.hom_ext CategoryTheory.Limits.WidePushout.hom_extₓ'. -/
@[ext]
theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) :
(∀ j : J, ι arrows j ≫ g1 = ι arrows j ≫ g2) → head arrows ≫ g1 = head arrows ≫ g2 → g1 = g2 :=
@@ -669,12 +567,6 @@ def widePullbackShapeUnopOp : widePullbackShapeOp J ⋙ widePushoutShapeUnop J
#align category_theory.limits.wide_pullback_shape_unop_op CategoryTheory.Limits.widePullbackShapeUnopOp
-/
-/- warning: category_theory.limits.wide_pushout_shape_op_equiv -> CategoryTheory.Limits.widePushoutShapeOpEquiv is a dubious translation:
-lean 3 declaration is
- forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J)) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)) (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)
-but is expected to have type
- forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J)) (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout_shape_op_equiv CategoryTheory.Limits.widePushoutShapeOpEquivₓ'. -/
/-- The duality equivalence `(wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J` -/
@[simps]
def widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J
@@ -685,12 +577,6 @@ def widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J
counitIso := widePullbackShapeUnopOp J
#align category_theory.limits.wide_pushout_shape_op_equiv CategoryTheory.Limits.widePushoutShapeOpEquiv
-/- warning: category_theory.limits.wide_pullback_shape_op_equiv -> CategoryTheory.Limits.widePullbackShapeOpEquiv is a dubious translation:
-lean 3 declaration is
- forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)) (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)
-but is expected to have type
- forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)
-Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape_op_equiv CategoryTheory.Limits.widePullbackShapeOpEquivₓ'. -/
/-- The duality equivalence `(wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J` -/
@[simps]
def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -405,10 +405,7 @@ but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) (objs j) (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_πₓ'. -/
@[simp, reassoc]
-theorem lift_π (j : J) : lift f fs w ≫ π arrows j = fs _ :=
- by
- simp
- rfl
+theorem lift_π (j : J) : lift f fs w ≫ π arrows j = fs _ := by simp; rfl
#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_π
/- warning: category_theory.limits.wide_pullback.lift_base -> CategoryTheory.Limits.WidePullback.lift_base is a dubious translation:
@@ -418,10 +415,7 @@ but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) B (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_baseₓ'. -/
@[simp, reassoc]
-theorem lift_base : lift f fs w ≫ base arrows = f :=
- by
- simp
- rfl
+theorem lift_base : lift f fs w ≫ base arrows = f := by simp; rfl
#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_base
/- warning: category_theory.limits.wide_pullback.eq_lift_of_comp_eq -> CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq is a dubious translation:
@@ -523,10 +517,7 @@ but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) (fs j)
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_descₓ'. -/
@[simp, reassoc]
-theorem ι_desc (j : J) : ι arrows j ≫ desc f fs w = fs _ :=
- by
- simp
- rfl
+theorem ι_desc (j : J) : ι arrows j ≫ desc f fs w = fs _ := by simp; rfl
#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_desc
/- warning: category_theory.limits.wide_pushout.head_desc -> CategoryTheory.Limits.WidePushout.head_desc is a dubious translation:
@@ -536,10 +527,7 @@ but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) f
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_descₓ'. -/
@[simp, reassoc]
-theorem head_desc : head arrows ≫ desc f fs w = f :=
- by
- simp
- rfl
+theorem head_desc : head arrows ≫ desc f fs w = f := by simp; rfl
#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_desc
/- warning: category_theory.limits.wide_pushout.eq_desc_of_comp_eq -> CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq is a dubious translation:
@@ -564,11 +552,7 @@ theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_descₓ'. -/
theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
- g =
- desc (head arrows ≫ g) (fun j => ι arrows j ≫ g) fun j =>
- by
- rw [← category.assoc]
- simp :=
+ g = desc (head arrows ≫ g) (fun j => ι arrows j ≫ g) fun j => by rw [← category.assoc]; simp :=
by
apply eq_desc_of_comp_eq
tidy
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -443,10 +443,7 @@ theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
#align category_theory.limits.wide_pullback.eq_lift_of_comp_eq CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq
/- warning: category_theory.limits.wide_pullback.hom_eq_lift -> CategoryTheory.Limits.WidePullback.hom_eq_lift is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fun (j : J) => id.{0} (forall {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (fun {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (j : J) => Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) True (id_tag Tactic.IdTag.simp (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) True) (Eq.trans.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) True ((fun (a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (a_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) a a_1) (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) ᾰ ᾰ_1) => congr.{succ u2, 1} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) a) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) a_1) ᾰ ᾰ_1 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) -> Prop) a a_1 (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B)) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (Eq.trans.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) (arrows j))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.Category.assoc.{u2, u3} C _inst_1 X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) B g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) (arrows j)) ((fun (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) ᾰ ᾰ_1) (ᾰ_2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) (ᾰ_3 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) ᾰ_2 ᾰ_3) => congr.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B ᾰ) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B ᾰ_1) ᾰ_2 ᾰ_3 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) -> (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B)) ᾰ ᾰ_1 (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) e_1) e_2) g g (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePullback.π_arrow.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)))) (propext (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) True (eq_self_iff_true.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)))))) trivial) X g j))
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fun (j : J) => of_eq_true (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (Eq.trans.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) True (congrFun.{succ u3, 1} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fun (a._@.Init.Prelude._hyg.170 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) => Prop) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j))) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) -> Prop) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B)) (Eq.trans.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.Category.assoc.{u3, u1} C _inst_1 X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B) (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g) (CategoryTheory.Limits.WidePullback.π_arrow.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (eq_self.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_liftₓ'. -/
theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
g = lift (g ≫ base arrows) (fun j => g ≫ π arrows j) (by tidy) :=
@@ -564,10 +561,7 @@ theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
#align category_theory.limits.wide_pushout.eq_desc_of_comp_eq CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq
/- warning: category_theory.limits.wide_pushout.hom_eq_desc -> CategoryTheory.Limits.WidePushout.hom_eq_desc is a dubious translation:
-lean 3 declaration is
- forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g) (fun (j : J) => Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (id_tag Tactic.IdTag.rw (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.ndrec.{0, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (fun (_a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) => Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) _a (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (rfl.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (Eq.symm.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.Category.assoc.{u2, u3} C _inst_1 B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)))) (Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (id_tag Tactic.IdTag.simp (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True) (Eq.trans.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True ((fun (a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (a_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a a_1) (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) ᾰ ᾰ_1) => congr.{succ u2, 1} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a_1) ᾰ ᾰ_1 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) -> Prop) a a_1 (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X)) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) ((fun (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ᾰ ᾰ_1) (ᾰ_2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (ᾰ_3 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) ᾰ_2 ᾰ_3) => congr.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X ᾰ) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X ᾰ_1) ᾰ_2 ᾰ_3 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) -> (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X)) ᾰ ᾰ_1 (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.arrow_ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g g (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (propext (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (eq_self_iff_true.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))))) trivial)))
-but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fun (j : J) => Eq.mpr.{0} (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (id.{0} (Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.ndrec.{0, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (fun (_a : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) _a (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.refl.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (Eq.symm.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (CategoryTheory.Category.assoc.{u3, u1} C _inst_1 B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)))) (of_eq_true (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.trans.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (congrFun.{succ u3, 1} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fun (a._@.Init.Prelude._hyg.170 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Prop) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) -> Prop) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (congrFun.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (fun (a._@.Mathlib.CategoryTheory.Category.Basic._hyg.118 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) => Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) -> (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (CategoryTheory.Limits.WidePushout.arrow_ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (eq_self.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_descₓ'. -/
theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
g =
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -379,7 +379,7 @@ lean 3 declaration is
but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.WidePullback.π_arrowₓ'. -/
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem π_arrow (j : J) : π arrows j ≫ arrows _ = base arrows := by
apply limit.w (wide_pullback_shape.wide_cospan _ _ _) (wide_pullback_shape.hom.term j)
#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.WidePullback.π_arrow
@@ -404,7 +404,7 @@ lean 3 declaration is
but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) (objs j) (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_πₓ'. -/
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem lift_π (j : J) : lift f fs w ≫ π arrows j = fs _ :=
by
simp
@@ -417,7 +417,7 @@ lean 3 declaration is
but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) B (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_baseₓ'. -/
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem lift_base : lift f fs w ≫ base arrows = f :=
by
simp
@@ -500,7 +500,7 @@ lean 3 declaration is
but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.WidePushout.arrow_ιₓ'. -/
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem arrow_ι (j : J) : arrows j ≫ ι arrows j = head arrows := by
apply colimit.w (wide_pushout_shape.wide_span _ _ _) (wide_pushout_shape.hom.init j)
#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.WidePushout.arrow_ι
@@ -525,7 +525,7 @@ lean 3 declaration is
but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) (fs j)
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_descₓ'. -/
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem ι_desc (j : J) : ι arrows j ≫ desc f fs w = fs _ :=
by
simp
@@ -538,7 +538,7 @@ lean 3 declaration is
but is expected to have type
forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) f
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_descₓ'. -/
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem head_desc : head arrows ≫ desc f fs w = f :=
by
simp
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -567,7 +567,7 @@ theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
lean 3 declaration is
forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g) (fun (j : J) => Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (id_tag Tactic.IdTag.rw (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.ndrec.{0, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (fun (_a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) => Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) _a (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (rfl.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (Eq.symm.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.Category.assoc.{u2, u3} C _inst_1 B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)))) (Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (id_tag Tactic.IdTag.simp (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True) (Eq.trans.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True ((fun (a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (a_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a a_1) (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) ᾰ ᾰ_1) => congr.{succ u2, 1} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a_1) ᾰ ᾰ_1 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) -> Prop) a a_1 (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X)) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) ((fun (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ᾰ ᾰ_1) (ᾰ_2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (ᾰ_3 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) ᾰ_2 ᾰ_3) => congr.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X ᾰ) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X ᾰ_1) ᾰ_2 ᾰ_3 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) -> (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X)) ᾰ ᾰ_1 (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.arrow_ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g g (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (propext (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (eq_self_iff_true.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))))) trivial)))
but is expected to have type
- forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fun (j : J) => Eq.mpr.{0} (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (id.{0} (Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.ndrec.{0, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (fun (_a : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) _a (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.refl.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (Eq.symm.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (CategoryTheory.Category.assoc.{u3, u1} C _inst_1 B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)))) (of_eq_true (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.trans.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (congrFun.{succ u3, 1} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fun (a._@.Init.Prelude._hyg.170 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Prop) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) -> Prop) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (congrFun.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (fun (a._@.Mathlib.CategoryTheory.Category.Basic._hyg.115 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) => Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) -> (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (CategoryTheory.Limits.WidePushout.arrow_ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (eq_self.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))))))
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fun (j : J) => Eq.mpr.{0} (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (id.{0} (Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.ndrec.{0, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (fun (_a : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) _a (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.refl.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (Eq.symm.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (CategoryTheory.Category.assoc.{u3, u1} C _inst_1 B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)))) (of_eq_true (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.trans.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (congrFun.{succ u3, 1} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fun (a._@.Init.Prelude._hyg.170 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Prop) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) -> Prop) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (congrFun.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (fun (a._@.Mathlib.CategoryTheory.Category.Basic._hyg.118 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) => Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) -> (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (CategoryTheory.Limits.WidePushout.arrow_ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (eq_self.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))))))
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_descₓ'. -/
theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
g =
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -727,7 +727,7 @@ def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape
/-- If a category has wide pullbacks on a higher universe level it also has wide pullbacks
on a lower universe level. -/
theorem hasWidePullbacks_shrink [HasWidePullbacks.{max w w'} C] : HasWidePullbacks.{w} C := fun J =>
- hasLimitsOfShapeOfEquivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
+ hasLimitsOfShape_of_equivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
#align category_theory.limits.has_wide_pullbacks_shrink CategoryTheory.Limits.hasWidePullbacks_shrink
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/3b267e70a936eebb21ab546f49a8df34dd300b25
@@ -186,7 +186,7 @@ def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ W
lean 3 declaration is
forall {J : Type.{u1}}, CategoryTheory.Equivalence.{max u2 u1, max u1 u2, max u1 u2, max u1 u2} (CategoryTheory.ULiftHom.{u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J))) (CategoryTheory.ULiftHom.category.{u1, u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.uliftCategory.{u1, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.{max u1 u2} (ULift.{u2, u1} J)) (CategoryTheory.Limits.WidePullbackShape.category.{max u1 u2} (ULift.{u2, u1} J))
but is expected to have type
- forall {J : Type.{u1}}, CategoryTheory.Equivalence.{max u1 u2, max u1 u2, max u2 u1, max u1 u2} (CategoryTheory.ULiftHom.{u2, max u2 u1} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.{max u1 u2} (ULift.{u2, u1} J)) (CategoryTheory.instCategoryULiftHom.{u1, u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.uliftCategory.{u1, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.category.{max u1 u2} (ULift.{u2, u1} J))
+ forall {J : Type.{u1}}, CategoryTheory.Equivalence.{max u1 u2, max u1 u2, max u2 u1, max u1 u2} (CategoryTheory.ULiftHom.{u2, max u2 u1} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.{max u1 u2} (ULift.{u2, u1} J)) (CategoryTheory.ULiftHom.category.{u1, u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.uliftCategory.{u1, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.category.{max u1 u2} (ULift.{u2, u1} J))
Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.ulift_equivalence CategoryTheory.Limits.WidePullbackShape.uliftEquivalenceₓ'. -/
/-- Lifting universe and morphism levels preserves wide pullback diagrams. -/
def uliftEquivalence :
mathlib commit https://github.com/leanprover-community/mathlib/commit/62e8311c791f02c47451bf14aa2501048e7c2f33
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta, Jakob von Raumer
! This file was ported from Lean 3 source module category_theory.limits.shapes.wide_pullbacks
-! leanprover-community/mathlib commit f187f1074fa1857c94589cc653c786cadc4c35ff
+! leanprover-community/mathlib commit 832f7b9162039c28b9361289c8681f155cae758f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.CategoryTheory.Thin
/-!
# Wide pullbacks
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We define the category `wide_pullback_shape`, (resp. `wide_pushout_shape`) which is the category
obtained from a discrete category of type `J` by adjoining a terminal (resp. initial) element.
Limits of this shape are wide pullbacks (pushouts).
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -38,29 +38,36 @@ namespace CategoryTheory.Limits
variable (J : Type w)
+#print CategoryTheory.Limits.WidePullbackShape /-
/-- A wide pullback shape for any type `J` can be written simply as `option J`. -/
def WidePullbackShape :=
Option J deriving Inhabited
#align category_theory.limits.wide_pullback_shape CategoryTheory.Limits.WidePullbackShape
+-/
+#print CategoryTheory.Limits.WidePushoutShape /-
/-- A wide pushout shape for any type `J` can be written simply as `option J`. -/
def WidePushoutShape :=
Option J deriving Inhabited
#align category_theory.limits.wide_pushout_shape CategoryTheory.Limits.WidePushoutShape
+-/
namespace WidePullbackShape
variable {J}
+#print CategoryTheory.Limits.WidePullbackShape.Hom /-
/-- The type of arrows for the shape indexing a wide pullback. -/
inductive Hom : WidePullbackShape J → WidePullbackShape J → Type w
| id : ∀ X, hom X X
| term : ∀ j : J, hom (some j) none
deriving DecidableEq
#align category_theory.limits.wide_pullback_shape.hom CategoryTheory.Limits.WidePullbackShape.Hom
+-/
attribute [nolint unused_arguments] hom.decidable_eq
+#print CategoryTheory.Limits.WidePullbackShape.struct /-
instance struct : CategoryStruct (WidePullbackShape J)
where
Hom := Hom
@@ -71,27 +78,37 @@ instance struct : CategoryStruct (WidePullbackShape J)
cases g
apply hom.term _
#align category_theory.limits.wide_pullback_shape.struct CategoryTheory.Limits.WidePullbackShape.struct
+-/
+#print CategoryTheory.Limits.WidePullbackShape.Hom.inhabited /-
instance Hom.inhabited : Inhabited (Hom none none) :=
⟨Hom.id (none : WidePullbackShape J)⟩
#align category_theory.limits.wide_pullback_shape.hom.inhabited CategoryTheory.Limits.WidePullbackShape.Hom.inhabited
+-/
attribute [local tidy] tactic.case_bash
+#print CategoryTheory.Limits.WidePullbackShape.subsingleton_hom /-
instance subsingleton_hom : Quiver.IsThin (WidePullbackShape J) := fun _ _ => ⟨by tidy⟩
#align category_theory.limits.wide_pullback_shape.subsingleton_hom CategoryTheory.Limits.WidePullbackShape.subsingleton_hom
+-/
+#print CategoryTheory.Limits.WidePullbackShape.category /-
instance category : SmallCategory (WidePullbackShape J) :=
thin_category
#align category_theory.limits.wide_pullback_shape.category CategoryTheory.Limits.WidePullbackShape.category
+-/
+#print CategoryTheory.Limits.WidePullbackShape.hom_id /-
@[simp]
theorem hom_id (X : WidePullbackShape J) : Hom.id X = 𝟙 X :=
rfl
#align category_theory.limits.wide_pullback_shape.hom_id CategoryTheory.Limits.WidePullbackShape.hom_id
+-/
variable {C : Type u} [Category.{v} C]
+#print CategoryTheory.Limits.WidePullbackShape.wideCospan /-
/-- Construct a functor out of the wide pullback shape given a J-indexed collection of arrows to a
fixed object.
-/
@@ -109,13 +126,26 @@ def wideCospan (B : C) (objs : J → C) (arrows : ∀ j : J, objs j ⟶ B) : Wid
cases g
simp
#align category_theory.limits.wide_pullback_shape.wide_cospan CategoryTheory.Limits.WidePullbackShape.wideCospan
+-/
+/- warning: category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan -> CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospan is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u1 u2, max u1 u2 u1 u3} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePullbackShape.wideCospan.{u1, u2, u3} J C _inst_1 (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (fun (j : J) => CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) (fun (j : J) => CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j)))
+but is expected to have type
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePullbackShape.wideCospan.{u1, u2, u3} J C _inst_1 (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (fun (j : J) => Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) (fun (j : J) => Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j)))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospanₓ'. -/
/-- Every diagram is naturally isomorphic (actually, equal) to a `wide_cospan` -/
def diagramIsoWideCospan (F : WidePullbackShape J ⥤ C) :
F ≅ wideCospan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.term j) :=
(NatIso.ofComponents fun j => eqToIso <| by tidy) <| by tidy
#align category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospan
+/- warning: category_theory.limits.wide_pullback_shape.mk_cone -> CategoryTheory.Limits.WidePullbackShape.mkCone is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J))) (π : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j))), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (π j) (CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j))) f) -> (CategoryTheory.Limits.Cone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F)
+but is expected to have type
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J))) (π : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j))), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (π j) (Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j) (Option.none.{u1} J) (CategoryTheory.Limits.WidePullbackShape.Hom.term.{u1} J j))) f) -> (CategoryTheory.Limits.Cone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) C _inst_1 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.mk_cone CategoryTheory.Limits.WidePullbackShape.mkConeₓ'. -/
/-- Construct a cone over a wide cospan. -/
@[simps]
def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π : ∀ j, X ⟶ F.obj (some j))
@@ -130,6 +160,12 @@ def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π :
cases j <;> cases j' <;> cases f <;> unfold_aux <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pullback_shape.mk_cone CategoryTheory.Limits.WidePullbackShape.mkCone
+/- warning: category_theory.limits.wide_pullback_shape.equivalence_of_equiv -> CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} (J' : Type.{u2}), (Equiv.{succ u1, succ u2} J J') -> (CategoryTheory.Equivalence.{u1, u2, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) (CategoryTheory.Limits.WidePullbackShape.{u2} J') (CategoryTheory.Limits.WidePullbackShape.category.{u2} J'))
+but is expected to have type
+ forall {J : Type.{u1}} (J' : Type.{u2}), (Equiv.{succ u1, succ u2} J J') -> (CategoryTheory.Equivalence.{u1, u2, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.{u2} J') (CategoryTheory.Limits.WidePullbackShape.category.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u2} J'))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.equivalence_of_equiv CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquivₓ'. -/
/-- Wide pullback diagrams of equivalent index types are equivlent. -/
def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ WidePullbackShape J'
where
@@ -143,6 +179,12 @@ def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ W
simp only [eq_iff_true_of_subsingleton]
#align category_theory.limits.wide_pullback_shape.equivalence_of_equiv CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv
+/- warning: category_theory.limits.wide_pullback_shape.ulift_equivalence -> CategoryTheory.Limits.WidePullbackShape.uliftEquivalence is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}}, CategoryTheory.Equivalence.{max u2 u1, max u1 u2, max u1 u2, max u1 u2} (CategoryTheory.ULiftHom.{u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J))) (CategoryTheory.ULiftHom.category.{u1, u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.uliftCategory.{u1, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.{max u1 u2} (ULift.{u2, u1} J)) (CategoryTheory.Limits.WidePullbackShape.category.{max u1 u2} (ULift.{u2, u1} J))
+but is expected to have type
+ forall {J : Type.{u1}}, CategoryTheory.Equivalence.{max u1 u2, max u1 u2, max u2 u1, max u1 u2} (CategoryTheory.ULiftHom.{u2, max u2 u1} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.{max u1 u2} (ULift.{u2, u1} J)) (CategoryTheory.instCategoryULiftHom.{u1, u2, max u1 u2} (ULift.{u2, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.uliftCategory.{u1, u1, u2} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J))) (CategoryTheory.Limits.WidePullbackShape.category.{max u1 u2} (ULift.{u2, u1} J))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape.ulift_equivalence CategoryTheory.Limits.WidePullbackShape.uliftEquivalenceₓ'. -/
/-- Lifting universe and morphism levels preserves wide pullback diagrams. -/
def uliftEquivalence :
ULiftHom.{w'} (ULift.{w'} (WidePullbackShape J)) ≌ WidePullbackShape (ULift J) :=
@@ -156,15 +198,18 @@ namespace WidePushoutShape
variable {J}
+#print CategoryTheory.Limits.WidePushoutShape.Hom /-
/-- The type of arrows for the shape indexing a wide psuhout. -/
inductive Hom : WidePushoutShape J → WidePushoutShape J → Type w
| id : ∀ X, hom X X
| init : ∀ j : J, hom none (some j)
deriving DecidableEq
#align category_theory.limits.wide_pushout_shape.hom CategoryTheory.Limits.WidePushoutShape.Hom
+-/
attribute [nolint unused_arguments] hom.decidable_eq
+#print CategoryTheory.Limits.WidePushoutShape.struct /-
instance struct : CategoryStruct (WidePushoutShape J)
where
Hom := Hom
@@ -175,27 +220,37 @@ instance struct : CategoryStruct (WidePushoutShape J)
cases g
apply hom.init _
#align category_theory.limits.wide_pushout_shape.struct CategoryTheory.Limits.WidePushoutShape.struct
+-/
+#print CategoryTheory.Limits.WidePushoutShape.Hom.inhabited /-
instance Hom.inhabited : Inhabited (Hom none none) :=
⟨Hom.id (none : WidePushoutShape J)⟩
#align category_theory.limits.wide_pushout_shape.hom.inhabited CategoryTheory.Limits.WidePushoutShape.Hom.inhabited
+-/
attribute [local tidy] tactic.case_bash
+#print CategoryTheory.Limits.WidePushoutShape.subsingleton_hom /-
instance subsingleton_hom : Quiver.IsThin (WidePushoutShape J) := fun _ _ => ⟨by tidy⟩
#align category_theory.limits.wide_pushout_shape.subsingleton_hom CategoryTheory.Limits.WidePushoutShape.subsingleton_hom
+-/
+#print CategoryTheory.Limits.WidePushoutShape.category /-
instance category : SmallCategory (WidePushoutShape J) :=
thin_category
#align category_theory.limits.wide_pushout_shape.category CategoryTheory.Limits.WidePushoutShape.category
+-/
+#print CategoryTheory.Limits.WidePushoutShape.hom_id /-
@[simp]
theorem hom_id (X : WidePushoutShape J) : Hom.id X = 𝟙 X :=
rfl
#align category_theory.limits.wide_pushout_shape.hom_id CategoryTheory.Limits.WidePushoutShape.hom_id
+-/
variable {C : Type u} [Category.{v} C]
+#print CategoryTheory.Limits.WidePushoutShape.wideSpan /-
/-- Construct a functor out of the wide pushout shape given a J-indexed collection of arrows from a
fixed object.
-/
@@ -209,13 +264,26 @@ def wideSpan (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : WideP
· exact arrows j
map_comp' := by rintro (_ | _) (_ | _) (_ | _) (_ | _) (_ | _) <;> first |simpa|simp
#align category_theory.limits.wide_pushout_shape.wide_span CategoryTheory.Limits.WidePushoutShape.wideSpan
+-/
+/- warning: category_theory.limits.wide_pushout_shape.diagram_iso_wide_span -> CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpan is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u1 u2, max u1 u2 u1 u3} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePushoutShape.wideSpan.{u1, u2, u3} J C _inst_1 (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (fun (j : J) => CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) (fun (j : J) => CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)))
+but is expected to have type
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] (F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1), CategoryTheory.Iso.{max u2 u1, max (max u3 u2) u1} (CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) (CategoryTheory.Functor.category.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1) F (CategoryTheory.Limits.WidePushoutShape.wideSpan.{u1, u2, u3} J C _inst_1 (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (fun (j : J) => Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) (fun (j : J) => Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout_shape.diagram_iso_wide_span CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpanₓ'. -/
/-- Every diagram is naturally isomorphic (actually, equal) to a `wide_span` -/
def diagramIsoWideSpan (F : WidePushoutShape J ⥤ C) :
F ≅ wideSpan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.init j) :=
(NatIso.ofComponents fun j => eqToIso <| by tidy) <| by tidy
#align category_theory.limits.wide_pushout_shape.diagram_iso_wide_span CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpan
+/- warning: category_theory.limits.wide_pushout_shape.mk_cocone -> CategoryTheory.Limits.WidePushoutShape.mkCocone is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) X) (ι : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J)) (CategoryTheory.Functor.obj.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.some.{u1} J j)) X (CategoryTheory.Functor.map.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)) (ι j)) f) -> (CategoryTheory.Limits.Cocone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F)
+but is expected to have type
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {F : CategoryTheory.Functor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1} {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) X) (ι : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J)) (Prefunctor.obj.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.some.{u1} J j)) X (Prefunctor.map.{succ u1, succ u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J))) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F) (Option.none.{u1} J) (Option.some.{u1} J j) (CategoryTheory.Limits.WidePushoutShape.Hom.init.{u1} J j)) (ι j)) f) -> (CategoryTheory.Limits.Cocone.{u1, u2, u1, u3} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J) C _inst_1 F)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout_shape.mk_cocone CategoryTheory.Limits.WidePushoutShape.mkCoconeₓ'. -/
/-- Construct a cocone over a wide span. -/
@[simps]
def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι : ∀ j, F.obj (some j) ⟶ X)
@@ -234,39 +302,51 @@ end WidePushoutShape
variable (C : Type u) [Category.{v} C]
+#print CategoryTheory.Limits.HasWidePullbacks /-
/-- `has_wide_pullbacks` represents a choice of wide pullback for every collection of morphisms -/
abbrev HasWidePullbacks : Prop :=
∀ J : Type w, HasLimitsOfShape (WidePullbackShape J) C
#align category_theory.limits.has_wide_pullbacks CategoryTheory.Limits.HasWidePullbacks
+-/
+#print CategoryTheory.Limits.HasWidePushouts /-
/-- `has_wide_pushouts` represents a choice of wide pushout for every collection of morphisms -/
abbrev HasWidePushouts : Prop :=
∀ J : Type w, HasColimitsOfShape (WidePushoutShape J) C
#align category_theory.limits.has_wide_pushouts CategoryTheory.Limits.HasWidePushouts
+-/
variable {C J}
+#print CategoryTheory.Limits.HasWidePullback /-
/-- `has_wide_pullback B objs arrows` means that `wide_cospan B objs arrows` has a limit. -/
abbrev HasWidePullback (B : C) (objs : J → C) (arrows : ∀ j : J, objs j ⟶ B) : Prop :=
HasLimit (WidePullbackShape.wideCospan B objs arrows)
#align category_theory.limits.has_wide_pullback CategoryTheory.Limits.HasWidePullback
+-/
+#print CategoryTheory.Limits.HasWidePushout /-
/-- `has_wide_pushout B objs arrows` means that `wide_span B objs arrows` has a colimit. -/
abbrev HasWidePushout (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : Prop :=
HasColimit (WidePushoutShape.wideSpan B objs arrows)
#align category_theory.limits.has_wide_pushout CategoryTheory.Limits.HasWidePushout
+-/
+#print CategoryTheory.Limits.widePullback /-
/-- A choice of wide pullback. -/
noncomputable abbrev widePullback (B : C) (objs : J → C) (arrows : ∀ j : J, objs j ⟶ B)
[HasWidePullback B objs arrows] : C :=
limit (WidePullbackShape.wideCospan B objs arrows)
#align category_theory.limits.wide_pullback CategoryTheory.Limits.widePullback
+-/
+#print CategoryTheory.Limits.widePushout /-
/-- A choice of wide pushout. -/
noncomputable abbrev widePushout (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j)
[HasWidePushout B objs arrows] : C :=
colimit (WidePushoutShape.wideSpan B objs arrows)
#align category_theory.limits.wide_pushout CategoryTheory.Limits.widePushout
+-/
variable (C)
@@ -276,47 +356,77 @@ variable {C} {B : C} {objs : J → C} (arrows : ∀ j : J, objs j ⟶ B)
variable [HasWidePullback B objs arrows]
+#print CategoryTheory.Limits.WidePullback.π /-
/-- The `j`-th projection from the pullback. -/
noncomputable abbrev π (j : J) : widePullback _ _ arrows ⟶ objs j :=
limit.π (WidePullbackShape.wideCospan _ _ _) (Option.some j)
-#align category_theory.limits.wide_pullback.π CategoryTheory.Limits.widePullback.π
+#align category_theory.limits.wide_pullback.π CategoryTheory.Limits.WidePullback.π
+-/
+#print CategoryTheory.Limits.WidePullback.base /-
/-- The unique map to the base from the pullback. -/
noncomputable abbrev base : widePullback _ _ arrows ⟶ B :=
limit.π (WidePullbackShape.wideCospan _ _ _) Option.none
-#align category_theory.limits.wide_pullback.base CategoryTheory.Limits.widePullback.base
+#align category_theory.limits.wide_pullback.base CategoryTheory.Limits.WidePullback.base
+-/
+/- warning: category_theory.limits.wide_pullback.π_arrow -> CategoryTheory.Limits.WidePullback.π_arrow is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.WidePullback.π_arrowₓ'. -/
@[simp, reassoc.1]
theorem π_arrow (j : J) : π arrows j ≫ arrows _ = base arrows := by
apply limit.w (wide_pullback_shape.wide_cospan _ _ _) (wide_pullback_shape.hom.term j)
-#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.widePullback.π_arrow
+#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.WidePullback.π_arrow
variable {arrows}
+#print CategoryTheory.Limits.WidePullback.lift /-
/-- Lift a collection of morphisms to a morphism to the pullback. -/
noncomputable abbrev lift {X : C} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j)
(w : ∀ j, fs j ≫ arrows j = f) : X ⟶ widePullback _ _ arrows :=
limit.lift (WidePullbackShape.wideCospan _ _ _) (WidePullbackShape.mkCone f fs <| w)
-#align category_theory.limits.wide_pullback.lift CategoryTheory.Limits.widePullback.lift
+#align category_theory.limits.wide_pullback.lift CategoryTheory.Limits.WidePullback.lift
+-/
variable (arrows)
variable {X : C} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j) (w : ∀ j, fs j ≫ arrows j = f)
+/- warning: category_theory.limits.wide_pullback.lift_π -> CategoryTheory.Limits.WidePullback.lift_π is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) (objs j) (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) (objs j) (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_πₓ'. -/
@[simp, reassoc.1]
theorem lift_π (j : J) : lift f fs w ≫ π arrows j = fs _ :=
by
simp
rfl
-#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.widePullback.lift_π
-
+#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_π
+
+/- warning: category_theory.limits.wide_pullback.lift_base -> CategoryTheory.Limits.WidePullback.lift_base is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (fs j) (arrows j)) f), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) B (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2) B (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_baseₓ'. -/
@[simp, reassoc.1]
theorem lift_base : lift f fs w ≫ base arrows = f :=
by
simp
rfl
-#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.widePullback.lift_base
-
+#align category_theory.limits.wide_pullback.lift_base CategoryTheory.Limits.WidePullback.lift_base
+
+/- warning: category_theory.limits.wide_pullback.eq_lift_of_comp_eq -> CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w))
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (fs j) (arrows j)) f) (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fs j)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) f) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.eq_lift_of_comp_eq CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eqₓ'. -/
theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
(∀ j : J, g ≫ π arrows j = fs j) → g ≫ base arrows = f → g = lift f fs w :=
by
@@ -327,15 +437,27 @@ theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
rintro (_ | _)
· apply h2
· apply h1
-#align category_theory.limits.wide_pullback.eq_lift_of_comp_eq CategoryTheory.Limits.widePullback.eq_lift_of_comp_eq
-
+#align category_theory.limits.wide_pullback.eq_lift_of_comp_eq CategoryTheory.Limits.WidePullback.eq_lift_of_comp_eq
+
+/- warning: category_theory.limits.wide_pullback.hom_eq_lift -> CategoryTheory.Limits.WidePullback.hom_eq_lift is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fun (j : J) => id.{0} (forall {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (fun {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (j : J) => Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) True (id_tag Tactic.IdTag.simp (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) True) (Eq.trans.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2))) True ((fun (a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (a_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) a a_1) (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) ᾰ ᾰ_1) => congr.{succ u2, 1} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) a) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) a_1) ᾰ ᾰ_1 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) -> Prop) a a_1 (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B)) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (Eq.trans.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) (arrows j))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.Category.assoc.{u2, u3} C _inst_1 X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) B g (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) (arrows j)) ((fun (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) ᾰ ᾰ_1) (ᾰ_2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) (ᾰ_3 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) ᾰ_2 ᾰ_3) => congr.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B ᾰ) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B ᾰ_1) ᾰ_2 ᾰ_3 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) -> (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B)) ᾰ ᾰ_1 (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B) e_1) e_2) g g (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePullback.π_arrow.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)) (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2)))) (propext (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) True (eq_self_iff_true.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)))))) trivial) X g j))
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g (CategoryTheory.Limits.WidePullback.lift.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (fun (j : J) => of_eq_true (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (Eq.trans.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) True (congrFun.{succ u3, 1} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (fun (a._@.Init.Prelude._hyg.170 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) => Prop) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j))) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) -> Prop) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B)) (Eq.trans.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (objs j) B (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (arrows j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.Category.assoc.{u3, u1} C _inst_1 X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B g (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B) (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) B (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (arrows j)) (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g) (CategoryTheory.Limits.WidePullback.π_arrow.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) (eq_self.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_liftₓ'. -/
theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
g = lift (g ≫ base arrows) (fun j => g ≫ π arrows j) (by tidy) :=
by
apply eq_lift_of_comp_eq
tidy
-#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.widePullback.hom_eq_lift
-
+#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_lift
+
+/- warning: category_theory.limits.wide_pullback.hom_ext -> CategoryTheory.Limits.WidePullback.hom_ext is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (g2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g1 (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g2 (CategoryTheory.Limits.WidePullback.π.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g1 (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g2 (CategoryTheory.Limits.WidePullback.base.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g1 g2)
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) B) [_inst_2 : CategoryTheory.Limits.HasWidePullback.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (g2 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (objs j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g1 (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (objs j) g2 (CategoryTheory.Limits.WidePullback.π.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X B) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g1 (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) B g2 (CategoryTheory.Limits.WidePullback.base.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2))) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) X (CategoryTheory.Limits.widePullback.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) g1 g2)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback.hom_ext CategoryTheory.Limits.WidePullback.hom_extₓ'. -/
@[ext]
theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) :
(∀ j : J, g1 ≫ π arrows j = g2 ≫ π arrows j) → g1 ≫ base arrows = g2 ≫ base arrows → g1 = g2 :=
@@ -345,7 +467,7 @@ theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) :
rintro (_ | _)
· apply h2
· apply h1
-#align category_theory.limits.wide_pullback.hom_ext CategoryTheory.Limits.widePullback.hom_ext
+#align category_theory.limits.wide_pullback.hom_ext CategoryTheory.Limits.WidePullback.hom_ext
end WidePullback
@@ -355,47 +477,77 @@ variable {C} {B : C} {objs : J → C} (arrows : ∀ j : J, B ⟶ objs j)
variable [HasWidePushout B objs arrows]
+#print CategoryTheory.Limits.WidePushout.ι /-
/-- The `j`-th inclusion to the pushout. -/
noncomputable abbrev ι (j : J) : objs j ⟶ widePushout _ _ arrows :=
colimit.ι (WidePushoutShape.wideSpan _ _ _) (Option.some j)
-#align category_theory.limits.wide_pushout.ι CategoryTheory.Limits.widePushout.ι
+#align category_theory.limits.wide_pushout.ι CategoryTheory.Limits.WidePushout.ι
+-/
+#print CategoryTheory.Limits.WidePushout.head /-
/-- The unique map from the head to the pushout. -/
noncomputable abbrev head : B ⟶ widePushout B objs arrows :=
colimit.ι (WidePushoutShape.wideSpan _ _ _) Option.none
-#align category_theory.limits.wide_pushout.head CategoryTheory.Limits.widePushout.head
+#align category_theory.limits.wide_pushout.head CategoryTheory.Limits.WidePushout.head
+-/
+/- warning: category_theory.limits.wide_pushout.arrow_ι -> CategoryTheory.Limits.WidePushout.arrow_ι is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.WidePushout.arrow_ιₓ'. -/
@[simp, reassoc.1]
theorem arrow_ι (j : J) : arrows j ≫ ι arrows j = head arrows := by
apply colimit.w (wide_pushout_shape.wide_span _ _ _) (wide_pushout_shape.hom.init j)
-#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.widePushout.arrow_ι
+#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.WidePushout.arrow_ι
variable {arrows}
+#print CategoryTheory.Limits.WidePushout.desc /-
/-- Descend a collection of morphisms to a morphism from the pushout. -/
noncomputable abbrev desc {X : C} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X)
(w : ∀ j, arrows j ≫ fs j = f) : widePushout _ _ arrows ⟶ X :=
colimit.desc (WidePushoutShape.wideSpan B objs arrows) (WidePushoutShape.mkCocone f fs <| w)
-#align category_theory.limits.wide_pushout.desc CategoryTheory.Limits.widePushout.desc
+#align category_theory.limits.wide_pushout.desc CategoryTheory.Limits.WidePushout.desc
+-/
variable (arrows)
variable {X : C} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X) (w : ∀ j, arrows j ≫ fs j = f)
+/- warning: category_theory.limits.wide_pushout.ι_desc -> CategoryTheory.Limits.WidePushout.ι_desc is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) (fs j)
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) (fs j)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_descₓ'. -/
@[simp, reassoc.1]
theorem ι_desc (j : J) : ι arrows j ≫ desc f fs w = fs _ :=
by
simp
rfl
-#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.widePushout.ι_desc
-
+#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_desc
+
+/- warning: category_theory.limits.wide_pushout.head_desc -> CategoryTheory.Limits.WidePushout.head_desc is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (fs j)) f), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) f
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w)) f
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_descₓ'. -/
@[simp, reassoc.1]
theorem head_desc : head arrows ≫ desc f fs w = f :=
by
simp
rfl
-#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.widePushout.head_desc
-
+#align category_theory.limits.wide_pushout.head_desc CategoryTheory.Limits.WidePushout.head_desc
+
+/- warning: category_theory.limits.wide_pushout.eq_desc_of_comp_eq -> CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fs j)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) f) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X f fs w))
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (f : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fs : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (w : forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (fs j)) f) (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fs j)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) f) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) (fun (j : J) => arrows j) _inst_2 X f fs w))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.eq_desc_of_comp_eq CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eqₓ'. -/
theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
(∀ j : J, ι arrows j ≫ g = fs j) → head arrows ≫ g = f → g = desc f fs w :=
by
@@ -406,8 +558,14 @@ theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
rintro (_ | _)
· apply h2
· apply h1
-#align category_theory.limits.wide_pushout.eq_desc_of_comp_eq CategoryTheory.Limits.widePushout.eq_desc_of_comp_eq
-
+#align category_theory.limits.wide_pushout.eq_desc_of_comp_eq CategoryTheory.Limits.WidePushout.eq_desc_of_comp_eq
+
+/- warning: category_theory.limits.wide_pushout.hom_eq_desc -> CategoryTheory.Limits.WidePushout.hom_eq_desc is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g) (fun (j : J) => Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (id_tag Tactic.IdTag.rw (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.ndrec.{0, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (fun (_a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) => Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) _a (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (rfl.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (Eq.symm.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)) (CategoryTheory.Category.assoc.{u2, u3} C _inst_1 B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g)))) (Eq.mpr.{0} (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (id_tag Tactic.IdTag.simp (Eq.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True) (Eq.trans.{1} Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True ((fun (a : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (a_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a a_1) (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) ᾰ ᾰ_1) => congr.{succ u2, 1} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) Prop (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a) (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) a_1) ᾰ ᾰ_1 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) -> Prop) a a_1 (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X)) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) ((fun (ᾰ : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (ᾰ_1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (e_1 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ᾰ ᾰ_1) (ᾰ_2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (ᾰ_3 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (e_2 : Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) ᾰ_2 ᾰ_3) => congr.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X ᾰ) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X ᾰ_1) ᾰ_2 ᾰ_3 (congr_arg.{succ u2, succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ((Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) -> (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X)) ᾰ ᾰ_1 (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) e_1) e_2) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.Limits.WidePushout.arrow_ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g g (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g)) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (rfl.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (propext (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (eq_self_iff_true.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))))) trivial)))
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g (CategoryTheory.Limits.WidePushout.desc.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) (fun (j : J) => Eq.mpr.{0} (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (id.{0} (Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.ndrec.{0, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (fun (_a : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Eq.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) _a (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (Eq.refl.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) ((fun (j : J) => CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g) j)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (Eq.symm.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) X (arrows j) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)) (CategoryTheory.Category.assoc.{u3, u1} C _inst_1 B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g)))) (of_eq_true (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.trans.{1} Prop (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) True (congrFun.{succ u3, 1} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (fun (a._@.Init.Prelude._hyg.170 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) => Prop) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) -> Prop) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g) (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (congrFun.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (fun (a._@.Mathlib.CategoryTheory.Category.Basic._hyg.115 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) => Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j))) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) (congrArg.{succ u3, succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2)) ((Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) -> (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (arrows j) (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (CategoryTheory.Limits.WidePushout.arrow_ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j)) g)) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g)) (eq_self.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_descₓ'. -/
theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
g =
desc (head arrows ≫ g) (fun j => ι arrows j ≫ g) fun j =>
@@ -417,8 +575,14 @@ theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
by
apply eq_desc_of_comp_eq
tidy
-#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.widePushout.hom_eq_desc
-
+#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_desc
+
+/- warning: category_theory.limits.wide_pushout.hom_ext -> CategoryTheory.Limits.WidePushout.hom_ext is a dubious translation:
+lean 3 declaration is
+ forall {J : Type.{u1}} {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u1, u2, u3} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (g2 : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g1) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u1, u2, u3} J C _inst_1 B objs arrows _inst_2 j) g2)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g1) (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) B (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g2)) -> (Eq.{succ u2} (Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) (CategoryTheory.Limits.widePushout.{u1, u2, u3} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g1 g2)
+but is expected to have type
+ forall {J : Type.{u2}} {C : Type.{u1}} [_inst_1 : CategoryTheory.Category.{u3, u1} C] {B : C} {objs : J -> C} (arrows : forall (j : J), Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B (objs j)) [_inst_2 : CategoryTheory.Limits.HasWidePushout.{u2, u3, u1} J C _inst_1 B objs arrows] {X : C} (g1 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) (g2 : Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X), (forall (j : J), Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (objs j) X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g1) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) (objs j) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.ι.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2 j) g2)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) B X) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g1) (CategoryTheory.CategoryStruct.comp.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1) B (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X (CategoryTheory.Limits.WidePushout.head.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) g2)) -> (Eq.{succ u3} (Quiver.Hom.{succ u3, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u1} C (CategoryTheory.Category.toCategoryStruct.{u3, u1} C _inst_1)) (CategoryTheory.Limits.widePushout.{u2, u3, u1} J C _inst_1 B (fun (j : J) => objs j) arrows _inst_2) X) g1 g2)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout.hom_ext CategoryTheory.Limits.WidePushout.hom_extₓ'. -/
@[ext]
theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) :
(∀ j : J, ι arrows j ≫ g1 = ι arrows j ≫ g2) → head arrows ≫ g1 = head arrows ≫ g2 → g1 = g2 :=
@@ -428,12 +592,13 @@ theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) :
rintro (_ | _)
· apply h2
· apply h1
-#align category_theory.limits.wide_pushout.hom_ext CategoryTheory.Limits.widePushout.hom_ext
+#align category_theory.limits.wide_pushout.hom_ext CategoryTheory.Limits.WidePushout.hom_ext
end WidePushout
variable (J)
+#print CategoryTheory.Limits.widePullbackShapeOpMap /-
/-- The action on morphisms of the obvious functor
`wide_pullback_shape_op : wide_pullback_shape J ⥤ (wide_pushout_shape J)ᵒᵖ`-/
def widePullbackShapeOpMap :
@@ -442,7 +607,9 @@ def widePullbackShapeOpMap :
| _, _, wide_pullback_shape.hom.id X => Quiver.Hom.op (WidePushoutShape.Hom.id _)
| _, _, wide_pullback_shape.hom.term j => Quiver.Hom.op (WidePushoutShape.Hom.init _)
#align category_theory.limits.wide_pullback_shape_op_map CategoryTheory.Limits.widePullbackShapeOpMap
+-/
+#print CategoryTheory.Limits.widePullbackShapeOp /-
/-- The obvious functor `wide_pullback_shape J ⥤ (wide_pushout_shape J)ᵒᵖ` -/
@[simps]
def widePullbackShapeOp : WidePullbackShape J ⥤ (WidePushoutShape J)ᵒᵖ
@@ -450,7 +617,9 @@ def widePullbackShapeOp : WidePullbackShape J ⥤ (WidePushoutShape J)ᵒᵖ
obj X := op X
map := widePullbackShapeOpMap J
#align category_theory.limits.wide_pullback_shape_op CategoryTheory.Limits.widePullbackShapeOp
+-/
+#print CategoryTheory.Limits.widePushoutShapeOpMap /-
/-- The action on morphisms of the obvious functor
`wide_pushout_shape_op : `wide_pushout_shape J ⥤ (wide_pullback_shape J)ᵒᵖ` -/
def widePushoutShapeOpMap :
@@ -459,7 +628,9 @@ def widePushoutShapeOpMap :
| _, _, wide_pushout_shape.hom.id X => Quiver.Hom.op (WidePullbackShape.Hom.id _)
| _, _, wide_pushout_shape.hom.init j => Quiver.Hom.op (WidePullbackShape.Hom.term _)
#align category_theory.limits.wide_pushout_shape_op_map CategoryTheory.Limits.widePushoutShapeOpMap
+-/
+#print CategoryTheory.Limits.widePushoutShapeOp /-
/-- The obvious functor `wide_pushout_shape J ⥤ (wide_pullback_shape J)ᵒᵖ` -/
@[simps]
def widePushoutShapeOp : WidePushoutShape J ⥤ (WidePullbackShape J)ᵒᵖ
@@ -467,43 +638,62 @@ def widePushoutShapeOp : WidePushoutShape J ⥤ (WidePullbackShape J)ᵒᵖ
obj X := op X
map := widePushoutShapeOpMap J
#align category_theory.limits.wide_pushout_shape_op CategoryTheory.Limits.widePushoutShapeOp
+-/
+#print CategoryTheory.Limits.widePullbackShapeUnop /-
/-- The obvious functor `(wide_pullback_shape J)ᵒᵖ ⥤ wide_pushout_shape J`-/
@[simps]
def widePullbackShapeUnop : (WidePullbackShape J)ᵒᵖ ⥤ WidePushoutShape J :=
(widePullbackShapeOp J).leftOp
#align category_theory.limits.wide_pullback_shape_unop CategoryTheory.Limits.widePullbackShapeUnop
+-/
+#print CategoryTheory.Limits.widePushoutShapeUnop /-
/-- The obvious functor `(wide_pushout_shape J)ᵒᵖ ⥤ wide_pullback_shape J` -/
@[simps]
def widePushoutShapeUnop : (WidePushoutShape J)ᵒᵖ ⥤ WidePullbackShape J :=
(widePushoutShapeOp J).leftOp
#align category_theory.limits.wide_pushout_shape_unop CategoryTheory.Limits.widePushoutShapeUnop
+-/
+#print CategoryTheory.Limits.widePushoutShapeOpUnop /-
/-- The inverse of the unit isomorphism of the equivalence
`wide_pushout_shape_op_equiv : (wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J` -/
def widePushoutShapeOpUnop : widePushoutShapeUnop J ⋙ widePullbackShapeOp J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun X Y f => by decide
#align category_theory.limits.wide_pushout_shape_op_unop CategoryTheory.Limits.widePushoutShapeOpUnop
+-/
+#print CategoryTheory.Limits.widePushoutShapeUnopOp /-
/-- The counit isomorphism of the equivalence
`wide_pullback_shape_op_equiv : (wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J` -/
def widePushoutShapeUnopOp : widePushoutShapeOp J ⋙ widePullbackShapeUnop J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun X Y f => by decide
#align category_theory.limits.wide_pushout_shape_unop_op CategoryTheory.Limits.widePushoutShapeUnopOp
+-/
+#print CategoryTheory.Limits.widePullbackShapeOpUnop /-
/-- The inverse of the unit isomorphism of the equivalence
`wide_pullback_shape_op_equiv : (wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J` -/
def widePullbackShapeOpUnop : widePullbackShapeUnop J ⋙ widePushoutShapeOp J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun X Y f => by decide
#align category_theory.limits.wide_pullback_shape_op_unop CategoryTheory.Limits.widePullbackShapeOpUnop
+-/
+#print CategoryTheory.Limits.widePullbackShapeUnopOp /-
/-- The counit isomorphism of the equivalence
`wide_pushout_shape_op_equiv : (wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J` -/
def widePullbackShapeUnopOp : widePullbackShapeOp J ⋙ widePushoutShapeUnop J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun X Y f => by decide
#align category_theory.limits.wide_pullback_shape_unop_op CategoryTheory.Limits.widePullbackShapeUnopOp
+-/
+/- warning: category_theory.limits.wide_pushout_shape_op_equiv -> CategoryTheory.Limits.widePushoutShapeOpEquiv is a dubious translation:
+lean 3 declaration is
+ forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J)) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)) (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)
+but is expected to have type
+ forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J)) (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pushout_shape_op_equiv CategoryTheory.Limits.widePushoutShapeOpEquivₓ'. -/
/-- The duality equivalence `(wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J` -/
@[simps]
def widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J
@@ -514,6 +704,12 @@ def widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J
counitIso := widePullbackShapeUnopOp J
#align category_theory.limits.wide_pushout_shape_op_equiv CategoryTheory.Limits.widePushoutShapeOpEquiv
+/- warning: category_theory.limits.wide_pullback_shape_op_equiv -> CategoryTheory.Limits.widePullbackShapeOpEquiv is a dubious translation:
+lean 3 declaration is
+ forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)) (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)
+but is expected to have type
+ forall (J : Type.{u1}), CategoryTheory.Equivalence.{u1, u1, u1, u1} (Opposite.{succ u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J)) (CategoryTheory.Limits.WidePushoutShape.{u1} J) (CategoryTheory.Category.opposite.{u1, u1} (CategoryTheory.Limits.WidePullbackShape.{u1} J) (CategoryTheory.Limits.WidePullbackShape.category.{u1} J)) (CategoryTheory.Limits.WidePushoutShape.category.{u1} J)
+Case conversion may be inaccurate. Consider using '#align category_theory.limits.wide_pullback_shape_op_equiv CategoryTheory.Limits.widePullbackShapeOpEquivₓ'. -/
/-- The duality equivalence `(wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J` -/
@[simps]
def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J
@@ -524,11 +720,13 @@ def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape
counitIso := widePushoutShapeUnopOp J
#align category_theory.limits.wide_pullback_shape_op_equiv CategoryTheory.Limits.widePullbackShapeOpEquiv
+#print CategoryTheory.Limits.hasWidePullbacks_shrink /-
/-- If a category has wide pullbacks on a higher universe level it also has wide pullbacks
on a lower universe level. -/
theorem hasWidePullbacks_shrink [HasWidePullbacks.{max w w'} C] : HasWidePullbacks.{w} C := fun J =>
hasLimitsOfShapeOfEquivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
#align category_theory.limits.has_wide_pullbacks_shrink CategoryTheory.Limits.hasWidePullbacks_shrink
+-/
end CategoryTheory.Limits
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -120,7 +120,7 @@ def diagramIsoWideCospan (F : WidePullbackShape J ⥤ C) :
@[simps]
def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π : ∀ j, X ⟶ F.obj (some j))
(w : ∀ j, π j ≫ F.map (Hom.term j) = f) : Cone F :=
- { x
+ { pt
π :=
{ app := fun j =>
match j with
@@ -220,7 +220,7 @@ def diagramIsoWideSpan (F : WidePushoutShape J ⥤ C) :
@[simps]
def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι : ∀ j, F.obj (some j) ⟶ X)
(w : ∀ j, F.map (Hom.init j) ≫ ι j = f) : Cocone F :=
- { x
+ { pt
ι :=
{ app := fun j =>
match j with
@@ -527,7 +527,7 @@ def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape
/-- If a category has wide pullbacks on a higher universe level it also has wide pullbacks
on a lower universe level. -/
theorem hasWidePullbacks_shrink [HasWidePullbacks.{max w w'} C] : HasWidePullbacks.{w} C := fun J =>
- hasLimitsOfShape_of_equivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
+ hasLimitsOfShapeOfEquivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
#align category_theory.limits.has_wide_pullbacks_shrink CategoryTheory.Limits.hasWidePullbacks_shrink
end CategoryTheory.Limits
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -527,7 +527,7 @@ def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape
/-- If a category has wide pullbacks on a higher universe level it also has wide pullbacks
on a lower universe level. -/
theorem hasWidePullbacks_shrink [HasWidePullbacks.{max w w'} C] : HasWidePullbacks.{w} C := fun J =>
- hasLimitsOfShapeOfEquivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
+ hasLimitsOfShape_of_equivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
#align category_theory.limits.has_wide_pullbacks_shrink CategoryTheory.Limits.hasWidePullbacks_shrink
end CategoryTheory.Limits
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -69,7 +69,7 @@ instance struct : CategoryStruct (WidePullbackShape J) where
id j := Hom.id j
comp f g := by
cases f
- exact g
+ · exact g
cases g
apply Hom.term _
#align category_theory.limits.wide_pullback_shape.struct CategoryTheory.Limits.WidePullbackShape.struct
@@ -93,7 +93,9 @@ instance subsingleton_hom : Quiver.IsThin (WidePullbackShape J) := fun _ _ => by
constructor
intro a b
casesm* WidePullbackShape _, (_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _)
- rfl; rfl; rfl
+ · rfl
+ · rfl
+ · rfl
#align category_theory.limits.wide_pullback_shape.subsingleton_hom CategoryTheory.Limits.WidePullbackShape.subsingleton_hom
instance category : SmallCategory (WidePullbackShape J) :=
@@ -186,7 +188,7 @@ instance struct : CategoryStruct (WidePushoutShape J) where
id j := Hom.id j
comp f g := by
cases f
- exact g
+ · exact g
cases g
apply Hom.init _
#align category_theory.limits.wide_pushout_shape.struct CategoryTheory.Limits.WidePushoutShape.struct
@@ -378,8 +380,8 @@ theorem eq_lift_of_comp_eq (g : X ⟶ widePullback _ _ arrows) :
theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
g = lift (g ≫ base arrows) (fun j => g ≫ π arrows j) (by aesop_cat) := by
apply eq_lift_of_comp_eq
- aesop_cat
- rfl -- Porting note: quite a few missing refl's in aesop_cat now
+ · aesop_cat
+ · rfl -- Porting note: quite a few missing refl's in aesop_cat now
#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_lift
@[ext 1100]
@@ -457,8 +459,8 @@ theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
rw [← Category.assoc]
simp := by
apply eq_desc_of_comp_eq
- aesop_cat
- rfl -- Porting note: another missing rfl
+ · aesop_cat
+ · rfl -- Porting note: another missing rfl
#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_desc
@[ext 1100]
@@ -241,7 +241,7 @@ def wideSpan (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : WideP
cases f
· simp only [Eq.ndrec, hom_id, eq_rec_constant, Category.id_comp]; congr
· cases g
- · simp only [Eq.ndrec, hom_id, eq_rec_constant, Category.comp_id]; congr
+ simp only [Eq.ndrec, hom_id, eq_rec_constant, Category.comp_id]; congr
#align category_theory.limits.wide_pushout_shape.wide_span CategoryTheory.Limits.WidePushoutShape.wideSpan
/-- Every diagram is naturally isomorphic (actually, equal) to a `wideSpan` -/
@@ -26,9 +26,6 @@ Typeclasses `HasWidePullbacks` and `HasFiniteWidePullbacks` assert the existence
pullbacks and finite wide pullbacks.
-/
-set_option autoImplicit true
-
-
universe w w' v u
open CategoryTheory CategoryTheory.Limits Opposite
@@ -323,11 +320,9 @@ noncomputable abbrev widePushout (B : C) (objs : J → C) (arrows : ∀ j : J, B
colimit (WidePushoutShape.wideSpan B objs arrows)
#align category_theory.limits.wide_pushout CategoryTheory.Limits.widePushout
--- variable (C) -- Porting note: Lean had problems with which `C` below. Changed to `D`
-
namespace WidePullback
-variable {D} [Category.{v₂} D] {B : D} {objs : J → D} (arrows : ∀ j : J, objs j ⟶ B)
+variable {C : Type u} [Category.{v} C] {B : C} {objs : J → C} (arrows : ∀ j : J, objs j ⟶ B)
variable [HasWidePullback B objs arrows]
/-- The `j`-th projection from the pullback. -/
@@ -349,13 +344,13 @@ theorem π_arrow (j : J) : π arrows j ≫ arrows _ = base arrows := by
variable {arrows}
/-- Lift a collection of morphisms to a morphism to the pullback. -/
-noncomputable abbrev lift {X : D} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j)
+noncomputable abbrev lift {X : C} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j)
(w : ∀ j, fs j ≫ arrows j = f) : X ⟶ widePullback _ _ arrows :=
limit.lift (WidePullbackShape.wideCospan _ _ _) (WidePullbackShape.mkCone f fs <| w)
#align category_theory.limits.wide_pullback.lift CategoryTheory.Limits.WidePullback.lift
variable (arrows)
-variable {X : D} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j) (w : ∀ j, fs j ≫ arrows j = f)
+variable {X : C} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j) (w : ∀ j, fs j ≫ arrows j = f)
-- Porting note (#10618): simp can prove this so removed simp attribute
@[reassoc]
@@ -401,7 +396,7 @@ end WidePullback
namespace WidePushout
-variable {D} [Category.{v₂} D] {B : D} {objs : J → D} (arrows : ∀ j : J, B ⟶ objs j)
+variable {C : Type u} [Category.{v} C] {B : C} {objs : J → C} (arrows : ∀ j : J, B ⟶ objs j)
variable [HasWidePushout B objs arrows]
/-- The `j`-th inclusion to the pushout. -/
@@ -425,13 +420,13 @@ attribute [nolint simpNF] WidePushout.arrow_ι WidePushout.arrow_ι_assoc
variable {arrows}
/-- Descend a collection of morphisms to a morphism from the pushout. -/
-noncomputable abbrev desc {X : D} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X)
+noncomputable abbrev desc {X : C} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X)
(w : ∀ j, arrows j ≫ fs j = f) : widePushout _ _ arrows ⟶ X :=
colimit.desc (WidePushoutShape.wideSpan B objs arrows) (WidePushoutShape.mkCocone f fs <| w)
#align category_theory.limits.wide_pushout.desc CategoryTheory.Limits.WidePushout.desc
variable (arrows)
-variable {X : D} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X) (w : ∀ j, arrows j ≫ fs j = f)
+variable {X : C} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X) (w : ∀ j, arrows j ≫ fs j = f)
-- Porting note (#10618): simp can prove this so removed simp attribute
@[reassoc]
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)
@@ -328,7 +328,6 @@ noncomputable abbrev widePushout (B : C) (objs : J → C) (arrows : ∀ j : J, B
namespace WidePullback
variable {D} [Category.{v₂} D] {B : D} {objs : J → D} (arrows : ∀ j : J, objs j ⟶ B)
-
variable [HasWidePullback B objs arrows]
/-- The `j`-th projection from the pullback. -/
@@ -356,7 +355,6 @@ noncomputable abbrev lift {X : D} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j)
#align category_theory.limits.wide_pullback.lift CategoryTheory.Limits.WidePullback.lift
variable (arrows)
-
variable {X : D} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j) (w : ∀ j, fs j ≫ arrows j = f)
-- Porting note (#10618): simp can prove this so removed simp attribute
@@ -404,7 +402,6 @@ end WidePullback
namespace WidePushout
variable {D} [Category.{v₂} D] {B : D} {objs : J → D} (arrows : ∀ j : J, B ⟶ objs j)
-
variable [HasWidePushout B objs arrows]
/-- The `j`-th inclusion to the pushout. -/
@@ -434,7 +431,6 @@ noncomputable abbrev desc {X : D} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X)
#align category_theory.limits.wide_pushout.desc CategoryTheory.Limits.WidePushout.desc
variable (arrows)
-
variable {X : D} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X) (w : ∀ j, arrows j ≫ fs j = f)
-- Porting note (#10618): simp can prove this so removed simp attribute
@@ -144,7 +144,7 @@ def mkCone {F : WidePullbackShape J ⥤ C} {X : C} (f : X ⟶ F.obj none) (π :
| none => f
| some j => π j
naturality := fun j j' f => by
- cases j <;> cases j' <;> cases f <;> refine id _ <;> dsimp <;> simp [w] } }
+ cases j <;> cases j' <;> cases f <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pullback_shape.mk_cone CategoryTheory.Limits.WidePullbackShape.mkCone
/-- Wide pullback diagrams of equivalent index types are equivalent. -/
@@ -264,7 +264,7 @@ def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι :
| none => f
| some j => ι j
naturality := fun j j' f => by
- cases j <;> cases j' <;> cases f <;> refine id _ <;> dsimp <;> simp [w] } }
+ cases j <;> cases j' <;> cases f <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pushout_shape.mk_cocone CategoryTheory.Limits.WidePushoutShape.mkCocone
/-- Wide pushout diagrams of equivalent index types are equivalent. -/
@@ -90,7 +90,7 @@ def evalCasesBash : TacticM Unit := do
(← `(tactic| casesm* WidePullbackShape _,
(_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _) ))
-attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash
+attribute [local aesop safe tactic (rule_sets := [CategoryTheory])] evalCasesBash
instance subsingleton_hom : Quiver.IsThin (WidePullbackShape J) := fun _ _ => by
constructor
@@ -206,7 +206,7 @@ def evalCasesBash' : TacticM Unit := do
(← `(tactic| casesm* WidePushoutShape _,
(_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _) ))
-attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash'
+attribute [local aesop safe tactic (rule_sets := [CategoryTheory])] evalCasesBash'
instance subsingleton_hom : Quiver.IsThin (WidePushoutShape J) := fun _ _ => by
constructor
@@ -359,13 +359,13 @@ variable (arrows)
variable {X : D} (f : X ⟶ B) (fs : ∀ j : J, X ⟶ objs j) (w : ∀ j, fs j ≫ arrows j = f)
--- Porting note: simp can prove this so removed simp attribute
+-- Porting note (#10618): simp can prove this so removed simp attribute
@[reassoc]
theorem lift_π (j : J) : lift f fs w ≫ π arrows j = fs _ := by
simp only [limit.lift_π, WidePullbackShape.mkCone_pt, WidePullbackShape.mkCone_π_app]
#align category_theory.limits.wide_pullback.lift_π CategoryTheory.Limits.WidePullback.lift_π
--- Porting note: simp can prove this so removed simp attribute
+-- Porting note (#10618): simp can prove this so removed simp attribute
@[reassoc]
theorem lift_base : lift f fs w ≫ base arrows = f := by
simp only [limit.lift_π, WidePullbackShape.mkCone_pt, WidePullbackShape.mkCone_π_app]
@@ -437,13 +437,13 @@ variable (arrows)
variable {X : D} (f : B ⟶ X) (fs : ∀ j : J, objs j ⟶ X) (w : ∀ j, arrows j ≫ fs j = f)
--- Porting note: simp can prove this so removed simp attribute
+-- Porting note (#10618): simp can prove this so removed simp attribute
@[reassoc]
theorem ι_desc (j : J) : ι arrows j ≫ desc f fs w = fs _ := by
simp only [colimit.ι_desc, WidePushoutShape.mkCocone_pt, WidePushoutShape.mkCocone_ι_app]
#align category_theory.limits.wide_pushout.ι_desc CategoryTheory.Limits.WidePushout.ι_desc
--- Porting note: simp can prove this so removed simp attribute
+-- Porting note (#10618): simp can prove this so removed simp attribute
@[reassoc]
theorem head_desc : head arrows ≫ desc f fs w = f := by
simp only [colimit.ι_desc, WidePushoutShape.mkCocone_pt, WidePushoutShape.mkCocone_ι_app]
aesop_cat_nonterminal
is a non-terminal variant of aesop
. It's not supposed to be used in production code since it's even worse than non-terminal simp
. However, there were a few occurrences left (presumably from the port), which this PR removes.
The only nontrivial change is that I add mathlib's rfl
tactic to the CategoryTheory
Aesop rule set.
@@ -153,11 +153,11 @@ def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ W
functor := wideCospan none (fun j => some (h j)) fun j => Hom.term (h j)
inverse := wideCospan none (fun j => some (h.invFun j)) fun j => Hom.term (h.invFun j)
unitIso :=
- NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
- simp only [eq_iff_true_of_subsingleton]
+ NatIso.ofComponents (fun j => by aesop_cat) fun f =>
+ by simp only [eq_iff_true_of_subsingleton]
counitIso :=
- NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
- simp only [eq_iff_true_of_subsingleton]
+ NatIso.ofComponents (fun j => by aesop_cat)
+ fun f => by simp only [eq_iff_true_of_subsingleton]
#align category_theory.limits.wide_pullback_shape.equivalence_of_equiv CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv
/-- Lifting universe and morphism levels preserves wide pullback diagrams. -/
@@ -273,10 +273,10 @@ def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePushoutShape J ≌ Wi
functor := wideSpan none (fun j => some (h j)) fun j => Hom.init (h j)
inverse := wideSpan none (fun j => some (h.invFun j)) fun j => Hom.init (h.invFun j)
unitIso :=
- NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
+ NatIso.ofComponents (fun j => by aesop_cat) fun f => by
simp only [eq_iff_true_of_subsingleton]
counitIso :=
- NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
+ NatIso.ofComponents (fun j => by aesop_cat) fun f => by
simp only [eq_iff_true_of_subsingleton]
/-- Lifting universe and morphism levels preserves wide pushout diagrams. -/
Autoimplicits are highly controversial and also defeat the performance-improving work in #6474.
The intent of this PR is to make autoImplicit
opt-in on a per-file basis, by disabling it in the lakefile and enabling it again with set_option autoImplicit true
in the few files that rely on it.
That also keeps this PR small, as opposed to attempting to "fix" files to not need it any more.
I claim that many of the uses of autoImplicit
in these files are accidental; situations such as:
variables
are in scope, but pasting the lemma in the wrong sectionHaving set_option autoImplicit false
as the default prevents these types of mistake being made in the 90% of files where autoImplicit
s are not used at all, and causes them to be caught by CI during review.
I think there were various points during the port where we encouraged porters to delete the universes u v
lines; I think having autoparams for universe variables only would cover a lot of the cases we actually use them, while avoiding any real shortcomings.
A Zulip poll (after combining overlapping votes accordingly) was in favor of this change with 5:5:18
as the no:dontcare:yes
vote ratio.
While this PR was being reviewed, a handful of files gained some more likely-accidental autoImplicits. In these places, set_option autoImplicit true
has been placed locally within a section, rather than at the top of the file.
@@ -26,6 +26,8 @@ Typeclasses `HasWidePullbacks` and `HasFiniteWidePullbacks` assert the existence
pullbacks and finite wide pullbacks.
-/
+set_option autoImplicit true
+
universe w w' v u
Per https://github.com/leanprover/lean4/issues/2343, we are going to need to change the automatic generation of instance names, as they become too long.
This PR ensures that everywhere in Mathlib that refers to an instance by name, that name is given explicitly, rather than being automatically generated.
There are four exceptions, which are now commented, with links to https://github.com/leanprover/lean4/issues/2343.
This was implemented by running Mathlib against a modified Lean that appended _ᾰ
to all automatically generated names, and fixing everything.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -61,6 +61,8 @@ inductive Hom : WidePullbackShape J → WidePullbackShape J → Type w
deriving DecidableEq
#align category_theory.limits.wide_pullback_shape.hom CategoryTheory.Limits.WidePullbackShape.Hom
+-- This is relying on an automatically generated instance name, generated in a `deriving` handler.
+-- See https://github.com/leanprover/lean4/issues/2343
attribute [nolint unusedArguments] instDecidableEqHom
instance struct : CategoryStruct (WidePullbackShape J) where
@@ -176,6 +178,8 @@ inductive Hom : WidePushoutShape J → WidePushoutShape J → Type w
deriving DecidableEq
#align category_theory.limits.wide_pushout_shape.hom CategoryTheory.Limits.WidePushoutShape.Hom
+-- This is relying on an automatically generated instance name, generated in a `deriving` handler.
+-- See https://github.com/leanprover/lean4/issues/2343
attribute [nolint unusedArguments] instDecidableEqHom
instance struct : CategoryStruct (WidePushoutShape J) where
@@ -2,15 +2,12 @@
Copyright (c) 2020 Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta, Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.limits.shapes.wide_pullbacks
-! leanprover-community/mathlib commit f187f1074fa1857c94589cc653c786cadc4c35ff
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Limits.HasLimits
import Mathlib.CategoryTheory.Thin
+#align_import category_theory.limits.shapes.wide_pullbacks from "leanprover-community/mathlib"@"f187f1074fa1857c94589cc653c786cadc4c35ff"
+
/-!
# Wide pullbacks
@@ -87,14 +87,14 @@ aesop rule directing on `WidePushoutOut` and it didn't take for some reason -/
def evalCasesBash : TacticM Unit := do
evalTactic
(← `(tactic| casesm* WidePullbackShape _,
- (_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _) ))
+ (_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _) ))
attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash
instance subsingleton_hom : Quiver.IsThin (WidePullbackShape J) := fun _ _ => by
constructor
intro a b
- casesm* WidePullbackShape _, (_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _)
+ casesm* WidePullbackShape _, (_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _)
rfl; rfl; rfl
#align category_theory.limits.wide_pullback_shape.subsingleton_hom CategoryTheory.Limits.WidePullbackShape.subsingleton_hom
@@ -201,14 +201,14 @@ open Lean Elab Tactic
def evalCasesBash' : TacticM Unit := do
evalTactic
(← `(tactic| casesm* WidePushoutShape _,
- (_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _) ))
+ (_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _) ))
attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash'
instance subsingleton_hom : Quiver.IsThin (WidePushoutShape J) := fun _ _ => by
constructor
intro a b
- casesm* WidePushoutShape _, (_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _)
+ casesm* WidePushoutShape _, (_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _)
repeat rfl
#align category_theory.limits.wide_pushout_shape.subsingleton_hom CategoryTheory.Limits.WidePushoutShape.subsingleton_hom
@@ -261,7 +261,7 @@ def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι :
| none => f
| some j => ι j
naturality := fun j j' f => by
- cases j <;> cases j' <;> cases f <;> refine id _ <;> dsimp <;> simp [w] } }
+ cases j <;> cases j' <;> cases f <;> refine id _ <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pushout_shape.mk_cocone CategoryTheory.Limits.WidePushoutShape.mkCocone
/-- Wide pushout diagrams of equivalent index types are equivalent. -/
@@ -264,6 +264,24 @@ def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι :
cases j <;> cases j' <;> cases f <;> refine id _ <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pushout_shape.mk_cocone CategoryTheory.Limits.WidePushoutShape.mkCocone
+/-- Wide pushout diagrams of equivalent index types are equivalent. -/
+def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePushoutShape J ≌ WidePushoutShape J'
+ where
+ functor := wideSpan none (fun j => some (h j)) fun j => Hom.init (h j)
+ inverse := wideSpan none (fun j => some (h.invFun j)) fun j => Hom.init (h.invFun j)
+ unitIso :=
+ NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
+ simp only [eq_iff_true_of_subsingleton]
+ counitIso :=
+ NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
+ simp only [eq_iff_true_of_subsingleton]
+
+/-- Lifting universe and morphism levels preserves wide pushout diagrams. -/
+def uliftEquivalence :
+ ULiftHom.{w'} (ULift.{w'} (WidePushoutShape J)) ≌ WidePushoutShape (ULift J) :=
+ (ULiftHomULiftCategory.equiv.{w', w', w, w} (WidePushoutShape J)).symm.trans
+ (equivalenceOfEquiv _ (Equiv.ulift.{w', w}.symm : J ≃ ULift.{w'} J))
+
end WidePushoutShape
variable (C : Type u) [Category.{v} C]
@@ -549,6 +567,11 @@ def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape
counitIso := widePushoutShapeUnopOp J
#align category_theory.limits.wide_pullback_shape_op_equiv CategoryTheory.Limits.widePullbackShapeOpEquiv
+/-- If a category has wide pushouts on a higher universe level it also has wide pushouts
+on a lower universe level. -/
+theorem hasWidePushouts_shrink [HasWidePushouts.{max w w'} C] : HasWidePushouts.{w} C := fun _ =>
+ hasColimitsOfShape_of_equivalence (WidePushoutShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
+
/-- If a category has wide pullbacks on a higher universe level it also has wide pullbacks
on a lower universe level. -/
theorem hasWidePullbacks_shrink [HasWidePullbacks.{max w w'} C] : HasWidePullbacks.{w} C := fun _ =>
@@ -129,7 +129,7 @@ def wideCospan (B : C) (objs : J → C) (arrows : ∀ j : J, objs j ⟶ B) : Wid
/-- Every diagram is naturally isomorphic (actually, equal) to a `wideCospan` -/
def diagramIsoWideCospan (F : WidePullbackShape J ⥤ C) :
F ≅ wideCospan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.term j) :=
- (NatIso.ofComponents fun j => eqToIso <| by aesop_cat) <| by aesop_cat
+ NatIso.ofComponents fun j => eqToIso <| by aesop_cat
#align category_theory.limits.wide_pullback_shape.diagram_iso_wide_cospan CategoryTheory.Limits.WidePullbackShape.diagramIsoWideCospan
/-- Construct a cone over a wide cospan. -/
@@ -247,7 +247,7 @@ def wideSpan (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : WideP
/-- Every diagram is naturally isomorphic (actually, equal) to a `wideSpan` -/
def diagramIsoWideSpan (F : WidePushoutShape J ⥤ C) :
F ≅ wideSpan (F.obj none) (fun j => F.obj (some j)) fun j => F.map (Hom.init j) :=
- (NatIso.ofComponents fun j => eqToIso <| by cases j; repeat rfl) <| by aesop_cat
+ NatIso.ofComponents fun j => eqToIso <| by cases j; repeat rfl
#align category_theory.limits.wide_pushout_shape.diagram_iso_wide_span CategoryTheory.Limits.WidePushoutShape.diagramIsoWideSpan
/-- Construct a cocone over a wide span. -/
@@ -510,25 +510,25 @@ def widePushoutShapeUnop : (WidePushoutShape J)ᵒᵖ ⥤ WidePullbackShape J :=
/-- The inverse of the unit isomorphism of the equivalence
`widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J` -/
def widePushoutShapeOpUnop : widePushoutShapeUnop J ⋙ widePullbackShapeOp J ≅ 𝟭 _ :=
- NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
+ NatIso.ofComponents fun X => Iso.refl _
#align category_theory.limits.wide_pushout_shape_op_unop CategoryTheory.Limits.widePushoutShapeOpUnop
/-- The counit isomorphism of the equivalence
`widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J` -/
def widePushoutShapeUnopOp : widePushoutShapeOp J ⋙ widePullbackShapeUnop J ≅ 𝟭 _ :=
- NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
+ NatIso.ofComponents fun X => Iso.refl _
#align category_theory.limits.wide_pushout_shape_unop_op CategoryTheory.Limits.widePushoutShapeUnopOp
/-- The inverse of the unit isomorphism of the equivalence
`widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J` -/
def widePullbackShapeOpUnop : widePullbackShapeUnop J ⋙ widePushoutShapeOp J ≅ 𝟭 _ :=
- NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
+ NatIso.ofComponents fun X => Iso.refl _
#align category_theory.limits.wide_pullback_shape_op_unop CategoryTheory.Limits.widePullbackShapeOpUnop
/-- The counit isomorphism of the equivalence
`widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J` -/
def widePullbackShapeUnopOp : widePullbackShapeOp J ⋙ widePushoutShapeUnop J ≅ 𝟭 _ :=
- NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
+ NatIso.ofComponents fun X => Iso.refl _
#align category_theory.limits.wide_pullback_shape_unop_op CategoryTheory.Limits.widePullbackShapeUnopOp
/-- The duality equivalence `(WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J` -/
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -369,9 +369,8 @@ theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_lift
@[ext 1100]
-theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) :
- (∀ j : J, g1 ≫ π arrows j = g2 ≫ π arrows j) → g1 ≫ base arrows = g2 ≫ base arrows → g1 = g2 :=
- by
+theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) : (∀ j : J,
+ g1 ≫ π arrows j = g2 ≫ π arrows j) → g1 ≫ base arrows = g2 ≫ base arrows → g1 = g2 := by
intro h1 h2
apply limit.hom_ext
rintro (_ | _)
@@ -451,9 +450,8 @@ theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_desc
@[ext 1100]
-theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) :
- (∀ j : J, ι arrows j ≫ g1 = ι arrows j ≫ g2) → head arrows ≫ g1 = head arrows ≫ g2 → g1 = g2 :=
- by
+theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) : (∀ j : J,
+ ι arrows j ≫ g1 = ι arrows j ≫ g2) → head arrows ≫ g1 = head arrows ≫ g2 → g1 = g2 := by
intro h1 h2
apply colimit.hom_ext
rintro (_ | _)
@@ -172,7 +172,7 @@ namespace WidePushoutShape
variable {J}
-/-- The type of arrows for the shape indexing a wide psuhout. -/
+/-- The type of arrows for the shape indexing a wide pushout. -/
inductive Hom : WidePushoutShape J → WidePushoutShape J → Type w
| id : ∀ X, Hom X X
| init : ∀ j : J, Hom none (some j)
@@ -273,19 +273,19 @@ abbrev HasWidePullbacks : Prop :=
∀ J : Type w, HasLimitsOfShape (WidePullbackShape J) C
#align category_theory.limits.has_wide_pullbacks CategoryTheory.Limits.HasWidePullbacks
-/-- `has_wide_pushouts` represents a choice of wide pushout for every collection of morphisms -/
+/-- `HasWidePushouts` represents a choice of wide pushout for every collection of morphisms -/
abbrev HasWidePushouts : Prop :=
∀ J : Type w, HasColimitsOfShape (WidePushoutShape J) C
#align category_theory.limits.has_wide_pushouts CategoryTheory.Limits.HasWidePushouts
variable {C J}
-/-- `has_wide_pullback B objs arrows` means that `wideCospan B objs arrows` has a limit. -/
+/-- `HasWidePullback B objs arrows` means that `wideCospan B objs arrows` has a limit. -/
abbrev HasWidePullback (B : C) (objs : J → C) (arrows : ∀ j : J, objs j ⟶ B) : Prop :=
HasLimit (WidePullbackShape.wideCospan B objs arrows)
#align category_theory.limits.has_wide_pullback CategoryTheory.Limits.HasWidePullback
-/-- `has_wide_pushout B objs arrows` means that `wideSpan B objs arrows` has a colimit. -/
+/-- `HasWidePushout B objs arrows` means that `wideSpan B objs arrows` has a colimit. -/
abbrev HasWidePushout (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : Prop :=
HasColimit (WidePushoutShape.wideSpan B objs arrows)
#align category_theory.limits.has_wide_pushout CategoryTheory.Limits.HasWidePushout
@@ -442,8 +442,7 @@ theorem eq_desc_of_comp_eq (g : widePushout _ _ arrows ⟶ X) :
theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
g =
- desc (head arrows ≫ g) (fun j => ι arrows j ≫ g) fun j =>
- by
+ desc (head arrows ≫ g) (fun j => ι arrows j ≫ g) fun j => by
rw [← Category.assoc]
simp := by
apply eq_desc_of_comp_eq
@@ -483,7 +482,7 @@ def widePullbackShapeOp : WidePullbackShape J ⥤ (WidePushoutShape J)ᵒᵖ whe
#align category_theory.limits.wide_pullback_shape_op CategoryTheory.Limits.widePullbackShapeOp
/-- The action on morphisms of the obvious functor
-`WidePushoutShapeOp : `WidePushoutShape J ⥤ (WidePullbackShape J)ᵒᵖ` -/
+`widePushoutShapeOp : WidePushoutShape J ⥤ (WidePullbackShape J)ᵒᵖ` -/
def widePushoutShapeOpMap :
∀ X Y : WidePushoutShape J,
(X ⟶ Y) → ((op X : (WidePullbackShape J)ᵒᵖ) ⟶ (op Y : (WidePullbackShape J)ᵒᵖ))
@@ -511,25 +510,25 @@ def widePushoutShapeUnop : (WidePushoutShape J)ᵒᵖ ⥤ WidePullbackShape J :=
#align category_theory.limits.wide_pushout_shape_unop CategoryTheory.Limits.widePushoutShapeUnop
/-- The inverse of the unit isomorphism of the equivalence
-`WidePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J` -/
+`widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J` -/
def widePushoutShapeOpUnop : widePushoutShapeUnop J ⋙ widePullbackShapeOp J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
#align category_theory.limits.wide_pushout_shape_op_unop CategoryTheory.Limits.widePushoutShapeOpUnop
/-- The counit isomorphism of the equivalence
-`WidePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J` -/
+`widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J` -/
def widePushoutShapeUnopOp : widePushoutShapeOp J ⋙ widePullbackShapeUnop J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
#align category_theory.limits.wide_pushout_shape_unop_op CategoryTheory.Limits.widePushoutShapeUnopOp
/-- The inverse of the unit isomorphism of the equivalence
-`WidePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J` -/
+`widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape J` -/
def widePullbackShapeOpUnop : widePullbackShapeUnop J ⋙ widePushoutShapeOp J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
#align category_theory.limits.wide_pullback_shape_op_unop CategoryTheory.Limits.widePullbackShapeOpUnop
/-- The counit isomorphism of the equivalence
-`WidePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J` -/
+`widePushoutShapeOpEquiv : (WidePushoutShape J)ᵒᵖ ≌ WidePullbackShape J` -/
def widePullbackShapeUnopOp : widePullbackShapeOp J ⋙ widePushoutShapeUnop J ≅ 𝟭 _ :=
NatIso.ofComponents (fun X => Iso.refl _) fun {X} {Y} f => by aesop
#align category_theory.limits.wide_pullback_shape_unop_op CategoryTheory.Limits.widePullbackShapeUnopOp
@@ -368,7 +368,7 @@ theorem hom_eq_lift (g : X ⟶ widePullback _ _ arrows) :
rfl -- Porting note: quite a few missing refl's in aesop_cat now
#align category_theory.limits.wide_pullback.hom_eq_lift CategoryTheory.Limits.WidePullback.hom_eq_lift
-@[ext]
+@[ext 1100]
theorem hom_ext (g1 g2 : X ⟶ widePullback _ _ arrows) :
(∀ j : J, g1 ≫ π arrows j = g2 ≫ π arrows j) → g1 ≫ base arrows = g2 ≫ base arrows → g1 = g2 :=
by
@@ -451,7 +451,7 @@ theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
rfl -- Porting note: another missing rfl
#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_desc
-@[ext]
+@[ext 1100]
theorem hom_ext (g1 g2 : widePushout _ _ arrows ⟶ X) :
(∀ j : J, ι arrows j ≫ g1 = ι arrows j ≫ g2) → head arrows ≫ g1 = head arrows ≫ g2 → g1 = g2 :=
by
This commit makes aesop_cat
and aesop_graph
terminal (i.e. they either solve the goal or fail). This appears to solve issues where non-terminal tactics, when used as auto-params, introduce unknown universe variables. See
Since there are some intended nonterminal uses of aesop_cat
, we introduce aesop_cat_nonterminal
as the nonterminal equivalent of aesop_cat
.
@@ -152,10 +152,10 @@ def equivalenceOfEquiv (J' : Type w') (h : J ≃ J') : WidePullbackShape J ≌ W
functor := wideCospan none (fun j => some (h j)) fun j => Hom.term (h j)
inverse := wideCospan none (fun j => some (h.invFun j)) fun j => Hom.term (h.invFun j)
unitIso :=
- NatIso.ofComponents (fun j => by aesop_cat; repeat rfl) fun f => by
+ NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
simp only [eq_iff_true_of_subsingleton]
counitIso :=
- NatIso.ofComponents (fun j => by aesop_cat; repeat rfl) fun f => by
+ NatIso.ofComponents (fun j => by aesop_cat_nonterminal; repeat rfl) fun f => by
simp only [eq_iff_true_of_subsingleton]
#align category_theory.limits.wide_pullback_shape.equivalence_of_equiv CategoryTheory.Limits.WidePullbackShape.equivalenceOfEquiv
@@ -39,18 +39,18 @@ namespace CategoryTheory.Limits
variable (J : Type w)
/-- A wide pullback shape for any type `J` can be written simply as `Option J`. -/
-def WidePullbackShape := Option J
+def WidePullbackShape := Option J
#align category_theory.limits.wide_pullback_shape CategoryTheory.Limits.WidePullbackShape
-- Porting note: strangely this could be synthesized
-instance : Inhabited (WidePullbackShape J) where
+instance : Inhabited (WidePullbackShape J) where
default := none
/-- A wide pushout shape for any type `J` can be written simply as `Option J`. -/
-def WidePushoutShape := Option J
+def WidePushoutShape := Option J
#align category_theory.limits.wide_pushout_shape CategoryTheory.Limits.WidePushoutShape
-instance : Inhabited (WidePushoutShape J) where
+instance : Inhabited (WidePushoutShape J) where
default := none
namespace WidePullbackShape
@@ -61,7 +61,7 @@ variable {J}
inductive Hom : WidePullbackShape J → WidePullbackShape J → Type w
| id : ∀ X, Hom X X
| term : ∀ j : J, Hom (some j) none
- deriving DecidableEq
+ deriving DecidableEq
#align category_theory.limits.wide_pullback_shape.hom CategoryTheory.Limits.WidePullbackShape.Hom
attribute [nolint unusedArguments] instDecidableEqHom
@@ -81,20 +81,20 @@ instance Hom.inhabited : Inhabited (Hom (none : WidePullbackShape J) none) :=
#align category_theory.limits.wide_pullback_shape.hom.inhabited CategoryTheory.Limits.WidePullbackShape.Hom.inhabited
open Lean Elab Tactic
-/- Pointing note: experimenting with manual scoping of aesop tactics. Attempted to define
+/- Pointing note: experimenting with manual scoping of aesop tactics. Attempted to define
aesop rule directing on `WidePushoutOut` and it didn't take for some reason -/
/-- An aesop tactic for bulk cases on morphisms in `WidePushoutShape` -/
-def evalCasesBash : TacticM Unit := do
- evalTactic
- (← `(tactic| casesm* WidePullbackShape _,
+def evalCasesBash : TacticM Unit := do
+ evalTactic
+ (← `(tactic| casesm* WidePullbackShape _,
(_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _) ))
attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash
-instance subsingleton_hom : Quiver.IsThin (WidePullbackShape J) := fun _ _ => by
+instance subsingleton_hom : Quiver.IsThin (WidePullbackShape J) := fun _ _ => by
constructor
- intro a b
- casesm* WidePullbackShape _, (_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _)
+ intro a b
+ casesm* WidePullbackShape _, (_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _)
rfl; rfl; rfl
#align category_theory.limits.wide_pullback_shape.subsingleton_hom CategoryTheory.Limits.WidePullbackShape.subsingleton_hom
@@ -107,8 +107,8 @@ theorem hom_id (X : WidePullbackShape J) : Hom.id X = 𝟙 X :=
rfl
#align category_theory.limits.wide_pullback_shape.hom_id CategoryTheory.Limits.WidePullbackShape.hom_id
-/- Porting note: we get a warning that we should change LHS to `sizeOf (𝟙 X)` but Lean cannot
-find the category instance on `WidePullbackShape J` in that case. Once supplied in the proof,
+/- Porting note: we get a warning that we should change LHS to `sizeOf (𝟙 X)` but Lean cannot
+find the category instance on `WidePullbackShape J` in that case. Once supplied in the proof,
the proposed proof of `simp [only WidePullbackShape.hom_id]` does not work -/
attribute [nolint simpNF] Hom.id.sizeOf_spec
@@ -198,18 +198,18 @@ instance Hom.inhabited : Inhabited (Hom (none : WidePushoutShape J) none) :=
open Lean Elab Tactic
-- Pointing note: experimenting with manual scoping of aesop tactics; only this worked
/-- An aesop tactic for bulk cases on morphisms in `WidePushoutShape` -/
-def evalCasesBash' : TacticM Unit := do
- evalTactic
- (← `(tactic| casesm* WidePushoutShape _,
+def evalCasesBash' : TacticM Unit := do
+ evalTactic
+ (← `(tactic| casesm* WidePushoutShape _,
(_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _) ))
attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash'
-instance subsingleton_hom : Quiver.IsThin (WidePushoutShape J) := fun _ _ => by
+instance subsingleton_hom : Quiver.IsThin (WidePushoutShape J) := fun _ _ => by
constructor
intro a b
casesm* WidePushoutShape _, (_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _)
- repeat rfl
+ repeat rfl
#align category_theory.limits.wide_pushout_shape.subsingleton_hom CategoryTheory.Limits.WidePushoutShape.subsingleton_hom
instance category : SmallCategory (WidePushoutShape J) :=
@@ -221,8 +221,8 @@ theorem hom_id (X : WidePushoutShape J) : Hom.id X = 𝟙 X :=
rfl
#align category_theory.limits.wide_pushout_shape.hom_id CategoryTheory.Limits.WidePushoutShape.hom_id
-/- Porting note: we get a warning that we should change LHS to `sizeOf (𝟙 X)` but Lean cannot
-find the category instance on `WidePushoutShape J` in that case. Once supplied in the proof,
+/- Porting note: we get a warning that we should change LHS to `sizeOf (𝟙 X)` but Lean cannot
+find the category instance on `WidePushoutShape J` in that case. Once supplied in the proof,
the proposed proof of `simp [only WidePushoutShape.hom_id]` does not work -/
attribute [nolint simpNF] Hom.id.sizeOf_spec
variable {C : Type u} [Category.{v} C]
@@ -237,10 +237,10 @@ def wideSpan (B : C) (objs : J → C) (arrows : ∀ j : J, B ⟶ objs j) : WideP
cases' f with _ j
· apply 𝟙 _
· exact arrows j
- map_comp := fun f g => by
+ map_comp := fun f g => by
cases f
- · simp only [Eq.ndrec, hom_id, eq_rec_constant, Category.id_comp]; congr
- · cases g
+ · simp only [Eq.ndrec, hom_id, eq_rec_constant, Category.id_comp]; congr
+ · cases g
· simp only [Eq.ndrec, hom_id, eq_rec_constant, Category.comp_id]; congr
#align category_theory.limits.wide_pushout_shape.wide_span CategoryTheory.Limits.WidePushoutShape.wideSpan
@@ -325,7 +325,7 @@ noncomputable abbrev base : widePullback _ _ arrows ⟶ B :=
theorem π_arrow (j : J) : π arrows j ≫ arrows _ = base arrows := by
apply limit.w (WidePullbackShape.wideCospan _ _ _) (WidePullbackShape.Hom.term j)
#align category_theory.limits.wide_pullback.π_arrow CategoryTheory.Limits.WidePullback.π_arrow
-
+
variable {arrows}
/-- Lift a collection of morphisms to a morphism to the pullback. -/
@@ -403,7 +403,7 @@ theorem arrow_ι (j : J) : arrows j ≫ ι arrows j = head arrows := by
#align category_theory.limits.wide_pushout.arrow_ι CategoryTheory.Limits.WidePushout.arrow_ι
-- Porting note: this can simplify itself
-attribute [nolint simpNF] WidePushout.arrow_ι WidePushout.arrow_ι_assoc
+attribute [nolint simpNF] WidePushout.arrow_ι WidePushout.arrow_ι_assoc
variable {arrows}
@@ -448,7 +448,7 @@ theorem hom_eq_desc (g : widePushout _ _ arrows ⟶ X) :
simp := by
apply eq_desc_of_comp_eq
aesop_cat
- rfl -- Porting note: another missing rfl
+ rfl -- Porting note: another missing rfl
#align category_theory.limits.wide_pushout.hom_eq_desc CategoryTheory.Limits.WidePushout.hom_eq_desc
@[ext]
@@ -479,7 +479,7 @@ def widePullbackShapeOpMap :
@[simps]
def widePullbackShapeOp : WidePullbackShape J ⥤ (WidePushoutShape J)ᵒᵖ where
obj X := op X
- map {X₁} {X₂} := widePullbackShapeOpMap J X₁ X₂
+ map {X₁} {X₂} := widePullbackShapeOpMap J X₁ X₂
#align category_theory.limits.wide_pullback_shape_op CategoryTheory.Limits.widePullbackShapeOp
/-- The action on morphisms of the obvious functor
@@ -495,7 +495,7 @@ def widePushoutShapeOpMap :
@[simps]
def widePushoutShapeOp : WidePushoutShape J ⥤ (WidePullbackShape J)ᵒᵖ where
obj X := op X
- map := fun {X} {Y} => widePushoutShapeOpMap J X Y
+ map := fun {X} {Y} => widePushoutShapeOpMap J X Y
#align category_theory.limits.wide_pushout_shape_op CategoryTheory.Limits.widePushoutShapeOp
/-- The obvious functor `(WidePullbackShape J)ᵒᵖ ⥤ WidePushoutShape J`-/
@@ -555,8 +555,7 @@ def widePullbackShapeOpEquiv : (WidePullbackShape J)ᵒᵖ ≌ WidePushoutShape
/-- If a category has wide pullbacks on a higher universe level it also has wide pullbacks
on a lower universe level. -/
theorem hasWidePullbacks_shrink [HasWidePullbacks.{max w w'} C] : HasWidePullbacks.{w} C := fun _ =>
- hasLimitsOfShapeOfEquivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
+ hasLimitsOfShape_of_equivalence (WidePullbackShape.equivalenceOfEquiv _ Equiv.ulift.{w'})
#align category_theory.limits.has_wide_pullbacks_shrink CategoryTheory.Limits.hasWidePullbacks_shrink
end CategoryTheory.Limits
-
This version of Aesop supports local and scoped rules.
@@ -89,8 +89,7 @@ def evalCasesBash : TacticM Unit := do
(← `(tactic| casesm* WidePullbackShape _,
(_: WidePullbackShape _) ⟶ (_ : WidePullbackShape _) ))
--- attribute [local tidy] tactic.case_bash -- Porting note: removed
-attribute [aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash
+attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash
instance subsingleton_hom : Quiver.IsThin (WidePullbackShape J) := fun _ _ => by
constructor
@@ -167,7 +166,6 @@ def uliftEquivalence :
(equivalenceOfEquiv _ (Equiv.ulift.{w', w}.symm : J ≃ ULift.{w'} J))
#align category_theory.limits.wide_pullback_shape.ulift_equivalence CategoryTheory.Limits.WidePullbackShape.uliftEquivalence
-erase_aesop_rules [safe tactic evalCasesBash (rule_sets [CategoryTheory])]
end WidePullbackShape
namespace WidePushoutShape
@@ -205,8 +203,7 @@ def evalCasesBash' : TacticM Unit := do
(← `(tactic| casesm* WidePushoutShape _,
(_: WidePushoutShape _) ⟶ (_ : WidePushoutShape _) ))
--- attribute [local tidy] tactic.case_bash -- Porting note: removed
-attribute [aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash'
+attribute [local aesop safe tactic (rule_sets [CategoryTheory])] evalCasesBash'
instance subsingleton_hom : Quiver.IsThin (WidePushoutShape J) := fun _ _ => by
constructor
@@ -267,7 +264,6 @@ def mkCocone {F : WidePushoutShape J ⥤ C} {X : C} (f : F.obj none ⟶ X) (ι :
cases j <;> cases j' <;> cases f <;> refine id _ <;> dsimp <;> simp [w] } }
#align category_theory.limits.wide_pushout_shape.mk_cocone CategoryTheory.Limits.WidePushoutShape.mkCocone
-erase_aesop_rules [safe tactic evalCasesBash' (rule_sets [CategoryTheory])]
end WidePushoutShape
variable (C : Type u) [Category.{v} C]
All dependencies are ported!