category_theory.sites.sheaf_of_typesMathlib.CategoryTheory.Sites.SheafOfTypes

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -1205,9 +1205,9 @@ def sheafOfTypesToPresheaf : SheafOfTypes J ⥤ Cᵒᵖ ⥤ Type w
 #align category_theory.SheafOfTypes_to_presheaf CategoryTheory.sheafOfTypesToPresheaf
 -/
 
-instance : Full (sheafOfTypesToPresheaf J) where Preimage X Y f := ⟨f⟩
+instance : CategoryTheory.Functor.Full (sheafOfTypesToPresheaf J) where Preimage X Y f := ⟨f⟩
 
-instance : Faithful (sheafOfTypesToPresheaf J) where
+instance : CategoryTheory.Functor.Faithful (sheafOfTypesToPresheaf J) where
 
 #print CategoryTheory.sheafOfTypesBotEquiv /-
 /--
Diff
@@ -606,7 +606,7 @@ theorem isSheafFor_iff_yonedaSheafCondition {P : Cᵒᵖ ⥤ Type v₁} :
   simp_rw [extension_iff_amalgamation]
   rw [Equiv.forall_congr_left' nat_trans_equiv_compatible_family]
   rw [Subtype.forall]
-  apply ball_congr
+  apply forall₂_congr
   intro x hx
   rw [Equiv.exists_unique_congr_left _]
   simp
@@ -1039,7 +1039,7 @@ theorem equalizer_sheaf_condition :
     Equiv.forall_congr_left (first_obj_eq_family P S).toEquiv.symm]
   simp_rw [← compatible_iff]
   simp only [inv_hom_id_apply, iso.to_equiv_symm_fun]
-  apply ball_congr
+  apply forall₂_congr
   intro x tx
   apply existsUnique_congr
   intro t
@@ -1135,7 +1135,7 @@ theorem sheaf_condition : R.IsSheafFor P ↔ Nonempty (IsLimit (Fork.ofι _ (w P
   rw [types.type_equalizer_iff_unique]
   erw [← Equiv.forall_congr_left (first_obj_eq_family P R).toEquiv.symm]
   simp_rw [← compatible_iff, ← iso.to_equiv_fun, Equiv.apply_symm_apply]
-  apply ball_congr
+  apply forall₂_congr
   intro x hx
   apply existsUnique_congr
   intro t
Diff
@@ -275,7 +275,7 @@ to `R` and then extended back up to `S`, the resulting extension equals `x`.
 theorem extend_restrict {x : FamilyOfElements P (generate R)} (t : x.Compatible) :
     (x.restrict (le_generate R)).sieveExtend = x :=
   by
-  rw [compatible_iff_sieve_compatible] at t 
+  rw [compatible_iff_sieve_compatible] at t
   ext _ _ h; apply (t _ _ _).symm.trans; congr
   exact h.some_spec.some_spec.some_spec.2
 #align category_theory.presieve.extend_restrict CategoryTheory.Presieve.extend_restrict
@@ -502,7 +502,7 @@ theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Pr
   fun x t₁ t₂ h₁ h₂ => by
   have q₁ := h₁ (𝟙 X) (by simp)
   have q₂ := h₂ (𝟙 X) (by simp)
-  simp only [op_id, functor_to_types.map_id_apply] at q₁ q₂ 
+  simp only [op_id, functor_to_types.map_id_apply] at q₁ q₂
   rw [q₁, q₂]
 #align category_theory.presieve.is_separated_for_top CategoryTheory.Presieve.isSeparatedFor_top
 -/
@@ -586,7 +586,7 @@ theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor 
   · intro h
     ext Y ⟨f, hf⟩
     have : _ = x.app Y _ := h f hf
-    rw [yoneda_equiv_naturality] at this 
+    rw [yoneda_equiv_naturality] at this
     rw [← this]
     dsimp
     simp
@@ -1025,7 +1025,7 @@ theorem compatible_iff (x : FirstObj P S) :
     ext ⟨Y, Z, g, f, hf⟩
     simpa [first_map, second_map] using t _ g hf
   · intro t Y Z f g hf
-    rw [types.limit_ext_iff'] at t 
+    rw [types.limit_ext_iff'] at t
     simpa [first_map, second_map] using t ⟨⟨Y, Z, g, f, hf⟩⟩
 #align category_theory.equalizer.sieve.compatible_iff CategoryTheory.Equalizer.Sieve.compatible_iff
 -/
@@ -1121,7 +1121,7 @@ theorem compatible_iff (x : FirstObj P R) :
     ext ⟨⟨Y, f, hf⟩, Z, g, hg⟩
     simpa [first_map, second_map] using t hf hg
   · intro t Y Z f g hf hg
-    rw [types.limit_ext_iff'] at t 
+    rw [types.limit_ext_iff'] at t
     simpa [first_map, second_map] using t ⟨⟨⟨Y, f, hf⟩, Z, g, hg⟩⟩
 #align category_theory.equalizer.presieve.compatible_iff CategoryTheory.Equalizer.Presieve.compatible_iff
 -/
Diff
@@ -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
 -/
-import Mathbin.CategoryTheory.Sites.Pretopology
-import Mathbin.CategoryTheory.Limits.Shapes.Types
+import CategoryTheory.Sites.Pretopology
+import CategoryTheory.Limits.Shapes.Types
 
 #align_import category_theory.sites.sheaf_of_types from "leanprover-community/mathlib"@"d64d67d000b974f0d86a2be7918cf800be6271c8"
 
Diff
@@ -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
-
-! This file was ported from Lean 3 source module category_theory.sites.sheaf_of_types
-! leanprover-community/mathlib commit d64d67d000b974f0d86a2be7918cf800be6271c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Sites.Pretopology
 import Mathbin.CategoryTheory.Limits.Shapes.Types
 
+#align_import category_theory.sites.sheaf_of_types from "leanprover-community/mathlib"@"d64d67d000b974f0d86a2be7918cf800be6271c8"
+
 /-!
 # Sheaves of types on a Grothendieck topology
 
Diff
@@ -231,7 +231,7 @@ theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X
 theorem restrict_extend {x : FamilyOfElements P R} (t : x.Compatible) :
     x.sieveExtend.restrict (le_generate R) = x :=
   by
-  ext (Y f hf)
+  ext Y f hf
   exact extend_agrees t hf
 #align category_theory.presieve.restrict_extend CategoryTheory.Presieve.restrict_extend
 -/
@@ -279,7 +279,7 @@ theorem extend_restrict {x : FamilyOfElements P (generate R)} (t : x.Compatible)
     (x.restrict (le_generate R)).sieveExtend = x :=
   by
   rw [compatible_iff_sieve_compatible] at t 
-  ext (_ _ h); apply (t _ _ _).symm.trans; congr
+  ext _ _ h; apply (t _ _ _).symm.trans; congr
   exact h.some_spec.some_spec.some_spec.2
 #align category_theory.presieve.extend_restrict CategoryTheory.Presieve.extend_restrict
 -/
@@ -565,7 +565,7 @@ def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
         ext ⟨f, hf⟩
         apply t.2.to_sieveCompatible _ }
   left_inv α := by
-    ext (X⟨_, _⟩)
+    ext X ⟨_, _⟩
     rfl
   right_inv := by
     rintro ⟨x, hx⟩
@@ -587,7 +587,7 @@ theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor 
     simp
   -- See note [dsimp, simp].
   · intro h
-    ext (Y⟨f, hf⟩)
+    ext Y ⟨f, hf⟩
     have : _ = x.app Y _ := h f hf
     rw [yoneda_equiv_naturality] at this 
     rw [← this]
@@ -949,10 +949,10 @@ def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P
   Hom t Y f hf := Pi.π (fun f : Σ Y, { f : Y ⟶ X // R f } => P.obj (op f.1)) ⟨_, _, hf⟩ t
   inv := Pi.lift fun f x => x _ f.2.2
   hom_inv_id' := by
-    ext (⟨Y, f, hf⟩p)
+    ext ⟨Y, f, hf⟩ p
     simpa
   inv_hom_id' := by
-    ext (x Y f hf)
+    ext x Y f hf
     apply limits.types.limit.lift_π_apply'
 #align category_theory.equalizer.first_obj_eq_family CategoryTheory.Equalizer.firstObjEqFamily
 -/
@@ -1050,7 +1050,7 @@ theorem equalizer_sheaf_condition :
   rw [Equiv.eq_symm_apply]
   constructor
   · intro q
-    ext (Y f hf)
+    ext Y f hf
     simpa [first_obj_eq_family, fork_map] using q _ _
   · intro q Y f hf
     rw [← q]
@@ -1145,7 +1145,7 @@ theorem sheaf_condition : R.IsSheafFor P ↔ Nonempty (IsLimit (Fork.ofι _ (w P
   rw [Equiv.eq_symm_apply]
   constructor
   · intro q
-    ext (Y f hf)
+    ext Y f hf
     simpa [fork_map] using q _ _
   · intro q Y f hf
     rw [← q]
Diff
@@ -126,12 +126,14 @@ def FamilyOfElements (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) :=
 instance : Inhabited (FamilyOfElements P (⊥ : Presieve X)) :=
   ⟨fun Y f => False.elim⟩
 
+#print CategoryTheory.Presieve.FamilyOfElements.restrict /-
 /-- A family of elements for a presheaf on the presieve `R₂` can be restricted to a smaller presieve
 `R₁`.
 -/
 def FamilyOfElements.restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂) :
     FamilyOfElements P R₂ → FamilyOfElements P R₁ := fun x Y f hf => x f (h _ hf)
 #align category_theory.presieve.family_of_elements.restrict CategoryTheory.Presieve.FamilyOfElements.restrict
+-/
 
 #print CategoryTheory.Presieve.FamilyOfElements.Compatible /-
 /-- A family of elements for the arrow set `R` is *compatible* if for any `f₁ : Y₁ ⟶ X` and
@@ -183,11 +185,13 @@ theorem pullbackCompatible_iff (x : FamilyOfElements P R) [HasPullbacks C] :
 #align category_theory.presieve.pullback_compatible_iff CategoryTheory.Presieve.pullbackCompatible_iff
 -/
 
+#print CategoryTheory.Presieve.FamilyOfElements.Compatible.restrict /-
 /-- The restriction of a compatible family is compatible. -/
 theorem FamilyOfElements.Compatible.restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂)
     {x : FamilyOfElements P R₂} : x.Compatible → (x.restrict h).Compatible :=
   fun q Y₁ Y₂ Z g₁ g₂ f₁ f₂ h₁ h₂ comm => q g₁ g₂ (h _ h₁) (h _ h₂) comm
 #align category_theory.presieve.family_of_elements.compatible.restrict CategoryTheory.Presieve.FamilyOfElements.Compatible.restrict
+-/
 
 #print CategoryTheory.Presieve.FamilyOfElements.sieveExtend /-
 /-- Extend a family of elements to the sieve generated by an arrow set.
@@ -209,6 +213,7 @@ theorem FamilyOfElements.Compatible.sieveExtend {x : FamilyOfElements P R} (hx :
 #align category_theory.presieve.family_of_elements.compatible.sieve_extend CategoryTheory.Presieve.FamilyOfElements.Compatible.sieveExtend
 -/
 
+#print CategoryTheory.Presieve.extend_agrees /-
 /-- The extension of a family agrees with the original family. -/
 theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X} (hf : R f) :
     x.sieveExtend f (le_generate R Y hf) = x f hf :=
@@ -218,6 +223,7 @@ theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X
   rw [t h.some (𝟙 _) _ hf _]
   · simp; · rw [id_comp]; exact h.some_spec.some_spec.2
 #align category_theory.presieve.extend_agrees CategoryTheory.Presieve.extend_agrees
+-/
 
 #print CategoryTheory.Presieve.restrict_extend /-
 /-- The restriction of an extension is the original. -/
@@ -305,11 +311,13 @@ noncomputable def compatibleEquivGenerateSieveCompatible :
 #align category_theory.presieve.compatible_equiv_generate_sieve_compatible CategoryTheory.Presieve.compatibleEquivGenerateSieveCompatible
 -/
 
+#print CategoryTheory.Presieve.FamilyOfElements.comp_of_compatible /-
 theorem FamilyOfElements.comp_of_compatible (S : Sieve X) {x : FamilyOfElements P S}
     (t : x.Compatible) {f : Y ⟶ X} (hf : S f) {Z} (g : Z ⟶ Y) :
     x (g ≫ f) (S.downward_closed hf g) = P.map g.op (x f hf) := by
   simpa using t (𝟙 _) g (S.downward_closed hf g) hf (id_comp _)
 #align category_theory.presieve.family_of_elements.comp_of_compatible CategoryTheory.Presieve.FamilyOfElements.comp_of_compatible
+-/
 
 section FunctorPullback
 
@@ -317,6 +325,7 @@ variable {D : Type u₂} [Category.{v₂} D] (F : D ⥤ C) {Z : D}
 
 variable {T : Presieve (F.obj Z)} {x : FamilyOfElements P T}
 
+#print CategoryTheory.Presieve.FamilyOfElements.functorPullback /-
 /--
 Given a family of elements of a sieve `S` on `F(X)`, we can realize it as a family of elements of
 `S.functor_pullback F`.
@@ -324,16 +333,20 @@ Given a family of elements of a sieve `S` on `F(X)`, we can realize it as a fami
 def FamilyOfElements.functorPullback (x : FamilyOfElements P T) :
     FamilyOfElements (F.op ⋙ P) (T.functorPullback F) := fun Y f hf => x (F.map f) hf
 #align category_theory.presieve.family_of_elements.functor_pullback CategoryTheory.Presieve.FamilyOfElements.functorPullback
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.Compatible.functorPullback /-
 theorem FamilyOfElements.Compatible.functorPullback (h : x.Compatible) :
     (x.functorPullback F).Compatible :=
   by
   intro Z₁ Z₂ W g₁ g₂ f₁ f₂ h₁ h₂ eq
   exact h (F.map g₁) (F.map g₂) h₁ h₂ (by simp only [← F.map_comp, Eq])
 #align category_theory.presieve.family_of_elements.compatible.functor_pullback CategoryTheory.Presieve.FamilyOfElements.Compatible.functorPullback
+-/
 
 end FunctorPullback
 
+#print CategoryTheory.Presieve.FamilyOfElements.functorPushforward /-
 /-- Given a family of elements of a sieve `S` on `X` whose values factors through `F`, we can
 realize it as a family of elements of `S.functor_pushforward F`. Since the preimage is obtained by
 choice, this is not well-defined generally.
@@ -343,6 +356,7 @@ noncomputable def FamilyOfElements.functorPushforward {D : Type u₂} [Category.
     FamilyOfElements P (T.functorPushforward F) := fun Y f h => by
   obtain ⟨Z, g, h, h₁, _⟩ := get_functor_pushforward_structure h; exact P.map h.op (x g h₁)
 #align category_theory.presieve.family_of_elements.functor_pushforward CategoryTheory.Presieve.FamilyOfElements.functorPushforward
+-/
 
 section Pullback
 
@@ -404,6 +418,7 @@ theorem FamilyOfElements.Compatible.compPresheafMap (f : P ⟶ Q) {x : FamilyOfE
 #align category_theory.presieve.family_of_elements.compatible.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.Compatible.compPresheafMap
 -/
 
+#print CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation /-
 /--
 The given element `t` of `P.obj (op X)` is an *amalgamation* for the family of elements `x` if every
 restriction `P.map f.op t = x_f` for every arrow `f` in the presieve `R`.
@@ -415,7 +430,9 @@ equation (2).
 def FamilyOfElements.IsAmalgamation (x : FamilyOfElements P R) (t : P.obj (op X)) : Prop :=
   ∀ ⦃Y : C⦄ (f : Y ⟶ X) (h : R f), P.map f.op t = x f h
 #align category_theory.presieve.family_of_elements.is_amalgamation CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap /-
 theorem FamilyOfElements.IsAmalgamation.compPresheafMap {x : FamilyOfElements P R} {t} (f : P ⟶ Q)
     (h : x.IsAmalgamation t) : (x.compPresheafMap f).IsAmalgamation (f.app (op X) t) :=
   by
@@ -424,7 +441,9 @@ theorem FamilyOfElements.IsAmalgamation.compPresheafMap {x : FamilyOfElements P
   change (f.app _ ≫ Q.map _) _ = _
   simp [← f.naturality, h g hg]
 #align category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap
+-/
 
+#print CategoryTheory.Presieve.is_compatible_of_exists_amalgamation /-
 theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
     (h : ∃ t, x.IsAmalgamation t) : x.Compatible :=
   by
@@ -433,12 +452,16 @@ theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
   rw [← ht _ h₁, ← ht _ h₂, ← functor_to_types.map_comp_apply, ← op_comp, comm]
   simp
 #align category_theory.presieve.is_compatible_of_exists_amalgamation CategoryTheory.Presieve.is_compatible_of_exists_amalgamation
+-/
 
+#print CategoryTheory.Presieve.isAmalgamation_restrict /-
 theorem isAmalgamation_restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂) (x : FamilyOfElements P R₂)
     (t : P.obj (op X)) (ht : x.IsAmalgamation t) : (x.restrict h).IsAmalgamation t := fun Y f hf =>
   ht f (h Y hf)
 #align category_theory.presieve.is_amalgamation_restrict CategoryTheory.Presieve.isAmalgamation_restrict
+-/
 
+#print CategoryTheory.Presieve.isAmalgamation_sieveExtend /-
 theorem isAmalgamation_sieveExtend {R : Presieve X} (x : FamilyOfElements P R) (t : P.obj (op X))
     (ht : x.IsAmalgamation t) : x.sieveExtend.IsAmalgamation t :=
   by
@@ -446,6 +469,7 @@ theorem isAmalgamation_sieveExtend {R : Presieve X} (x : FamilyOfElements P R) (
   dsimp [family_of_elements.sieve_extend]
   rw [← ht _, ← functor_to_types.map_comp_apply, ← op_comp, hf.some_spec.some_spec.some_spec.2]
 #align category_theory.presieve.is_amalgamation_sieve_extend CategoryTheory.Presieve.isAmalgamation_sieveExtend
+-/
 
 #print CategoryTheory.Presieve.IsSeparatedFor /-
 /-- A presheaf is separated for a presieve if there is at most one amalgamation. -/
@@ -454,10 +478,12 @@ def IsSeparatedFor (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) : Prop :=
 #align category_theory.presieve.is_separated_for CategoryTheory.Presieve.IsSeparatedFor
 -/
 
+#print CategoryTheory.Presieve.IsSeparatedFor.ext /-
 theorem IsSeparatedFor.ext {R : Presieve X} (hR : IsSeparatedFor P R) {t₁ t₂ : P.obj (op X)}
     (h : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : R f), P.map f.op t₁ = P.map f.op t₂) : t₁ = t₂ :=
   hR (fun Y f hf => P.map f.op t₂) t₁ t₂ (fun Y f hf => h hf) fun Y f hf => rfl
 #align category_theory.presieve.is_separated_for.ext CategoryTheory.Presieve.IsSeparatedFor.ext
+-/
 
 #print CategoryTheory.Presieve.isSeparatedFor_iff_generate /-
 theorem isSeparatedFor_iff_generate : IsSeparatedFor P R ↔ IsSeparatedFor P (generate R) :=
@@ -474,6 +500,7 @@ theorem isSeparatedFor_iff_generate : IsSeparatedFor P R ↔ IsSeparatedFor P (g
 #align category_theory.presieve.is_separated_for_iff_generate CategoryTheory.Presieve.isSeparatedFor_iff_generate
 -/
 
+#print CategoryTheory.Presieve.isSeparatedFor_top /-
 theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Presieve X) :=
   fun x t₁ t₂ h₁ h₂ => by
   have q₁ := h₁ (𝟙 X) (by simp)
@@ -481,6 +508,7 @@ theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Pr
   simp only [op_id, functor_to_types.map_id_apply] at q₁ q₂ 
   rw [q₁, q₂]
 #align category_theory.presieve.is_separated_for_top CategoryTheory.Presieve.isSeparatedFor_top
+-/
 
 #print CategoryTheory.Presieve.IsSheafFor /-
 /-- We define `P` to be a sheaf for the presieve `R` if every compatible family has a unique
@@ -545,6 +573,7 @@ def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
 #align category_theory.presieve.nat_trans_equiv_compatible_family CategoryTheory.Presieve.natTransEquivCompatibleFamily
 -/
 
+#print CategoryTheory.Presieve.extension_iff_amalgamation /-
 /-- (Implementation). A lemma useful to prove `yoneda_condition_iff_sheaf_condition`. -/
 theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor ⟶ P) (g : yoneda.obj X ⟶ P) :
     S.functorInclusion ≫ g = x ↔
@@ -565,6 +594,7 @@ theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor 
     dsimp
     simp
 #align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamation
+-/
 
 #print CategoryTheory.Presieve.isSheafFor_iff_yonedaSheafCondition /-
 -- See note [dsimp, simp].
@@ -586,6 +616,7 @@ theorem isSheafFor_iff_yonedaSheafCondition {P : Cᵒᵖ ⥤ Type v₁} :
 #align category_theory.presieve.is_sheaf_for_iff_yoneda_sheaf_condition CategoryTheory.Presieve.isSheafFor_iff_yonedaSheafCondition
 -/
 
+#print CategoryTheory.Presieve.IsSheafFor.extend /-
 /--
 If `P` is a sheaf for the sieve `S` on `X`, a natural transformation from `S` (viewed as a functor)
 to `P` can be (uniquely) extended to all of `yoneda.obj X`.
@@ -600,6 +631,7 @@ noncomputable def IsSheafFor.extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor
     yoneda.obj X ⟶ P :=
   (isSheafFor_iff_yonedaSheafCondition.1 h f).exists.some
 #align category_theory.presieve.is_sheaf_for.extend CategoryTheory.Presieve.IsSheafFor.extend
+-/
 
 #print CategoryTheory.Presieve.IsSheafFor.functorInclusion_comp_extend /-
 /--
@@ -619,12 +651,15 @@ theorem IsSheafFor.functorInclusion_comp_extend {P : Cᵒᵖ ⥤ Type v₁} (h :
 #align category_theory.presieve.is_sheaf_for.functor_inclusion_comp_extend CategoryTheory.Presieve.IsSheafFor.functorInclusion_comp_extend
 -/
 
+#print CategoryTheory.Presieve.IsSheafFor.unique_extend /-
 /-- The extension of `f` to `yoneda.obj X` is unique. -/
 theorem IsSheafFor.unique_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) {f : S.Functor ⟶ P}
     (t : yoneda.obj X ⟶ P) (ht : S.functorInclusion ≫ t = f) : t = h.extend f :=
   (isSheafFor_iff_yonedaSheafCondition.1 h f).unique ht (h.functorInclusion_comp_extend f)
 #align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extend
+-/
 
+#print CategoryTheory.Presieve.IsSheafFor.hom_ext /-
 /--
 If `P` is a sheaf for the sieve `S` on `X`, then if two natural transformations from `yoneda.obj X`
 to `P` agree when restricted to the subfunctor given by `S`, they are equal.
@@ -633,7 +668,9 @@ theorem IsSheafFor.hom_ext {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) (t
     (ht : S.functorInclusion ≫ t₁ = S.functorInclusion ≫ t₂) : t₁ = t₂ :=
   (h.unique_extend t₁ ht).trans (h.unique_extend t₂ rfl).symm
 #align category_theory.presieve.is_sheaf_for.hom_ext CategoryTheory.Presieve.IsSheafFor.hom_ext
+-/
 
+#print CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor /-
 /-- `P` is a sheaf for `R` iff it is separated for `R` and there exists an amalgamation. -/
 theorem isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor :
     (IsSeparatedFor P R ∧ ∀ x : FamilyOfElements P R, x.Compatible → ∃ t, x.IsAmalgamation t) ↔
@@ -650,7 +687,9 @@ theorem isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor :
     apply (h _).unique ht₁ ht₂
     exact is_compatible_of_exists_amalgamation x ⟨_, ht₂⟩
 #align category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor
+-/
 
+#print CategoryTheory.Presieve.IsSeparatedFor.isSheafFor /-
 /-- If `P` is separated for `R` and every family has an amalgamation, then `P` is a sheaf for `R`.
 -/
 theorem IsSeparatedFor.isSheafFor (t : IsSeparatedFor P R) :
@@ -659,6 +698,7 @@ theorem IsSeparatedFor.isSheafFor (t : IsSeparatedFor P R) :
   rw [← is_separated_for_and_exists_is_amalgamation_iff_sheaf_for]
   exact And.intro t
 #align category_theory.presieve.is_separated_for.is_sheaf_for CategoryTheory.Presieve.IsSeparatedFor.isSheafFor
+-/
 
 #print CategoryTheory.Presieve.IsSheafFor.isSeparatedFor /-
 /-- If `P` is a sheaf for `R`, it is separated for `R`. -/
@@ -667,11 +707,13 @@ theorem IsSheafFor.isSeparatedFor : IsSheafFor P R → IsSeparatedFor P R := fun
 #align category_theory.presieve.is_sheaf_for.is_separated_for CategoryTheory.Presieve.IsSheafFor.isSeparatedFor
 -/
 
+#print CategoryTheory.Presieve.IsSheafFor.amalgamate /-
 /-- Get the amalgamation of the given compatible family, provided we have a sheaf. -/
 noncomputable def IsSheafFor.amalgamate (t : IsSheafFor P R) (x : FamilyOfElements P R)
     (hx : x.Compatible) : P.obj (op X) :=
   (t x hx).exists.some
 #align category_theory.presieve.is_sheaf_for.amalgamate CategoryTheory.Presieve.IsSheafFor.amalgamate
+-/
 
 #print CategoryTheory.Presieve.IsSheafFor.isAmalgamation /-
 theorem IsSheafFor.isAmalgamation (t : IsSheafFor P R) {x : FamilyOfElements P R}
@@ -680,11 +722,13 @@ theorem IsSheafFor.isAmalgamation (t : IsSheafFor P R) {x : FamilyOfElements P R
 #align category_theory.presieve.is_sheaf_for.is_amalgamation CategoryTheory.Presieve.IsSheafFor.isAmalgamation
 -/
 
+#print CategoryTheory.Presieve.IsSheafFor.valid_glue /-
 @[simp]
 theorem IsSheafFor.valid_glue (t : IsSheafFor P R) {x : FamilyOfElements P R} (hx : x.Compatible)
     (f : Y ⟶ X) (Hf : R f) : P.map f.op (t.amalgamate x hx) = x f Hf :=
   t.IsAmalgamation hx f Hf
 #align category_theory.presieve.is_sheaf_for.valid_glue CategoryTheory.Presieve.IsSheafFor.valid_glue
+-/
 
 #print CategoryTheory.Presieve.isSheafFor_iff_generate /-
 /-- C2.1.3 in [Elephant] -/
@@ -720,6 +764,7 @@ theorem isSheafFor_singleton_iso (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P (Presie
     simpa using ht _ (presieve.singleton_self _)
 #align category_theory.presieve.is_sheaf_for_singleton_iso CategoryTheory.Presieve.isSheafFor_singletonₓ_iso
 
+#print CategoryTheory.Presieve.isSheafFor_top_sieve /-
 /-- Every presheaf is a sheaf for the maximal sieve.
 
 [Elephant] C2.1.5(ii)
@@ -730,6 +775,7 @@ theorem isSheafFor_top_sieve (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P ((⊤ : Sie
   rw [← is_sheaf_for_iff_generate]
   apply is_sheaf_for_singleton_iso
 #align category_theory.presieve.is_sheaf_for_top_sieve CategoryTheory.Presieve.isSheafFor_top_sieve
+-/
 
 #print CategoryTheory.Presieve.isSheafFor_iso /-
 /-- If `P` is a sheaf for `S`, and it is iso to `P'`, then `P'` is a sheaf for `S`. This shows that
@@ -752,6 +798,7 @@ theorem isSheafFor_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') : IsSheafFor P R
 #align category_theory.presieve.is_sheaf_for_iso CategoryTheory.Presieve.isSheafFor_iso
 -/
 
+#print CategoryTheory.Presieve.isSheafFor_subsieve_aux /-
 /-- If a presieve `R` on `X` has a subsieve `S` such that:
 
 * `P` is a sheaf for `S`.
@@ -780,7 +827,9 @@ theorem isSheafFor_subsieve_aux (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Pres
       family_of_elements.restrict, ← hx (𝟙 _) f _ _ (id_comp _)]
     simp
 #align category_theory.presieve.is_sheaf_for_subsieve_aux CategoryTheory.Presieve.isSheafFor_subsieve_aux
+-/
 
+#print CategoryTheory.Presieve.isSheafFor_subsieve /-
 /--
 If `P` is a sheaf for every pullback of the sieve `S`, then `P` is a sheaf for any presieve which
 contains `S`.
@@ -791,6 +840,7 @@ theorem isSheafFor_subsieve (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Presieve
     IsSheafFor P R :=
   isSheafFor_subsieve_aux P h (by simpa using trans (𝟙 _)) fun Y f hf => (trans f).IsSeparatedFor
 #align category_theory.presieve.is_sheaf_for_subsieve CategoryTheory.Presieve.isSheafFor_subsieve
+-/
 
 #print CategoryTheory.Presieve.IsSeparated /-
 /-- A presheaf is separated for a topology if it is separated for every sieve in the topology. -/
@@ -865,10 +915,12 @@ theorem isSheaf_pretopology [HasPullbacks C] (K : Pretopology C) :
 #align category_theory.presieve.is_sheaf_pretopology CategoryTheory.Presieve.isSheaf_pretopology
 -/
 
+#print CategoryTheory.Presieve.isSheaf_bot /-
 /-- Any presheaf is a sheaf for the bottom (trivial) grothendieck topology. -/
 theorem isSheaf_bot : IsSheaf (⊥ : GrothendieckTopology C) P := fun X => by
   simp [is_sheaf_for_top_sieve]
 #align category_theory.presieve.is_sheaf_bot CategoryTheory.Presieve.isSheaf_bot
+-/
 
 end Presieve
 
@@ -908,6 +960,7 @@ def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P
 instance : Inhabited (FirstObj P (⊥ : Presieve X)) :=
   (firstObjEqFamily P _).toEquiv.Inhabited
 
+#print CategoryTheory.Equalizer.forkMap /-
 /--
 The left morphism of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram
 of <https://stacks.math.columbia.edu/tag/00VM>.
@@ -915,6 +968,7 @@ of <https://stacks.math.columbia.edu/tag/00VM>.
 def forkMap : P.obj (op X) ⟶ FirstObj P R :=
   Pi.lift fun f => P.map f.2.1.op
 #align category_theory.equalizer.fork_map CategoryTheory.Equalizer.forkMap
+-/
 
 /-!
 This section establishes the equivalence between the sheaf condition of Equation (3) [MM92] and
@@ -951,12 +1005,14 @@ def secondMap : FirstObj P S ⟶ SecondObj P S :=
 #align category_theory.equalizer.sieve.second_map CategoryTheory.Equalizer.Sieve.secondMap
 -/
 
+#print CategoryTheory.Equalizer.Sieve.w /-
 theorem w : forkMap P S ≫ firstMap P S = forkMap P S ≫ secondMap P S :=
   by
   apply limit.hom_ext
   rintro ⟨Y, Z, g, f, hf⟩
   simp [first_map, second_map, fork_map]
 #align category_theory.equalizer.sieve.w CategoryTheory.Equalizer.Sieve.w
+-/
 
 #print CategoryTheory.Equalizer.Sieve.compatible_iff /-
 /--
@@ -977,6 +1033,7 @@ theorem compatible_iff (x : FirstObj P S) :
 #align category_theory.equalizer.sieve.compatible_iff CategoryTheory.Equalizer.Sieve.compatible_iff
 -/
 
+#print CategoryTheory.Equalizer.Sieve.equalizer_sheaf_condition /-
 /-- `P` is a sheaf for `S`, iff the fork given by `w` is an equalizer. -/
 theorem equalizer_sheaf_condition :
     Presieve.IsSheafFor P S ↔ Nonempty (IsLimit (Fork.ofι _ (w P S))) :=
@@ -999,6 +1056,7 @@ theorem equalizer_sheaf_condition :
     rw [← q]
     simp [first_obj_eq_family, fork_map]
 #align category_theory.equalizer.sieve.equalizer_sheaf_condition CategoryTheory.Equalizer.Sieve.equalizer_sheaf_condition
+-/
 
 end Sieve
 
@@ -1039,6 +1097,7 @@ def secondMap : FirstObj P R ⟶ SecondObj P R :=
 #align category_theory.equalizer.presieve.second_map CategoryTheory.Equalizer.Presieve.secondMap
 -/
 
+#print CategoryTheory.Equalizer.Presieve.w /-
 theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R :=
   by
   apply limit.hom_ext
@@ -1049,6 +1108,7 @@ theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R :=
   rw [← P.map_comp, ← op_comp, pullback.condition]
   simp
 #align category_theory.equalizer.presieve.w CategoryTheory.Equalizer.Presieve.w
+-/
 
 #print CategoryTheory.Equalizer.Presieve.compatible_iff /-
 /--
@@ -1069,6 +1129,7 @@ theorem compatible_iff (x : FirstObj P R) :
 #align category_theory.equalizer.presieve.compatible_iff CategoryTheory.Equalizer.Presieve.compatible_iff
 -/
 
+#print CategoryTheory.Equalizer.Presieve.sheaf_condition /-
 /-- `P` is a sheaf for `R`, iff the fork given by `w` is an equalizer.
 See <https://stacks.math.columbia.edu/tag/00VM>.
 -/
@@ -1090,6 +1151,7 @@ theorem sheaf_condition : R.IsSheafFor P ↔ Nonempty (IsLimit (Fork.ofι _ (w P
     rw [← q]
     simp [fork_map]
 #align category_theory.equalizer.presieve.sheaf_condition CategoryTheory.Equalizer.Presieve.sheaf_condition
+-/
 
 end Presieve
 
@@ -1150,6 +1212,7 @@ instance : Full (sheafOfTypesToPresheaf J) where Preimage X Y f := ⟨f⟩
 
 instance : Faithful (sheafOfTypesToPresheaf J) where
 
+#print CategoryTheory.sheafOfTypesBotEquiv /-
 /--
 The category of sheaves on the bottom (trivial) grothendieck topology is equivalent to the category
 of presheaves.
@@ -1166,6 +1229,7 @@ def sheafOfTypesBotEquiv : SheafOfTypes (⊥ : GrothendieckTopology C) ≌ Cᵒ
       inv := { app := fun _ => ⟨𝟙 _⟩ } }
   counitIso := Iso.refl _
 #align category_theory.SheafOfTypes_bot_equiv CategoryTheory.sheafOfTypesBotEquiv
+-/
 
 instance : Inhabited (SheafOfTypes (⊥ : GrothendieckTopology C)) :=
   ⟨sheafOfTypesBotEquiv.inverse.obj ((Functor.const _).obj PUnit)⟩
Diff
@@ -272,7 +272,7 @@ to `R` and then extended back up to `S`, the resulting extension equals `x`.
 theorem extend_restrict {x : FamilyOfElements P (generate R)} (t : x.Compatible) :
     (x.restrict (le_generate R)).sieveExtend = x :=
   by
-  rw [compatible_iff_sieve_compatible] at t
+  rw [compatible_iff_sieve_compatible] at t 
   ext (_ _ h); apply (t _ _ _).symm.trans; congr
   exact h.some_spec.some_spec.some_spec.2
 #align category_theory.presieve.extend_restrict CategoryTheory.Presieve.extend_restrict
@@ -285,7 +285,7 @@ equal when restricted to `R`.
 -/
 theorem restrict_inj {x₁ x₂ : FamilyOfElements P (generate R)} (t₁ : x₁.Compatible)
     (t₂ : x₂.Compatible) : x₁.restrict (le_generate R) = x₂.restrict (le_generate R) → x₁ = x₂ :=
-  fun h => by rw [← extend_restrict t₁, ← extend_restrict t₂]; congr ; exact h
+  fun h => by rw [← extend_restrict t₁, ← extend_restrict t₂]; congr; exact h
 #align category_theory.presieve.restrict_inj CategoryTheory.Presieve.restrict_inj
 -/
 
@@ -359,7 +359,7 @@ def FamilyOfElements.pullback (f : Y ⟶ X) (x : FamilyOfElements P S) :
 theorem FamilyOfElements.Compatible.pullback (f : Y ⟶ X) {x : FamilyOfElements P S}
     (h : x.Compatible) : (x.pullback f).Compatible :=
   by
-  simp only [compatible_iff_sieve_compatible] at h⊢
+  simp only [compatible_iff_sieve_compatible] at h ⊢
   intro W Z f₁ f₂ hf
   unfold family_of_elements.pullback
   rw [← h (f₁ ≫ f) f₂ hf]
@@ -478,7 +478,7 @@ theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Pr
   fun x t₁ t₂ h₁ h₂ => by
   have q₁ := h₁ (𝟙 X) (by simp)
   have q₂ := h₂ (𝟙 X) (by simp)
-  simp only [op_id, functor_to_types.map_id_apply] at q₁ q₂
+  simp only [op_id, functor_to_types.map_id_apply] at q₁ q₂ 
   rw [q₁, q₂]
 #align category_theory.presieve.is_separated_for_top CategoryTheory.Presieve.isSeparatedFor_top
 
@@ -560,7 +560,7 @@ theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor 
   · intro h
     ext (Y⟨f, hf⟩)
     have : _ = x.app Y _ := h f hf
-    rw [yoneda_equiv_naturality] at this
+    rw [yoneda_equiv_naturality] at this 
     rw [← this]
     dsimp
     simp
@@ -885,7 +885,7 @@ The middle object of the fork diagram given in Equation (3) of [MM92], as well a
 of <https://stacks.math.columbia.edu/tag/00VM>.
 -/
 def FirstObj : Type max v₁ u₁ :=
-  ∏ fun f : ΣY, { f : Y ⟶ X // R f } => P.obj (op f.1)
+  ∏ fun f : Σ Y, { f : Y ⟶ X // R f } => P.obj (op f.1)
 #align category_theory.equalizer.first_obj CategoryTheory.Equalizer.FirstObj
 -/
 
@@ -894,7 +894,7 @@ def FirstObj : Type max v₁ u₁ :=
 @[simps]
 def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P
     where
-  Hom t Y f hf := Pi.π (fun f : ΣY, { f : Y ⟶ X // R f } => P.obj (op f.1)) ⟨_, _, hf⟩ t
+  Hom t Y f hf := Pi.π (fun f : Σ Y, { f : Y ⟶ X // R f } => P.obj (op f.1)) ⟨_, _, hf⟩ t
   inv := Pi.lift fun f x => x _ f.2.2
   hom_inv_id' := by
     ext (⟨Y, f, hf⟩p)
@@ -929,7 +929,7 @@ namespace Sieve
 to check a family is compatible.
 -/
 def SecondObj : Type max v₁ u₁ :=
-  ∏ fun f : Σ(Y Z : _)(g : Z ⟶ Y), { f' : Y ⟶ X // S f' } => P.obj (op f.2.1)
+  ∏ fun f : Σ (Y Z : _) (g : Z ⟶ Y), { f' : Y ⟶ X // S f' } => P.obj (op f.2.1)
 #align category_theory.equalizer.sieve.second_obj CategoryTheory.Equalizer.Sieve.SecondObj
 -/
 
@@ -937,7 +937,7 @@ def SecondObj : Type max v₁ u₁ :=
 /-- The map `p` of Equations (3,4) [MM92]. -/
 def firstMap : FirstObj P S ⟶ SecondObj P S :=
   Pi.lift fun fg =>
-    Pi.π _ (⟨_, _, S.downward_closed fg.2.2.2.2 fg.2.2.1⟩ : ΣY, { f : Y ⟶ X // S f })
+    Pi.π _ (⟨_, _, S.downward_closed fg.2.2.2.2 fg.2.2.1⟩ : Σ Y, { f : Y ⟶ X // S f })
 #align category_theory.equalizer.sieve.first_map CategoryTheory.Equalizer.Sieve.firstMap
 -/
 
@@ -972,7 +972,7 @@ theorem compatible_iff (x : FirstObj P S) :
     ext ⟨Y, Z, g, f, hf⟩
     simpa [first_map, second_map] using t _ g hf
   · intro t Y Z f g hf
-    rw [types.limit_ext_iff'] at t
+    rw [types.limit_ext_iff'] at t 
     simpa [first_map, second_map] using t ⟨⟨Y, Z, g, f, hf⟩⟩
 #align category_theory.equalizer.sieve.compatible_iff CategoryTheory.Equalizer.Sieve.compatible_iff
 -/
@@ -1017,7 +1017,7 @@ variable [HasPullbacks C]
 contains the data used to check a family of elements for a presieve is compatible.
 -/
 def SecondObj : Type max v₁ u₁ :=
-  ∏ fun fg : (ΣY, { f : Y ⟶ X // R f }) × ΣZ, { g : Z ⟶ X // R g } =>
+  ∏ fun fg : (Σ Y, { f : Y ⟶ X // R f }) × Σ Z, { g : Z ⟶ X // R g } =>
     P.obj (op (pullback fg.1.2.1 fg.2.2.1))
 #align category_theory.equalizer.presieve.second_obj CategoryTheory.Equalizer.Presieve.SecondObj
 -/
@@ -1064,7 +1064,7 @@ theorem compatible_iff (x : FirstObj P R) :
     ext ⟨⟨Y, f, hf⟩, Z, g, hg⟩
     simpa [first_map, second_map] using t hf hg
   · intro t Y Z f g hf hg
-    rw [types.limit_ext_iff'] at t
+    rw [types.limit_ext_iff'] at t 
     simpa [first_map, second_map] using t ⟨⟨⟨Y, f, hf⟩, Z, g, hg⟩⟩
 #align category_theory.equalizer.presieve.compatible_iff CategoryTheory.Equalizer.Presieve.compatible_iff
 -/
Diff
@@ -126,12 +126,6 @@ def FamilyOfElements (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) :=
 instance : Inhabited (FamilyOfElements P (⊥ : Presieve X)) :=
   ⟨fun Y f => False.elim⟩
 
-/- warning: category_theory.presieve.family_of_elements.restrict -> CategoryTheory.Presieve.FamilyOfElements.restrict is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toHasLe.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₁)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₁)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.restrict CategoryTheory.Presieve.FamilyOfElements.restrictₓ'. -/
 /-- A family of elements for a presheaf on the presieve `R₂` can be restricted to a smaller presieve
 `R₁`.
 -/
@@ -189,12 +183,6 @@ theorem pullbackCompatible_iff (x : FamilyOfElements P R) [HasPullbacks C] :
 #align category_theory.presieve.pullback_compatible_iff CategoryTheory.Presieve.pullbackCompatible_iff
 -/
 
-/- warning: category_theory.presieve.family_of_elements.compatible.restrict -> CategoryTheory.Presieve.FamilyOfElements.Compatible.restrict is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toHasLe.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₂ x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₂ x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.compatible.restrict CategoryTheory.Presieve.FamilyOfElements.Compatible.restrictₓ'. -/
 /-- The restriction of a compatible family is compatible. -/
 theorem FamilyOfElements.Compatible.restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂)
     {x : FamilyOfElements P R₂} : x.Compatible → (x.restrict h).Compatible :=
@@ -221,12 +209,6 @@ theorem FamilyOfElements.Compatible.sieveExtend {x : FamilyOfElements P R} (hx :
 #align category_theory.presieve.family_of_elements.compatible.sieve_extend CategoryTheory.Presieve.FamilyOfElements.Compatible.sieveExtend
 -/
 
-/- warning: category_theory.presieve.extend_agrees -> CategoryTheory.Presieve.extend_agrees is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : R Y f), Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x Y f (CategoryTheory.Sieve.le_generate.{u2, u3} C _inst_1 X R Y f hf)) (x Y f hf))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : R Y f), Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x Y f (CategoryTheory.Sieve.le_generate.{u2, u3} C _inst_1 X R Y f hf)) (x Y f hf))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.extend_agrees CategoryTheory.Presieve.extend_agreesₓ'. -/
 /-- The extension of a family agrees with the original family. -/
 theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X} (hf : R f) :
     x.sieveExtend f (le_generate R Y hf) = x f hf :=
@@ -323,12 +305,6 @@ noncomputable def compatibleEquivGenerateSieveCompatible :
 #align category_theory.presieve.compatible_equiv_generate_sieve_compatible CategoryTheory.Presieve.compatibleEquivGenerateSieveCompatible
 -/
 
-/- warning: category_theory.presieve.family_of_elements.comp_of_compatible -> CategoryTheory.Presieve.FamilyOfElements.comp_of_compatible is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} (S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S)}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S Y f) {Z : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y), Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Z)) (x Z (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) Z Y X g f) (CategoryTheory.Sieve.downward_closed.{u2, u3} C _inst_1 X Y Z S f hf g)) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y) (Opposite.op.{succ u3} C Z) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y g) (x Y f hf)))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} (S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S)}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S Y f) {Z : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y), Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Z)) (x Z (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) Z Y X g f) (CategoryTheory.Sieve.downward_closed.{u2, u3} C _inst_1 X S Y Z f hf g)) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y) (Opposite.op.{succ u3} C Z) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y g) (x Y f hf)))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.comp_of_compatible CategoryTheory.Presieve.FamilyOfElements.comp_of_compatibleₓ'. -/
 theorem FamilyOfElements.comp_of_compatible (S : Sieve X) {x : FamilyOfElements P S}
     (t : x.Compatible) {f : Y ⟶ X} (hf : S f) {Z} (g : Z ⟶ Y) :
     x (g ≫ f) (S.downward_closed hf g) = P.map g.op (x f hf) := by
@@ -341,12 +317,6 @@ variable {D : Type u₂} [Category.{v₂} D] (F : D ⥤ C) {Z : D}
 
 variable {T : Presieve (F.obj Z)} {x : FamilyOfElements P T}
 
-/- warning: category_theory.presieve.family_of_elements.functor_pullback -> CategoryTheory.Presieve.FamilyOfElements.functorPullback is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z)}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z) P T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 Z (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z)}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z) P T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 Z (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.functor_pullback CategoryTheory.Presieve.FamilyOfElements.functorPullbackₓ'. -/
 /--
 Given a family of elements of a sieve `S` on `F(X)`, we can realize it as a family of elements of
 `S.functor_pullback F`.
@@ -355,12 +325,6 @@ def FamilyOfElements.functorPullback (x : FamilyOfElements P T) :
     FamilyOfElements (F.op ⋙ P) (T.functorPullback F) := fun Y f hf => x (F.map f) hf
 #align category_theory.presieve.family_of_elements.functor_pullback CategoryTheory.Presieve.FamilyOfElements.functorPullback
 
-/- warning: category_theory.presieve.family_of_elements.compatible.functor_pullback -> CategoryTheory.Presieve.FamilyOfElements.Compatible.functorPullback is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z)} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z) P T}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u4} C _inst_1 P (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z) T x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u3, u5} D _inst_2 (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) Z (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T) (CategoryTheory.Presieve.FamilyOfElements.functorPullback.{u1, u2, u3, u4, u5} C _inst_1 P D _inst_2 F Z T x))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z)} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z) P T}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u4} C _inst_1 P (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z) T x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u3, u5} D _inst_2 (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) Z (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T) (CategoryTheory.Presieve.FamilyOfElements.functorPullback.{u1, u2, u3, u4, u5} C _inst_1 P D _inst_2 F Z T x))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.compatible.functor_pullback CategoryTheory.Presieve.FamilyOfElements.Compatible.functorPullbackₓ'. -/
 theorem FamilyOfElements.Compatible.functorPullback (h : x.Compatible) :
     (x.functorPullback F).Compatible :=
   by
@@ -370,12 +334,6 @@ theorem FamilyOfElements.Compatible.functorPullback (h : x.Compatible) :
 
 end FunctorPullback
 
-/- warning: category_theory.presieve.family_of_elements.functor_pushforward -> CategoryTheory.Presieve.FamilyOfElements.functorPushforward is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {X : D} {T : CategoryTheory.Presieve.{u3, u5} D _inst_2 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 X (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F X) P (CategoryTheory.Presieve.functorPushforward.{u3, u2, u5, u4} D _inst_2 C _inst_1 F X T))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {X : D} {T : CategoryTheory.Presieve.{u3, u5} D _inst_2 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 X (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) X) P (CategoryTheory.Presieve.functorPushforward.{u3, u2, u5, u4} D _inst_2 C _inst_1 F X T))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.functor_pushforward CategoryTheory.Presieve.FamilyOfElements.functorPushforwardₓ'. -/
 /-- Given a family of elements of a sieve `S` on `X` whose values factors through `F`, we can
 realize it as a family of elements of `S.functor_pushforward F`. Since the preimage is obtained by
 choice, this is not well-defined generally.
@@ -446,12 +404,6 @@ theorem FamilyOfElements.Compatible.compPresheafMap (f : P ⟶ Q) {x : FamilyOfE
 #align category_theory.presieve.family_of_elements.compatible.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.Compatible.compPresheafMap
 -/
 
-/- warning: category_theory.presieve.family_of_elements.is_amalgamation -> CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) -> (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) -> Prop
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) -> (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) -> Prop
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.is_amalgamation CategoryTheory.Presieve.FamilyOfElements.IsAmalgamationₓ'. -/
 /--
 The given element `t` of `P.obj (op X)` is an *amalgamation* for the family of elements `x` if every
 restriction `P.map f.op t = x_f` for every arrow `f` in the presieve `R`.
@@ -464,12 +416,6 @@ def FamilyOfElements.IsAmalgamation (x : FamilyOfElements P R) (t : P.obj (op X)
   ∀ ⦃Y : C⦄ (f : Y ⟶ X) (h : R f), P.map f.op t = x f h
 #align category_theory.presieve.family_of_elements.is_amalgamation CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation
 
-/- warning: category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map -> CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {Q : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} {t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)} (f : Quiver.Hom.{succ (max u3 u1), max u2 u1 u3 (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u1, max u2 u1 u3 (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u3 u1, max u2 u1 u3 (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) P Q), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 Q X R (CategoryTheory.Presieve.FamilyOfElements.compPresheafMap.{u1, u2, u3} C _inst_1 P Q X R f x) (CategoryTheory.NatTrans.app.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P Q f (Opposite.op.{succ u3} C X) t))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {Q : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} {t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)} (f : Quiver.Hom.{max (succ u3) (succ u1), max (max u3 u2) (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u1, max (max u3 u2) (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u3 u1, max (max u3 u2) (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) P Q), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 Q X R (CategoryTheory.Presieve.FamilyOfElements.compPresheafMap.{u1, u2, u3} C _inst_1 P Q X R f x) (CategoryTheory.NatTrans.app.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P Q f (Opposite.op.{succ u3} C X) t))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMapₓ'. -/
 theorem FamilyOfElements.IsAmalgamation.compPresheafMap {x : FamilyOfElements P R} {t} (f : P ⟶ Q)
     (h : x.IsAmalgamation t) : (x.compPresheafMap f).IsAmalgamation (f.app (op X) t) :=
   by
@@ -479,12 +425,6 @@ theorem FamilyOfElements.IsAmalgamation.compPresheafMap {x : FamilyOfElements P
   simp [← f.naturality, h g hg]
 #align category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap
 
-/- warning: category_theory.presieve.is_compatible_of_exists_amalgamation -> CategoryTheory.Presieve.is_compatible_of_exists_amalgamation is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (Exists.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) (fun (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (Exists.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) (fun (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_compatible_of_exists_amalgamation CategoryTheory.Presieve.is_compatible_of_exists_amalgamationₓ'. -/
 theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
     (h : ∃ t, x.IsAmalgamation t) : x.Compatible :=
   by
@@ -494,23 +434,11 @@ theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
   simp
 #align category_theory.presieve.is_compatible_of_exists_amalgamation CategoryTheory.Presieve.is_compatible_of_exists_amalgamation
 
-/- warning: category_theory.presieve.is_amalgamation_restrict -> CategoryTheory.Presieve.isAmalgamation_restrict is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toHasLe.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₂ x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x) t)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₂ x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x) t)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_amalgamation_restrict CategoryTheory.Presieve.isAmalgamation_restrictₓ'. -/
 theorem isAmalgamation_restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂) (x : FamilyOfElements P R₂)
     (t : P.obj (op X)) (ht : x.IsAmalgamation t) : (x.restrict h).IsAmalgamation t := fun Y f hf =>
   ht f (h Y hf)
 #align category_theory.presieve.is_amalgamation_restrict CategoryTheory.Presieve.isAmalgamation_restrict
 
-/- warning: category_theory.presieve.is_amalgamation_sieve_extend -> CategoryTheory.Presieve.isAmalgamation_sieveExtend is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.generate.{u2, u3} C _inst_1 X R)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x) t)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X (CategoryTheory.Sieve.generate.{u2, u3} C _inst_1 X R)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x) t)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_amalgamation_sieve_extend CategoryTheory.Presieve.isAmalgamation_sieveExtendₓ'. -/
 theorem isAmalgamation_sieveExtend {R : Presieve X} (x : FamilyOfElements P R) (t : P.obj (op X))
     (ht : x.IsAmalgamation t) : x.sieveExtend.IsAmalgamation t :=
   by
@@ -526,12 +454,6 @@ def IsSeparatedFor (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) : Prop :=
 #align category_theory.presieve.is_separated_for CategoryTheory.Presieve.IsSeparatedFor
 -/
 
-/- warning: category_theory.presieve.is_separated_for.ext -> CategoryTheory.Presieve.IsSeparatedFor.ext is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall {t₁ : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)} {t₂ : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)}, (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y)) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₁) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₂))) -> (Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) t₁ t₂))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall {t₁ : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)} {t₂ : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)}, (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y)) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₁) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₂))) -> (Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) t₁ t₂))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for.ext CategoryTheory.Presieve.IsSeparatedFor.extₓ'. -/
 theorem IsSeparatedFor.ext {R : Presieve X} (hR : IsSeparatedFor P R) {t₁ t₂ : P.obj (op X)}
     (h : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : R f), P.map f.op t₁ = P.map f.op t₂) : t₁ = t₂ :=
   hR (fun Y f hf => P.map f.op t₂) t₁ t₂ (fun Y f hf => h hf) fun Y f hf => rfl
@@ -552,12 +474,6 @@ theorem isSeparatedFor_iff_generate : IsSeparatedFor P R ↔ IsSeparatedFor P (g
 #align category_theory.presieve.is_separated_for_iff_generate CategoryTheory.Presieve.isSeparatedFor_iff_generate
 -/
 
-/- warning: category_theory.presieve.is_separated_for_top -> CategoryTheory.Presieve.isSeparatedFor_top is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P (Top.top.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toHasTop.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X)))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P (Top.top.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toTop.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X)))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for_top CategoryTheory.Presieve.isSeparatedFor_topₓ'. -/
 theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Presieve X) :=
   fun x t₁ t₂ h₁ h₂ => by
   have q₁ := h₁ (𝟙 X) (by simp)
@@ -629,9 +545,6 @@ def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
 #align category_theory.presieve.nat_trans_equiv_compatible_family CategoryTheory.Presieve.natTransEquivCompatibleFamily
 -/
 
-/- warning: category_theory.presieve.extension_iff_amalgamation -> CategoryTheory.Presieve.extension_iff_amalgamation is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamationₓ'. -/
 /-- (Implementation). A lemma useful to prove `yoneda_condition_iff_sheaf_condition`. -/
 theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor ⟶ P) (g : yoneda.obj X ⟶ P) :
     S.functorInclusion ≫ g = x ↔
@@ -673,12 +586,6 @@ theorem isSheafFor_iff_yonedaSheafCondition {P : Cᵒᵖ ⥤ Type v₁} :
 #align category_theory.presieve.is_sheaf_for_iff_yoneda_sheaf_condition CategoryTheory.Presieve.isSheafFor_iff_yonedaSheafCondition
 -/
 
-/- warning: category_theory.presieve.is_sheaf_for.extend -> CategoryTheory.Presieve.IsSheafFor.extend is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) -> (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) -> (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) -> (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) -> (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.extend CategoryTheory.Presieve.IsSheafFor.extendₓ'. -/
 /--
 If `P` is a sheaf for the sieve `S` on `X`, a natural transformation from `S` (viewed as a functor)
 to `P` can be (uniquely) extended to all of `yoneda.obj X`.
@@ -712,18 +619,12 @@ theorem IsSheafFor.functorInclusion_comp_extend {P : Cᵒᵖ ⥤ Type v₁} (h :
 #align category_theory.presieve.is_sheaf_for.functor_inclusion_comp_extend CategoryTheory.Presieve.IsSheafFor.functorInclusion_comp_extend
 -/
 
-/- warning: category_theory.presieve.is_sheaf_for.unique_extend -> CategoryTheory.Presieve.IsSheafFor.unique_extend is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extendₓ'. -/
 /-- The extension of `f` to `yoneda.obj X` is unique. -/
 theorem IsSheafFor.unique_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) {f : S.Functor ⟶ P}
     (t : yoneda.obj X ⟶ P) (ht : S.functorInclusion ≫ t = f) : t = h.extend f :=
   (isSheafFor_iff_yonedaSheafCondition.1 h f).unique ht (h.functorInclusion_comp_extend f)
 #align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extend
 
-/- warning: category_theory.presieve.is_sheaf_for.hom_ext -> CategoryTheory.Presieve.IsSheafFor.hom_ext is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.hom_ext CategoryTheory.Presieve.IsSheafFor.hom_extₓ'. -/
 /--
 If `P` is a sheaf for the sieve `S` on `X`, then if two natural transformations from `yoneda.obj X`
 to `P` agree when restricted to the subfunctor given by `S`, they are equal.
@@ -733,12 +634,6 @@ theorem IsSheafFor.hom_ext {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) (t
   (h.unique_extend t₁ ht).trans (h.unique_extend t₂ rfl).symm
 #align category_theory.presieve.is_sheaf_for.hom_ext CategoryTheory.Presieve.IsSheafFor.hom_ext
 
-/- warning: category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for -> CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, Iff (And (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) (fun (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)))) (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, Iff (And (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) (fun (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)))) (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafForₓ'. -/
 /-- `P` is a sheaf for `R` iff it is separated for `R` and there exists an amalgamation. -/
 theorem isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor :
     (IsSeparatedFor P R ∧ ∀ x : FamilyOfElements P R, x.Compatible → ∃ t, x.IsAmalgamation t) ↔
@@ -756,12 +651,6 @@ theorem isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor :
     exact is_compatible_of_exists_amalgamation x ⟨_, ht₂⟩
 #align category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor
 
-/- warning: category_theory.presieve.is_separated_for.is_sheaf_for -> CategoryTheory.Presieve.IsSeparatedFor.isSheafFor is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) (fun (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) (fun (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for.is_sheaf_for CategoryTheory.Presieve.IsSeparatedFor.isSheafForₓ'. -/
 /-- If `P` is separated for `R` and every family has an amalgamation, then `P` is a sheaf for `R`.
 -/
 theorem IsSeparatedFor.isSheafFor (t : IsSeparatedFor P R) :
@@ -778,12 +667,6 @@ theorem IsSheafFor.isSeparatedFor : IsSheafFor P R → IsSeparatedFor P R := fun
 #align category_theory.presieve.is_sheaf_for.is_separated_for CategoryTheory.Presieve.IsSheafFor.isSeparatedFor
 -/
 
-/- warning: category_theory.presieve.is_sheaf_for.amalgamate -> CategoryTheory.Presieve.IsSheafFor.amalgamate is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.amalgamate CategoryTheory.Presieve.IsSheafFor.amalgamateₓ'. -/
 /-- Get the amalgamation of the given compatible family, provided we have a sheaf. -/
 noncomputable def IsSheafFor.amalgamate (t : IsSheafFor P R) (x : FamilyOfElements P R)
     (hx : x.Compatible) : P.obj (op X) :=
@@ -797,12 +680,6 @@ theorem IsSheafFor.isAmalgamation (t : IsSheafFor P R) {x : FamilyOfElements P R
 #align category_theory.presieve.is_sheaf_for.is_amalgamation CategoryTheory.Presieve.IsSheafFor.isAmalgamation
 -/
 
-/- warning: category_theory.presieve.is_sheaf_for.valid_glue -> CategoryTheory.Presieve.IsSheafFor.valid_glue is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (t : CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} (hx : CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X) (Hf : R Y f), Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y)) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) (CategoryTheory.Presieve.IsSheafFor.amalgamate.{u1, u2, u3} C _inst_1 P X R t x hx)) (x Y f Hf)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (t : CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} (hx : CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X) (Hf : R Y f), Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y)) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) (CategoryTheory.Presieve.IsSheafFor.amalgamate.{u1, u2, u3} C _inst_1 P X R t x hx)) (x Y f Hf)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.valid_glue CategoryTheory.Presieve.IsSheafFor.valid_glueₓ'. -/
 @[simp]
 theorem IsSheafFor.valid_glue (t : IsSheafFor P R) {x : FamilyOfElements P R} (hx : x.Compatible)
     (f : Y ⟶ X) (Hf : R f) : P.map f.op (t.amalgamate x hx) = x f Hf :=
@@ -843,12 +720,6 @@ theorem isSheafFor_singleton_iso (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P (Presie
     simpa using ht _ (presieve.singleton_self _)
 #align category_theory.presieve.is_sheaf_for_singleton_iso CategoryTheory.Presieve.isSheafFor_singletonₓ_iso
 
-/- warning: category_theory.presieve.is_sheaf_for_top_sieve -> CategoryTheory.Presieve.isSheafFor_top_sieve is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) (Top.top.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CompleteLattice.toHasTop.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u2, u3} C _inst_1 X))))
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X (Top.top.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CompleteLattice.toTop.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u2, u3} C _inst_1 X))))
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_top_sieve CategoryTheory.Presieve.isSheafFor_top_sieveₓ'. -/
 /-- Every presheaf is a sheaf for the maximal sieve.
 
 [Elephant] C2.1.5(ii)
@@ -881,12 +752,6 @@ theorem isSheafFor_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') : IsSheafFor P R
 #align category_theory.presieve.is_sheaf_for_iso CategoryTheory.Presieve.isSheafFor_iso
 -/
 
-/- warning: category_theory.presieve.is_sheaf_for_subsieve_aux -> CategoryTheory.Presieve.isSheafFor_subsieve_aux is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toHasLe.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S)) -> (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S)))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) R) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S)) -> (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 Y P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 Y (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S)))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_subsieve_aux CategoryTheory.Presieve.isSheafFor_subsieve_auxₓ'. -/
 /-- If a presieve `R` on `X` has a subsieve `S` such that:
 
 * `P` is a sheaf for `S`.
@@ -916,12 +781,6 @@ theorem isSheafFor_subsieve_aux (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Pres
     simp
 #align category_theory.presieve.is_sheaf_for_subsieve_aux CategoryTheory.Presieve.isSheafFor_subsieve_aux
 
-/- warning: category_theory.presieve.is_sheaf_for_subsieve -> CategoryTheory.Presieve.isSheafFor_subsieve is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toHasLe.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (forall {{Y : C}} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) R) -> (forall {{Y : C}} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 Y P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 Y (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_subsieve CategoryTheory.Presieve.isSheafFor_subsieveₓ'. -/
 /--
 If `P` is a sheaf for every pullback of the sieve `S`, then `P` is a sheaf for any presieve which
 contains `S`.
@@ -1006,12 +865,6 @@ theorem isSheaf_pretopology [HasPullbacks C] (K : Pretopology C) :
 #align category_theory.presieve.is_sheaf_pretopology CategoryTheory.Presieve.isSheaf_pretopology
 -/
 
-/- warning: category_theory.presieve.is_sheaf_bot -> CategoryTheory.Presieve.isSheaf_bot is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, CategoryTheory.Presieve.IsSheaf.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toHasBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u2, u3} C _inst_1))) P
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, CategoryTheory.Presieve.IsSheaf.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u2, u3} C _inst_1))) P
-Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_bot CategoryTheory.Presieve.isSheaf_botₓ'. -/
 /-- Any presheaf is a sheaf for the bottom (trivial) grothendieck topology. -/
 theorem isSheaf_bot : IsSheaf (⊥ : GrothendieckTopology C) P := fun X => by
   simp [is_sheaf_for_top_sieve]
@@ -1055,12 +908,6 @@ def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P
 instance : Inhabited (FirstObj P (⊥ : Presieve X)) :=
   (firstObjEqFamily P _).toEquiv.Inhabited
 
-/- warning: category_theory.equalizer.fork_map -> CategoryTheory.Equalizer.forkMap is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X), Quiver.Hom.{succ (max u1 u2), succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2})) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X), Quiver.Hom.{max (succ u2) (succ u1), max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R)
-Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.fork_map CategoryTheory.Equalizer.forkMapₓ'. -/
 /--
 The left morphism of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram
 of <https://stacks.math.columbia.edu/tag/00VM>.
@@ -1104,12 +951,6 @@ def secondMap : FirstObj P S ⟶ SecondObj P S :=
 #align category_theory.equalizer.sieve.second_map CategoryTheory.Equalizer.Sieve.secondMap
 -/
 
-/- warning: category_theory.equalizer.sieve.w -> CategoryTheory.Equalizer.Sieve.w is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Eq.{succ (max u1 u2)} (Quiver.Hom.{succ (max u1 u2), succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2})) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S))
-Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.sieve.w CategoryTheory.Equalizer.Sieve.wₓ'. -/
 theorem w : forkMap P S ≫ firstMap P S = forkMap P S ≫ secondMap P S :=
   by
   apply limit.hom_ext
@@ -1136,12 +977,6 @@ theorem compatible_iff (x : FirstObj P S) :
 #align category_theory.equalizer.sieve.compatible_iff CategoryTheory.Equalizer.Sieve.compatible_iff
 -/
 
-/- warning: category_theory.equalizer.sieve.equalizer_sheaf_condition -> CategoryTheory.Equalizer.Sieve.equalizer_sheaf_condition is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Iff (CategoryTheory.Presieve.IsSheafFor.{max u1 u2, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (Nonempty.{succ (succ (max u1 u2))} (CategoryTheory.Limits.IsLimit.{0, max u1 u2, 0, succ (max u1 u2)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Limits.parallelPair.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.Limits.Fork.ofι.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.w.{u1, u2} C _inst_1 P X S))))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Iff (CategoryTheory.Presieve.IsSheafFor.{max u2 u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (Nonempty.{max (succ (max (succ u2) (succ u1))) (succ (max u2 u1))} (CategoryTheory.Limits.IsLimit.{0, max u2 u1, 0, max (succ u2) (succ u1)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Limits.parallelPair.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.Limits.Fork.ofι.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.w.{u1, u2} C _inst_1 P X S))))
-Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.sieve.equalizer_sheaf_condition CategoryTheory.Equalizer.Sieve.equalizer_sheaf_conditionₓ'. -/
 /-- `P` is a sheaf for `S`, iff the fork given by `w` is an equalizer. -/
 theorem equalizer_sheaf_condition :
     Presieve.IsSheafFor P S ↔ Nonempty (IsLimit (Fork.ofι _ (w P S))) :=
@@ -1204,12 +1039,6 @@ def secondMap : FirstObj P R ⟶ SecondObj P R :=
 #align category_theory.equalizer.presieve.second_map CategoryTheory.Equalizer.Presieve.secondMap
 -/
 
-/- warning: category_theory.equalizer.presieve.w -> CategoryTheory.Equalizer.Presieve.w is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Eq.{succ (max u1 u2)} (Quiver.Hom.{succ (max u1 u2), succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2})) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2))
-Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.presieve.w CategoryTheory.Equalizer.Presieve.wₓ'. -/
 theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R :=
   by
   apply limit.hom_ext
@@ -1240,12 +1069,6 @@ theorem compatible_iff (x : FirstObj P R) :
 #align category_theory.equalizer.presieve.compatible_iff CategoryTheory.Equalizer.Presieve.compatible_iff
 -/
 
-/- warning: category_theory.equalizer.presieve.sheaf_condition -> CategoryTheory.Equalizer.Presieve.sheaf_condition is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Iff (CategoryTheory.Presieve.IsSheafFor.{max u1 u2, u1, u2} C _inst_1 X P R) (Nonempty.{succ (succ (max u1 u2))} (CategoryTheory.Limits.IsLimit.{0, max u1 u2, 0, succ (max u1 u2)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Limits.parallelPair.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.Limits.Fork.ofι.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.w.{u1, u2} C _inst_1 P X R _inst_2))))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Iff (CategoryTheory.Presieve.IsSheafFor.{max u2 u1, u1, u2} C _inst_1 X P R) (Nonempty.{max (succ (max (succ u2) (succ u1))) (succ (max u2 u1))} (CategoryTheory.Limits.IsLimit.{0, max u2 u1, 0, max (succ u2) (succ u1)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Limits.parallelPair.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.Limits.Fork.ofι.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.w.{u1, u2} C _inst_1 P X R _inst_2))))
-Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.presieve.sheaf_condition CategoryTheory.Equalizer.Presieve.sheaf_conditionₓ'. -/
 /-- `P` is a sheaf for `R`, iff the fork given by `w` is an equalizer.
 See <https://stacks.math.columbia.edu/tag/00VM>.
 -/
@@ -1327,12 +1150,6 @@ instance : Full (sheafOfTypesToPresheaf J) where Preimage X Y f := ⟨f⟩
 
 instance : Faithful (sheafOfTypesToPresheaf J) where
 
-/- warning: category_theory.SheafOfTypes_bot_equiv -> CategoryTheory.sheafOfTypesBotEquiv is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C], CategoryTheory.Equivalence.{max u1 u3, max u3 u1, max u3 u2 (succ u1), max u2 u1 u3 (succ u1)} (CategoryTheory.SheafOfTypes.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toHasBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u2, u3} C _inst_1)))) (CategoryTheory.SheafOfTypes.CategoryTheory.category.{u2, u3, u1} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toHasBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u2, u3} C _inst_1)))) (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1})
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C], CategoryTheory.Equivalence.{max u3 u1, max u3 u1, max (max u3 u2) (succ u1), max (max (max (succ u1) u3) u1) u2} (CategoryTheory.SheafOfTypes.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u2, u3} C _inst_1)))) (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.SheafOfTypes.instCategorySheafOfTypes.{u2, u3, u1} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u2, u3} C _inst_1)))) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1})
-Case conversion may be inaccurate. Consider using '#align category_theory.SheafOfTypes_bot_equiv CategoryTheory.sheafOfTypesBotEquivₓ'. -/
 /--
 The category of sheaves on the bottom (trivial) grothendieck topology is equivalent to the category
 of presheaves.
Diff
@@ -234,9 +234,7 @@ theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X
   have h := (le_generate R Y hf).choose_spec
   unfold family_of_elements.sieve_extend
   rw [t h.some (𝟙 _) _ hf _]
-  · simp;
-  · rw [id_comp]
-    exact h.some_spec.some_spec.2
+  · simp; · rw [id_comp]; exact h.some_spec.some_spec.2
 #align category_theory.presieve.extend_agrees CategoryTheory.Presieve.extend_agrees
 
 #print CategoryTheory.Presieve.restrict_extend /-
@@ -305,10 +303,7 @@ equal when restricted to `R`.
 -/
 theorem restrict_inj {x₁ x₂ : FamilyOfElements P (generate R)} (t₁ : x₁.Compatible)
     (t₂ : x₂.Compatible) : x₁.restrict (le_generate R) = x₂.restrict (le_generate R) → x₁ = x₂ :=
-  fun h => by
-  rw [← extend_restrict t₁, ← extend_restrict t₂]
-  congr
-  exact h
+  fun h => by rw [← extend_restrict t₁, ← extend_restrict t₂]; congr ; exact h
 #align category_theory.presieve.restrict_inj CategoryTheory.Presieve.restrict_inj
 -/
 
@@ -387,10 +382,8 @@ choice, this is not well-defined generally.
 -/
 noncomputable def FamilyOfElements.functorPushforward {D : Type u₂} [Category.{v₂} D] (F : D ⥤ C)
     {X : D} {T : Presieve X} (x : FamilyOfElements (F.op ⋙ P) T) :
-    FamilyOfElements P (T.functorPushforward F) := fun Y f h =>
-  by
-  obtain ⟨Z, g, h, h₁, _⟩ := get_functor_pushforward_structure h
-  exact P.map h.op (x g h₁)
+    FamilyOfElements P (T.functorPushforward F) := fun Y f h => by
+  obtain ⟨Z, g, h, h₁, _⟩ := get_functor_pushforward_structure h; exact P.map h.op (x g h₁)
 #align category_theory.presieve.family_of_elements.functor_pushforward CategoryTheory.Presieve.FamilyOfElements.functorPushforward
 
 section Pullback
@@ -755,8 +748,7 @@ theorem isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor :
   apply forall_congr'
   intro x
   constructor
-  · intro z hx
-    exact existsUnique_of_exists_of_unique (z.2 hx) z.1
+  · intro z hx; exact existsUnique_of_exists_of_unique (z.2 hx) z.1
   · intro h
     refine' ⟨_, ExistsUnique.exists ∘ h⟩
     intro t₁ t₂ ht₁ ht₂
Diff
@@ -637,10 +637,7 @@ def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
 -/
 
 /- warning: category_theory.presieve.extension_iff_amalgamation -> CategoryTheory.Presieve.extension_iff_amalgamation is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (x : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (g : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P), Iff (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) g) x) (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) (Subtype.val.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x) (coeFn.{max 1 (max (succ (max u2 u1)) 1 (succ u2) (succ u1)) (max 1 (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) 1 (succ u2) (succ u1)} (Equiv.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (fun (_x : Equiv.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) => (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) -> (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (Equiv.hasCoeToFun.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (CategoryTheory.Presieve.natTransEquivCompatibleFamily.{u1, u2} C _inst_1 X S P) x)) (coeFn.{max 1 (max (succ (max u2 u1)) (succ u1)) (succ u1) (succ (max u2 u1)), max (succ (max u2 u1)) (succ u1)} (Equiv.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (fun (_x : Equiv.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) => (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) -> (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (Equiv.hasCoeToFun.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (CategoryTheory.yonedaEquiv.{u1, u2} C _inst_1 X P) g))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (g : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), Iff (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) g) x) (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) (Subtype.val.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (CategoryTheory.Presieve.natTransEquivCompatibleFamily.{u1, u2} C _inst_1 X S P) x)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (Equiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (CategoryTheory.yonedaEquiv.{u1, u2} C _inst_1 X P) g))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamationₓ'. -/
 /-- (Implementation). A lemma useful to prove `yoneda_condition_iff_sheaf_condition`. -/
 theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor ⟶ P) (g : yoneda.obj X ⟶ P) :
@@ -723,10 +720,7 @@ theorem IsSheafFor.functorInclusion_comp_extend {P : Cᵒᵖ ⥤ Type v₁} (h :
 -/
 
 /- warning: category_theory.presieve.is_sheaf_for.unique_extend -> CategoryTheory.Presieve.IsSheafFor.unique_extend is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (h : CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) {f : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P} (t : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P), (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t) f) -> (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) t (CategoryTheory.Presieve.IsSheafFor.extend.{u1, u2} C _inst_1 X S P h f))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (h : CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) {f : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P} (t : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t) f) -> (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) t (CategoryTheory.Presieve.IsSheafFor.extend.{u1, u2} C _inst_1 X S P h f))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extendₓ'. -/
 /-- The extension of `f` to `yoneda.obj X` is unique. -/
 theorem IsSheafFor.unique_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) {f : S.Functor ⟶ P}
@@ -735,10 +729,7 @@ theorem IsSheafFor.unique_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S
 #align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extend
 
 /- warning: category_theory.presieve.is_sheaf_for.hom_ext -> CategoryTheory.Presieve.IsSheafFor.hom_ext is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) -> (forall (t₁ : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (t₂ : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P), (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₁) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₂)) -> (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) t₁ t₂))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) -> (forall (t₁ : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (t₂ : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₁) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₂)) -> (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) t₁ t₂))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.hom_ext CategoryTheory.Presieve.IsSheafFor.hom_extₓ'. -/
 /--
 If `P` is a sheaf for the sieve `S` on `X`, then if two natural transformations from `yoneda.obj X`
Diff
@@ -715,7 +715,7 @@ that the triangle below commutes, provided `P` is a sheaf for `S`
    yX
 
 -/
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem IsSheafFor.functorInclusion_comp_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S)
     (f : S.Functor ⟶ P) : S.functorInclusion ≫ h.extend f = f :=
   (isSheafFor_iff_yonedaSheafCondition.1 h f).exists.choose_spec
Diff
@@ -640,7 +640,7 @@ def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
 lean 3 declaration is
   forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (x : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (g : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P), Iff (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) g) x) (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) (Subtype.val.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x) (coeFn.{max 1 (max (succ (max u2 u1)) 1 (succ u2) (succ u1)) (max 1 (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) 1 (succ u2) (succ u1)} (Equiv.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (fun (_x : Equiv.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) => (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) -> (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (Equiv.hasCoeToFun.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (CategoryTheory.Presieve.natTransEquivCompatibleFamily.{u1, u2} C _inst_1 X S P) x)) (coeFn.{max 1 (max (succ (max u2 u1)) (succ u1)) (succ u1) (succ (max u2 u1)), max (succ (max u2 u1)) (succ u1)} (Equiv.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (fun (_x : Equiv.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) => (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) -> (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (Equiv.hasCoeToFun.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (CategoryTheory.yonedaEquiv.{u1, u2} C _inst_1 X P) g))
 but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (g : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), Iff (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) g) x) (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) (Subtype.val.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (CategoryTheory.Presieve.natTransEquivCompatibleFamily.{u1, u2} C _inst_1 X S P) x)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (Equiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (CategoryTheory.yonedaEquiv.{u1, u2} C _inst_1 X P) g))
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (g : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), Iff (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) g) x) (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) (Subtype.val.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (CategoryTheory.Presieve.natTransEquivCompatibleFamily.{u1, u2} C _inst_1 X S P) x)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (Equiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (CategoryTheory.yonedaEquiv.{u1, u2} C _inst_1 X P) g))
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamationₓ'. -/
 /-- (Implementation). A lemma useful to prove `yoneda_condition_iff_sheaf_condition`. -/
 theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor ⟶ P) (g : yoneda.obj X ⟶ P) :
Diff
@@ -128,7 +128,7 @@ instance : Inhabited (FamilyOfElements P (⊥ : Presieve X)) :=
 
 /- warning: category_theory.presieve.family_of_elements.restrict -> CategoryTheory.Presieve.FamilyOfElements.restrict is a dubious translation:
 lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₁)
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toHasLe.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₁)
 but is expected to have type
   forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₁)
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.restrict CategoryTheory.Presieve.FamilyOfElements.restrictₓ'. -/
@@ -191,7 +191,7 @@ theorem pullbackCompatible_iff (x : FamilyOfElements P R) [HasPullbacks C] :
 
 /- warning: category_theory.presieve.family_of_elements.compatible.restrict -> CategoryTheory.Presieve.FamilyOfElements.Compatible.restrict is a dubious translation:
 lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₂ x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x))
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toHasLe.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₂ x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x))
 but is expected to have type
   forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₂ x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x))
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.compatible.restrict CategoryTheory.Presieve.FamilyOfElements.Compatible.restrictₓ'. -/
@@ -503,7 +503,7 @@ theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
 
 /- warning: category_theory.presieve.is_amalgamation_restrict -> CategoryTheory.Presieve.isAmalgamation_restrict is a dubious translation:
 lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₂ x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x) t)
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toHasLe.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₂ x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x) t)
 but is expected to have type
   forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₂ x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x) t)
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_amalgamation_restrict CategoryTheory.Presieve.isAmalgamation_restrictₓ'. -/
@@ -900,7 +900,7 @@ theorem isSheafFor_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') : IsSheafFor P R
 
 /- warning: category_theory.presieve.is_sheaf_for_subsieve_aux -> CategoryTheory.Presieve.isSheafFor_subsieve_aux is a dubious translation:
 lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toLE.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S)) -> (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S)))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toHasLe.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S)) -> (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S)))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
 but is expected to have type
   forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) R) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S)) -> (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 Y P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 Y (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S)))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_subsieve_aux CategoryTheory.Presieve.isSheafFor_subsieve_auxₓ'. -/
@@ -935,7 +935,7 @@ theorem isSheafFor_subsieve_aux (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Pres
 
 /- warning: category_theory.presieve.is_sheaf_for_subsieve -> CategoryTheory.Presieve.isSheafFor_subsieve is a dubious translation:
 lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toLE.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (forall {{Y : C}} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toHasLe.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (forall {{Y : C}} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
 but is expected to have type
   forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) R) -> (forall {{Y : C}} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 Y P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 Y (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
 Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_subsieve CategoryTheory.Presieve.isSheafFor_subsieveₓ'. -/
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Bhavik Mehta
 
 ! This file was ported from Lean 3 source module category_theory.sites.sheaf_of_types
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit d64d67d000b974f0d86a2be7918cf800be6271c8
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.CategoryTheory.Limits.Shapes.Types
 /-!
 # Sheaves of types on a Grothendieck topology
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 Defines the notion of a sheaf of types (usually called a sheaf of sets by mathematicians)
 on a category equipped with a Grothendieck topology, as well as a range of equivalent
 conditions useful in different situations.
Diff
@@ -105,6 +105,7 @@ variable {X Y : C} {S : Sieve X} {R : Presieve X}
 
 variable (J J₂ : GrothendieckTopology C)
 
+#print CategoryTheory.Presieve.FamilyOfElements /-
 /-- A family of elements for a presheaf `P` given a collection of arrows `R` with fixed codomain `X`
 consists of an element of `P Y` for every `f : Y ⟶ X` in `R`.
 A presheaf is a sheaf (resp, separated) if every *compatible* family of elements has exactly one
@@ -117,10 +118,17 @@ more useful for direct calculations. It is also used implicitly in Definition C2
 def FamilyOfElements (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) :=
   ∀ ⦃Y : C⦄ (f : Y ⟶ X), R f → P.obj (op Y)
 #align category_theory.presieve.family_of_elements CategoryTheory.Presieve.FamilyOfElements
+-/
 
 instance : Inhabited (FamilyOfElements P (⊥ : Presieve X)) :=
   ⟨fun Y f => False.elim⟩
 
+/- warning: category_theory.presieve.family_of_elements.restrict -> CategoryTheory.Presieve.FamilyOfElements.restrict is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₁)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₁)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.restrict CategoryTheory.Presieve.FamilyOfElements.restrictₓ'. -/
 /-- A family of elements for a presheaf on the presieve `R₂` can be restricted to a smaller presieve
 `R₁`.
 -/
@@ -128,6 +136,7 @@ def FamilyOfElements.restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂) :
     FamilyOfElements P R₂ → FamilyOfElements P R₁ := fun x Y f hf => x f (h _ hf)
 #align category_theory.presieve.family_of_elements.restrict CategoryTheory.Presieve.FamilyOfElements.restrict
 
+#print CategoryTheory.Presieve.FamilyOfElements.Compatible /-
 /-- A family of elements for the arrow set `R` is *compatible* if for any `f₁ : Y₁ ⟶ X` and
 `f₂ : Y₂ ⟶ X` in `R`, and any `g₁ : Z ⟶ Y₁` and `g₂ : Z ⟶ Y₂`, if the square `g₁ ≫ f₁ = g₂ ≫ f₂`
 commutes then the elements of `P Z` obtained by restricting the element of `P Y₁` along `g₁` and
@@ -143,7 +152,9 @@ def FamilyOfElements.Compatible (x : FamilyOfElements P R) : Prop :=
   ∀ ⦃Y₁ Y₂ Z⦄ (g₁ : Z ⟶ Y₁) (g₂ : Z ⟶ Y₂) ⦃f₁ : Y₁ ⟶ X⦄ ⦃f₂ : Y₂ ⟶ X⦄ (h₁ : R f₁) (h₂ : R f₂),
     g₁ ≫ f₁ = g₂ ≫ f₂ → P.map g₁.op (x f₁ h₁) = P.map g₂.op (x f₂ h₂)
 #align category_theory.presieve.family_of_elements.compatible CategoryTheory.Presieve.FamilyOfElements.Compatible
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.PullbackCompatible /-
 /--
 If the category `C` has pullbacks, this is an alternative condition for a family of elements to be
 compatible: For any `f : Y ⟶ X` and `g : Z ⟶ X` in the presieve `R`, the restriction of the
@@ -160,7 +171,9 @@ def FamilyOfElements.PullbackCompatible (x : FamilyOfElements P R) [HasPullbacks
   ∀ ⦃Y₁ Y₂⦄ ⦃f₁ : Y₁ ⟶ X⦄ ⦃f₂ : Y₂ ⟶ X⦄ (h₁ : R f₁) (h₂ : R f₂),
     P.map (pullback.fst : pullback f₁ f₂ ⟶ _).op (x f₁ h₁) = P.map pullback.snd.op (x f₂ h₂)
 #align category_theory.presieve.family_of_elements.pullback_compatible CategoryTheory.Presieve.FamilyOfElements.PullbackCompatible
+-/
 
+#print CategoryTheory.Presieve.pullbackCompatible_iff /-
 theorem pullbackCompatible_iff (x : FamilyOfElements P R) [HasPullbacks C] :
     x.Compatible ↔ x.PullbackCompatible := by
   constructor
@@ -171,13 +184,21 @@ theorem pullbackCompatible_iff (x : FamilyOfElements P R) [HasPullbacks C] :
     rw [← pullback.lift_fst _ _ comm, op_comp, functor_to_types.map_comp_apply, t hf₁ hf₂, ←
       functor_to_types.map_comp_apply, ← op_comp, pullback.lift_snd]
 #align category_theory.presieve.pullback_compatible_iff CategoryTheory.Presieve.pullbackCompatible_iff
+-/
 
+/- warning: category_theory.presieve.family_of_elements.compatible.restrict -> CategoryTheory.Presieve.FamilyOfElements.Compatible.restrict is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₂ x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₂ x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.compatible.restrict CategoryTheory.Presieve.FamilyOfElements.Compatible.restrictₓ'. -/
 /-- The restriction of a compatible family is compatible. -/
 theorem FamilyOfElements.Compatible.restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂)
     {x : FamilyOfElements P R₂} : x.Compatible → (x.restrict h).Compatible :=
   fun q Y₁ Y₂ Z g₁ g₂ f₁ f₂ h₁ h₂ comm => q g₁ g₂ (h _ h₁) (h _ h₂) comm
 #align category_theory.presieve.family_of_elements.compatible.restrict CategoryTheory.Presieve.FamilyOfElements.Compatible.restrict
 
+#print CategoryTheory.Presieve.FamilyOfElements.sieveExtend /-
 /-- Extend a family of elements to the sieve generated by an arrow set.
 This is the construction described as "easy" in Lemma C2.1.3 of [Elephant].
 -/
@@ -185,7 +206,9 @@ noncomputable def FamilyOfElements.sieveExtend (x : FamilyOfElements P R) :
     FamilyOfElements P (generate R) := fun Z f hf =>
   P.map hf.choose_spec.some.op (x _ hf.choose_spec.choose_spec.choose_spec.1)
 #align category_theory.presieve.family_of_elements.sieve_extend CategoryTheory.Presieve.FamilyOfElements.sieveExtend
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.Compatible.sieveExtend /-
 /-- The extension of a compatible family to the generated sieve is compatible. -/
 theorem FamilyOfElements.Compatible.sieveExtend {x : FamilyOfElements P R} (hx : x.Compatible) :
     x.sieveExtend.Compatible := by
@@ -193,7 +216,14 @@ theorem FamilyOfElements.Compatible.sieveExtend {x : FamilyOfElements P R} (hx :
   iterate 2 erw [← functor_to_types.map_comp_apply]; rw [← op_comp]; apply hx
   simp [comm, h₁.some_spec.some_spec.some_spec.2, h₂.some_spec.some_spec.some_spec.2]
 #align category_theory.presieve.family_of_elements.compatible.sieve_extend CategoryTheory.Presieve.FamilyOfElements.Compatible.sieveExtend
+-/
 
+/- warning: category_theory.presieve.extend_agrees -> CategoryTheory.Presieve.extend_agrees is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : R Y f), Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x Y f (CategoryTheory.Sieve.le_generate.{u2, u3} C _inst_1 X R Y f hf)) (x Y f hf))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : R Y f), Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x Y f (CategoryTheory.Sieve.le_generate.{u2, u3} C _inst_1 X R Y f hf)) (x Y f hf))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.extend_agrees CategoryTheory.Presieve.extend_agreesₓ'. -/
 /-- The extension of a family agrees with the original family. -/
 theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X} (hf : R f) :
     x.sieveExtend f (le_generate R Y hf) = x f hf :=
@@ -206,6 +236,7 @@ theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X
     exact h.some_spec.some_spec.2
 #align category_theory.presieve.extend_agrees CategoryTheory.Presieve.extend_agrees
 
+#print CategoryTheory.Presieve.restrict_extend /-
 /-- The restriction of an extension is the original. -/
 @[simp]
 theorem restrict_extend {x : FamilyOfElements P R} (t : x.Compatible) :
@@ -214,7 +245,9 @@ theorem restrict_extend {x : FamilyOfElements P R} (t : x.Compatible) :
   ext (Y f hf)
   exact extend_agrees t hf
 #align category_theory.presieve.restrict_extend CategoryTheory.Presieve.restrict_extend
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.SieveCompatible /-
 /--
 If the arrow set for a family of elements is actually a sieve (i.e. it is downward closed) then the
 consistency condition can be simplified.
@@ -227,7 +260,9 @@ See also the discussion before Lemma C2.1.4 of [Elephant].
 def FamilyOfElements.SieveCompatible (x : FamilyOfElements P S) : Prop :=
   ∀ ⦃Y Z⦄ (f : Y ⟶ X) (g : Z ⟶ Y) (hf), x (g ≫ f) (S.downward_closed hf g) = P.map g.op (x f hf)
 #align category_theory.presieve.family_of_elements.sieve_compatible CategoryTheory.Presieve.FamilyOfElements.SieveCompatible
+-/
 
+#print CategoryTheory.Presieve.compatible_iff_sieveCompatible /-
 theorem compatible_iff_sieveCompatible (x : FamilyOfElements P S) :
     x.Compatible ↔ x.SieveCompatible := by
   constructor
@@ -236,12 +271,16 @@ theorem compatible_iff_sieveCompatible (x : FamilyOfElements P S) :
   · intro h Y₁ Y₂ Z g₁ g₂ f₁ f₂ h₁ h₂ k
     simp_rw [← h f₁ g₁ h₁, k, h f₂ g₂ h₂]
 #align category_theory.presieve.compatible_iff_sieve_compatible CategoryTheory.Presieve.compatible_iff_sieveCompatible
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.Compatible.to_sieveCompatible /-
 theorem FamilyOfElements.Compatible.to_sieveCompatible {x : FamilyOfElements P S}
     (t : x.Compatible) : x.SieveCompatible :=
   (compatible_iff_sieveCompatible x).1 t
 #align category_theory.presieve.family_of_elements.compatible.to_sieve_compatible CategoryTheory.Presieve.FamilyOfElements.Compatible.to_sieveCompatible
+-/
 
+#print CategoryTheory.Presieve.extend_restrict /-
 /--
 Given a family of elements `x` for the sieve `S` generated by a presieve `R`, if `x` is restricted
 to `R` and then extended back up to `S`, the resulting extension equals `x`.
@@ -254,7 +293,9 @@ theorem extend_restrict {x : FamilyOfElements P (generate R)} (t : x.Compatible)
   ext (_ _ h); apply (t _ _ _).symm.trans; congr
   exact h.some_spec.some_spec.some_spec.2
 #align category_theory.presieve.extend_restrict CategoryTheory.Presieve.extend_restrict
+-/
 
+#print CategoryTheory.Presieve.restrict_inj /-
 /--
 Two compatible families on the sieve generated by a presieve `R` are equal if and only if they are
 equal when restricted to `R`.
@@ -266,7 +307,9 @@ theorem restrict_inj {x₁ x₂ : FamilyOfElements P (generate R)} (t₁ : x₁.
   congr
   exact h
 #align category_theory.presieve.restrict_inj CategoryTheory.Presieve.restrict_inj
+-/
 
+#print CategoryTheory.Presieve.compatibleEquivGenerateSieveCompatible /-
 /-- Compatible families of elements for a presheaf of types `P` and a presieve `R`
     are in 1-1 correspondence with compatible families for the same presheaf and
     the sieve generated by `R`, through extension and restriction. -/
@@ -280,7 +323,14 @@ noncomputable def compatibleEquivGenerateSieveCompatible :
   left_inv x := Subtype.ext (restrict_extend x.2)
   right_inv x := Subtype.ext (extend_restrict x.2)
 #align category_theory.presieve.compatible_equiv_generate_sieve_compatible CategoryTheory.Presieve.compatibleEquivGenerateSieveCompatible
+-/
 
+/- warning: category_theory.presieve.family_of_elements.comp_of_compatible -> CategoryTheory.Presieve.FamilyOfElements.comp_of_compatible is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} (S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S)}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S Y f) {Z : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y), Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Z)) (x Z (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) Z Y X g f) (CategoryTheory.Sieve.downward_closed.{u2, u3} C _inst_1 X Y Z S f hf g)) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y) (Opposite.op.{succ u3} C Z) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y g) (x Y f hf)))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} (S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S)}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) x) -> (forall {f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X} (hf : CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S Y f) {Z : C} (g : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y), Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Z)) (x Z (CategoryTheory.CategoryStruct.comp.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1) Z Y X g f) (CategoryTheory.Sieve.downward_closed.{u2, u3} C _inst_1 X S Y Z f hf g)) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y) (Opposite.op.{succ u3} C Z) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Z Y g) (x Y f hf)))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.comp_of_compatible CategoryTheory.Presieve.FamilyOfElements.comp_of_compatibleₓ'. -/
 theorem FamilyOfElements.comp_of_compatible (S : Sieve X) {x : FamilyOfElements P S}
     (t : x.Compatible) {f : Y ⟶ X} (hf : S f) {Z} (g : Z ⟶ Y) :
     x (g ≫ f) (S.downward_closed hf g) = P.map g.op (x f hf) := by
@@ -293,6 +343,12 @@ variable {D : Type u₂} [Category.{v₂} D] (F : D ⥤ C) {Z : D}
 
 variable {T : Presieve (F.obj Z)} {x : FamilyOfElements P T}
 
+/- warning: category_theory.presieve.family_of_elements.functor_pullback -> CategoryTheory.Presieve.FamilyOfElements.functorPullback is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z)}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z) P T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 Z (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z)}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z) P T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 Z (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.functor_pullback CategoryTheory.Presieve.FamilyOfElements.functorPullbackₓ'. -/
 /--
 Given a family of elements of a sieve `S` on `F(X)`, we can realize it as a family of elements of
 `S.functor_pullback F`.
@@ -301,6 +357,12 @@ def FamilyOfElements.functorPullback (x : FamilyOfElements P T) :
     FamilyOfElements (F.op ⋙ P) (T.functorPullback F) := fun Y f hf => x (F.map f) hf
 #align category_theory.presieve.family_of_elements.functor_pullback CategoryTheory.Presieve.FamilyOfElements.functorPullback
 
+/- warning: category_theory.presieve.family_of_elements.compatible.functor_pullback -> CategoryTheory.Presieve.FamilyOfElements.Compatible.functorPullback is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z)} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z) P T}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u4} C _inst_1 P (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z) T x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u3, u5} D _inst_2 (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) Z (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T) (CategoryTheory.Presieve.FamilyOfElements.functorPullback.{u1, u2, u3, u4, u5} C _inst_1 P D _inst_2 F Z T x))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {Z : D} {T : CategoryTheory.Presieve.{u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z)} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z) P T}, (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u4} C _inst_1 P (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) Z) T x) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u3, u5} D _inst_2 (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) Z (CategoryTheory.Presieve.functorPullback.{u3, u2, u5, u4} D _inst_2 C _inst_1 F Z T) (CategoryTheory.Presieve.FamilyOfElements.functorPullback.{u1, u2, u3, u4, u5} C _inst_1 P D _inst_2 F Z T x))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.compatible.functor_pullback CategoryTheory.Presieve.FamilyOfElements.Compatible.functorPullbackₓ'. -/
 theorem FamilyOfElements.Compatible.functorPullback (h : x.Compatible) :
     (x.functorPullback F).Compatible :=
   by
@@ -310,6 +372,12 @@ theorem FamilyOfElements.Compatible.functorPullback (h : x.Compatible) :
 
 end FunctorPullback
 
+/- warning: category_theory.presieve.family_of_elements.functor_pushforward -> CategoryTheory.Presieve.FamilyOfElements.functorPushforward is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {X : D} {T : CategoryTheory.Presieve.{u3, u5} D _inst_2 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 X (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (CategoryTheory.Functor.obj.{u3, u2, u5, u4} D _inst_2 C _inst_1 F X) P (CategoryTheory.Presieve.functorPushforward.{u3, u2, u5, u4} D _inst_2 C _inst_1 F X T))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u2, u4} C] {P : CategoryTheory.Functor.{u2, u1, u4, succ u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {D : Type.{u5}} [_inst_2 : CategoryTheory.Category.{u3, u5} D] (F : CategoryTheory.Functor.{u3, u2, u5, u4} D _inst_2 C _inst_1) {X : D} {T : CategoryTheory.Presieve.{u3, u5} D _inst_2 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u3, u5} D _inst_2 X (CategoryTheory.Functor.comp.{u3, u2, u1, u5, u4, succ u1} (Opposite.{succ u5} D) (CategoryTheory.Category.opposite.{u3, u5} D _inst_2) (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u2, u4} C _inst_1) Type.{u1} CategoryTheory.types.{u1} (CategoryTheory.Functor.op.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) P) T) -> (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u4} C _inst_1 (Prefunctor.obj.{succ u3, succ u2, u5, u4} D (CategoryTheory.CategoryStruct.toQuiver.{u3, u5} D (CategoryTheory.Category.toCategoryStruct.{u3, u5} D _inst_2)) C (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} C (CategoryTheory.Category.toCategoryStruct.{u2, u4} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u5, u4} D _inst_2 C _inst_1 F) X) P (CategoryTheory.Presieve.functorPushforward.{u3, u2, u5, u4} D _inst_2 C _inst_1 F X T))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.functor_pushforward CategoryTheory.Presieve.FamilyOfElements.functorPushforwardₓ'. -/
 /-- Given a family of elements of a sieve `S` on `X` whose values factors through `F`, we can
 realize it as a family of elements of `S.functor_pushforward F`. Since the preimage is obtained by
 choice, this is not well-defined generally.
@@ -324,13 +392,16 @@ noncomputable def FamilyOfElements.functorPushforward {D : Type u₂} [Category.
 
 section Pullback
 
+#print CategoryTheory.Presieve.FamilyOfElements.pullback /-
 /-- Given a family of elements of a sieve `S` on `X`, and a map `Y ⟶ X`, we can obtain a
 family of elements of `S.pullback f` by taking the same elements.
 -/
 def FamilyOfElements.pullback (f : Y ⟶ X) (x : FamilyOfElements P S) :
     FamilyOfElements P (S.pullback f) := fun _ g hg => x (g ≫ f) hg
 #align category_theory.presieve.family_of_elements.pullback CategoryTheory.Presieve.FamilyOfElements.pullback
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.Compatible.pullback /-
 theorem FamilyOfElements.Compatible.pullback (f : Y ⟶ X) {x : FamilyOfElements P S}
     (h : x.Compatible) : (x.pullback f).Compatible :=
   by
@@ -340,28 +411,36 @@ theorem FamilyOfElements.Compatible.pullback (f : Y ⟶ X) {x : FamilyOfElements
   rw [← h (f₁ ≫ f) f₂ hf]
   simp only [assoc]
 #align category_theory.presieve.family_of_elements.compatible.pullback CategoryTheory.Presieve.FamilyOfElements.Compatible.pullback
+-/
 
 end Pullback
 
+#print CategoryTheory.Presieve.FamilyOfElements.compPresheafMap /-
 /-- Given a morphism of presheaves `f : P ⟶ Q`, we can take a family of elements valued in `P` to a
 family of elements valued in `Q` by composing with `f`.
 -/
 def FamilyOfElements.compPresheafMap (f : P ⟶ Q) (x : FamilyOfElements P R) :
     FamilyOfElements Q R := fun Y g hg => f.app (op Y) (x g hg)
 #align category_theory.presieve.family_of_elements.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.compPresheafMap
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.compPresheafMap_id /-
 @[simp]
 theorem FamilyOfElements.compPresheafMap_id (x : FamilyOfElements P R) :
     x.compPresheafMap (𝟙 P) = x :=
   rfl
 #align category_theory.presieve.family_of_elements.comp_presheaf_map_id CategoryTheory.Presieve.FamilyOfElements.compPresheafMap_id
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.compPresheafMap_comp /-
 @[simp]
-theorem FamilyOfElements.comp_prersheaf_map_comp (x : FamilyOfElements P R) (f : P ⟶ Q)
-    (g : Q ⟶ U) : (x.compPresheafMap f).compPresheafMap g = x.compPresheafMap (f ≫ g) :=
+theorem FamilyOfElements.compPresheafMap_comp (x : FamilyOfElements P R) (f : P ⟶ Q) (g : Q ⟶ U) :
+    (x.compPresheafMap f).compPresheafMap g = x.compPresheafMap (f ≫ g) :=
   rfl
-#align category_theory.presieve.family_of_elements.comp_prersheaf_map_comp CategoryTheory.Presieve.FamilyOfElements.comp_prersheaf_map_comp
+#align category_theory.presieve.family_of_elements.comp_prersheaf_map_comp CategoryTheory.Presieve.FamilyOfElements.compPresheafMap_comp
+-/
 
+#print CategoryTheory.Presieve.FamilyOfElements.Compatible.compPresheafMap /-
 theorem FamilyOfElements.Compatible.compPresheafMap (f : P ⟶ Q) {x : FamilyOfElements P R}
     (h : x.Compatible) : (x.compPresheafMap f).Compatible :=
   by
@@ -369,7 +448,14 @@ theorem FamilyOfElements.Compatible.compPresheafMap (f : P ⟶ Q) {x : FamilyOfE
   unfold family_of_elements.comp_presheaf_map
   rwa [← functor_to_types.naturality, ← functor_to_types.naturality, h]
 #align category_theory.presieve.family_of_elements.compatible.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.Compatible.compPresheafMap
+-/
 
+/- warning: category_theory.presieve.family_of_elements.is_amalgamation -> CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) -> (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) -> Prop
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) -> (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) -> Prop
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.is_amalgamation CategoryTheory.Presieve.FamilyOfElements.IsAmalgamationₓ'. -/
 /--
 The given element `t` of `P.obj (op X)` is an *amalgamation* for the family of elements `x` if every
 restriction `P.map f.op t = x_f` for every arrow `f` in the presieve `R`.
@@ -382,6 +468,12 @@ def FamilyOfElements.IsAmalgamation (x : FamilyOfElements P R) (t : P.obj (op X)
   ∀ ⦃Y : C⦄ (f : Y ⟶ X) (h : R f), P.map f.op t = x f h
 #align category_theory.presieve.family_of_elements.is_amalgamation CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation
 
+/- warning: category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map -> CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {Q : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} {t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)} (f : Quiver.Hom.{succ (max u3 u1), max u2 u1 u3 (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u1, max u2 u1 u3 (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u3 u1, max u2 u1 u3 (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) P Q), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 Q X R (CategoryTheory.Presieve.FamilyOfElements.compPresheafMap.{u1, u2, u3} C _inst_1 P Q X R f x) (CategoryTheory.NatTrans.app.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P Q f (Opposite.op.{succ u3} C X) t))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {Q : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} {t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)} (f : Quiver.Hom.{max (succ u3) (succ u1), max (max u3 u2) (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u1, max (max u3 u2) (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u3 u1, max (max u3 u2) (succ u1)} (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) P Q), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 Q X R (CategoryTheory.Presieve.FamilyOfElements.compPresheafMap.{u1, u2, u3} C _inst_1 P Q X R f x) (CategoryTheory.NatTrans.app.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P Q f (Opposite.op.{succ u3} C X) t))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMapₓ'. -/
 theorem FamilyOfElements.IsAmalgamation.compPresheafMap {x : FamilyOfElements P R} {t} (f : P ⟶ Q)
     (h : x.IsAmalgamation t) : (x.compPresheafMap f).IsAmalgamation (f.app (op X) t) :=
   by
@@ -391,6 +483,12 @@ theorem FamilyOfElements.IsAmalgamation.compPresheafMap {x : FamilyOfElements P
   simp [← f.naturality, h g hg]
 #align category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap
 
+/- warning: category_theory.presieve.is_compatible_of_exists_amalgamation -> CategoryTheory.Presieve.is_compatible_of_exists_amalgamation is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (Exists.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) (fun (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (Exists.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) (fun (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)) -> (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_compatible_of_exists_amalgamation CategoryTheory.Presieve.is_compatible_of_exists_amalgamationₓ'. -/
 theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
     (h : ∃ t, x.IsAmalgamation t) : x.Compatible :=
   by
@@ -400,11 +498,23 @@ theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
   simp
 #align category_theory.presieve.is_compatible_of_exists_amalgamation CategoryTheory.Presieve.is_compatible_of_exists_amalgamation
 
+/- warning: category_theory.presieve.is_amalgamation_restrict -> CategoryTheory.Presieve.isAmalgamation_restrict is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) R₁ R₂) (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₂ x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x) t)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R₁ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} {R₂ : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (h : LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) R₁ R₂) (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R₂) (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₂ x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R₁ (CategoryTheory.Presieve.FamilyOfElements.restrict.{u1, u2, u3} C _inst_1 P X R₁ R₂ h x) t)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_amalgamation_restrict CategoryTheory.Presieve.isAmalgamation_restrictₓ'. -/
 theorem isAmalgamation_restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂) (x : FamilyOfElements P R₂)
     (t : P.obj (op X)) (ht : x.IsAmalgamation t) : (x.restrict h).IsAmalgamation t := fun Y f hf =>
   ht f (h Y hf)
 #align category_theory.presieve.is_amalgamation_restrict CategoryTheory.Presieve.isAmalgamation_restrict
 
+/- warning: category_theory.presieve.is_amalgamation_sieve_extend -> CategoryTheory.Presieve.isAmalgamation_sieveExtend is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.generate.{u2, u3} C _inst_1 X R)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x) t)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R) (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)), (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t) -> (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X (CategoryTheory.Sieve.generate.{u2, u3} C _inst_1 X R)) (CategoryTheory.Presieve.FamilyOfElements.sieveExtend.{u1, u2, u3} C _inst_1 P X R x) t)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_amalgamation_sieve_extend CategoryTheory.Presieve.isAmalgamation_sieveExtendₓ'. -/
 theorem isAmalgamation_sieveExtend {R : Presieve X} (x : FamilyOfElements P R) (t : P.obj (op X))
     (ht : x.IsAmalgamation t) : x.sieveExtend.IsAmalgamation t :=
   by
@@ -413,16 +523,25 @@ theorem isAmalgamation_sieveExtend {R : Presieve X} (x : FamilyOfElements P R) (
   rw [← ht _, ← functor_to_types.map_comp_apply, ← op_comp, hf.some_spec.some_spec.some_spec.2]
 #align category_theory.presieve.is_amalgamation_sieve_extend CategoryTheory.Presieve.isAmalgamation_sieveExtend
 
+#print CategoryTheory.Presieve.IsSeparatedFor /-
 /-- A presheaf is separated for a presieve if there is at most one amalgamation. -/
 def IsSeparatedFor (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) : Prop :=
   ∀ (x : FamilyOfElements P R) (t₁ t₂), x.IsAmalgamation t₁ → x.IsAmalgamation t₂ → t₁ = t₂
 #align category_theory.presieve.is_separated_for CategoryTheory.Presieve.IsSeparatedFor
+-/
 
+/- warning: category_theory.presieve.is_separated_for.ext -> CategoryTheory.Presieve.IsSeparatedFor.ext is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall {t₁ : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)} {t₂ : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)}, (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y)) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₁) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₂))) -> (Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) t₁ t₂))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall {t₁ : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)} {t₂ : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)}, (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y)) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₁) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) t₂))) -> (Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) t₁ t₂))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for.ext CategoryTheory.Presieve.IsSeparatedFor.extₓ'. -/
 theorem IsSeparatedFor.ext {R : Presieve X} (hR : IsSeparatedFor P R) {t₁ t₂ : P.obj (op X)}
     (h : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : R f), P.map f.op t₁ = P.map f.op t₂) : t₁ = t₂ :=
   hR (fun Y f hf => P.map f.op t₂) t₁ t₂ (fun Y f hf => h hf) fun Y f hf => rfl
 #align category_theory.presieve.is_separated_for.ext CategoryTheory.Presieve.IsSeparatedFor.ext
 
+#print CategoryTheory.Presieve.isSeparatedFor_iff_generate /-
 theorem isSeparatedFor_iff_generate : IsSeparatedFor P R ↔ IsSeparatedFor P (generate R) :=
   by
   constructor
@@ -435,7 +554,14 @@ theorem isSeparatedFor_iff_generate : IsSeparatedFor P R ↔ IsSeparatedFor P (g
     · exact is_amalgamation_sieve_extend x t₁ ht₁
     · exact is_amalgamation_sieve_extend x t₂ ht₂
 #align category_theory.presieve.is_separated_for_iff_generate CategoryTheory.Presieve.isSeparatedFor_iff_generate
+-/
 
+/- warning: category_theory.presieve.is_separated_for_top -> CategoryTheory.Presieve.isSeparatedFor_top is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P (Top.top.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toHasTop.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X)))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P (Top.top.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toTop.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X)))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for_top CategoryTheory.Presieve.isSeparatedFor_topₓ'. -/
 theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Presieve X) :=
   fun x t₁ t₂ h₁ h₂ => by
   have q₁ := h₁ (𝟙 X) (by simp)
@@ -444,6 +570,7 @@ theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Pr
   rw [q₁, q₂]
 #align category_theory.presieve.is_separated_for_top CategoryTheory.Presieve.isSeparatedFor_top
 
+#print CategoryTheory.Presieve.IsSheafFor /-
 /-- We define `P` to be a sheaf for the presieve `R` if every compatible family has a unique
 amalgamation.
 
@@ -455,7 +582,9 @@ this is equivalent to the definition of a sheaf in [MM92], Chapter III, Section
 def IsSheafFor (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) : Prop :=
   ∀ x : FamilyOfElements P R, x.Compatible → ∃! t, x.IsAmalgamation t
 #align category_theory.presieve.is_sheaf_for CategoryTheory.Presieve.IsSheafFor
+-/
 
+#print CategoryTheory.Presieve.YonedaSheafCondition /-
 /-- This is an equivalent condition to be a sheaf, which is useful for the abstraction to local
 operators on elementary toposes. However this definition is defined only for sieves, not presieves.
 The equivalence between this and `is_sheaf_for` is given in `yoneda_condition_iff_sheaf_condition`.
@@ -468,7 +597,9 @@ See the discussion before Equation (3) of [MM92], Chapter III, Section 4. See al
 def YonedaSheafCondition (P : Cᵒᵖ ⥤ Type v₁) (S : Sieve X) : Prop :=
   ∀ f : S.Functor ⟶ P, ∃! g, S.functorInclusion ≫ g = f
 #align category_theory.presieve.yoneda_sheaf_condition CategoryTheory.Presieve.YonedaSheafCondition
+-/
 
+#print CategoryTheory.Presieve.natTransEquivCompatibleFamily /-
 -- TODO: We can generalize the universe parameter v₁ above by composing with
 -- appropriate `ulift_functor`s.
 /-- (Implementation). This is a (primarily internal) equivalence between natural transformations
@@ -500,7 +631,14 @@ def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
     rintro ⟨x, hx⟩
     rfl
 #align category_theory.presieve.nat_trans_equiv_compatible_family CategoryTheory.Presieve.natTransEquivCompatibleFamily
+-/
 
+/- warning: category_theory.presieve.extension_iff_amalgamation -> CategoryTheory.Presieve.extension_iff_amalgamation is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (x : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (g : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P), Iff (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) g) x) (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) (Subtype.val.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x) (coeFn.{max 1 (max (succ (max u2 u1)) 1 (succ u2) (succ u1)) (max 1 (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) 1 (succ u2) (succ u1)} (Equiv.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (fun (_x : Equiv.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) => (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) -> (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (Equiv.hasCoeToFun.{succ (max u2 u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S) x))) (CategoryTheory.Presieve.natTransEquivCompatibleFamily.{u1, u2} C _inst_1 X S P) x)) (coeFn.{max 1 (max (succ (max u2 u1)) (succ u1)) (succ u1) (succ (max u2 u1)), max (succ (max u2 u1)) (succ u1)} (Equiv.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (fun (_x : Equiv.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) => (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) -> (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (Equiv.hasCoeToFun.{succ (max u2 u1), succ u1} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (CategoryTheory.Functor.obj.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u2} C X))) (CategoryTheory.yonedaEquiv.{u1, u2} C _inst_1 X P) g))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (g : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), Iff (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) g) x) (CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) (Subtype.val.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max 1 (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) => Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (Subtype.{max (succ u2) (succ u1)} (CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (fun (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) => CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S) x))) (CategoryTheory.Presieve.natTransEquivCompatibleFamily.{u1, u2} C _inst_1 X S P) x)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (Equiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (fun (_x : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) => Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), succ u1} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (Prefunctor.obj.{succ u1, succ u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u2} C X))) (CategoryTheory.yonedaEquiv.{u1, u2} C _inst_1 X P) g))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamationₓ'. -/
 /-- (Implementation). A lemma useful to prove `yoneda_condition_iff_sheaf_condition`. -/
 theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor ⟶ P) (g : yoneda.obj X ⟶ P) :
     S.functorInclusion ≫ g = x ↔
@@ -522,6 +660,7 @@ theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.Functor 
     simp
 #align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamation
 
+#print CategoryTheory.Presieve.isSheafFor_iff_yonedaSheafCondition /-
 -- See note [dsimp, simp].
 /-- The yoneda version of the sheaf condition is equivalent to the sheaf condition.
 
@@ -539,7 +678,14 @@ theorem isSheafFor_iff_yonedaSheafCondition {P : Cᵒᵖ ⥤ Type v₁} :
   rw [Equiv.exists_unique_congr_left _]
   simp
 #align category_theory.presieve.is_sheaf_for_iff_yoneda_sheaf_condition CategoryTheory.Presieve.isSheafFor_iff_yonedaSheafCondition
+-/
 
+/- warning: category_theory.presieve.is_sheaf_for.extend -> CategoryTheory.Presieve.IsSheafFor.extend is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) -> (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) -> (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) -> (Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) -> (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.extend CategoryTheory.Presieve.IsSheafFor.extendₓ'. -/
 /--
 If `P` is a sheaf for the sieve `S` on `X`, a natural transformation from `S` (viewed as a functor)
 to `P` can be (uniquely) extended to all of `yoneda.obj X`.
@@ -555,6 +701,7 @@ noncomputable def IsSheafFor.extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor
   (isSheafFor_iff_yonedaSheafCondition.1 h f).exists.some
 #align category_theory.presieve.is_sheaf_for.extend CategoryTheory.Presieve.IsSheafFor.extend
 
+#print CategoryTheory.Presieve.IsSheafFor.functorInclusion_comp_extend /-
 /--
 Show that the extension of `f : S.functor ⟶ P` to all of `yoneda.obj X` is in fact an extension, ie
 that the triangle below commutes, provided `P` is a sheaf for `S`
@@ -570,13 +717,26 @@ theorem IsSheafFor.functorInclusion_comp_extend {P : Cᵒᵖ ⥤ Type v₁} (h :
     (f : S.Functor ⟶ P) : S.functorInclusion ≫ h.extend f = f :=
   (isSheafFor_iff_yonedaSheafCondition.1 h f).exists.choose_spec
 #align category_theory.presieve.is_sheaf_for.functor_inclusion_comp_extend CategoryTheory.Presieve.IsSheafFor.functorInclusion_comp_extend
+-/
 
+/- warning: category_theory.presieve.is_sheaf_for.unique_extend -> CategoryTheory.Presieve.IsSheafFor.unique_extend is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (h : CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) {f : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P} (t : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P), (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t) f) -> (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) t (CategoryTheory.Presieve.IsSheafFor.extend.{u1, u2} C _inst_1 X S P h f))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} (h : CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) {f : Quiver.Hom.{max (succ u2) (succ u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P} (t : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t) f) -> (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) t (CategoryTheory.Presieve.IsSheafFor.extend.{u1, u2} C _inst_1 X S P h f))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extendₓ'. -/
 /-- The extension of `f` to `yoneda.obj X` is unique. -/
 theorem IsSheafFor.unique_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) {f : S.Functor ⟶ P}
     (t : yoneda.obj X ⟶ P) (ht : S.functorInclusion ≫ t = f) : t = h.extend f :=
   (isSheafFor_iff_yonedaSheafCondition.1 h f).unique ht (h.functorInclusion_comp_extend f)
 #align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extend
 
+/- warning: category_theory.presieve.is_sheaf_for.hom_ext -> CategoryTheory.Presieve.IsSheafFor.hom_ext is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) -> (forall (t₁ : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) (t₂ : Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P), (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₁) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₂)) -> (Eq.{succ (max u2 u1)} (Quiver.Hom.{succ (max u2 u1), max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u1 u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.obj.{u1, max u2 u1, u2, max u1 u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1) X) P) t₁ t₂))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {P : CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, (CategoryTheory.Presieve.IsSheafFor.{u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) -> (forall (t₁ : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) (t₂ : Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P), (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) P) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₁) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Sieve.functor.{u1, u2} C _inst_1 X S) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P (CategoryTheory.Sieve.functorInclusion.{u1, u2} C _inst_1 X S) t₂)) -> (Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (succ u1) u2} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (Prefunctor.obj.{succ u1, max (succ u1) (succ u2), u2, max (succ u1) u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 (succ u1)} (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}))) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max u2 (succ u1)} C _inst_1 (CategoryTheory.Functor.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u1, u1, u2, succ u1} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.yoneda.{u1, u2} C _inst_1)) X) P) t₁ t₂))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.hom_ext CategoryTheory.Presieve.IsSheafFor.hom_extₓ'. -/
 /--
 If `P` is a sheaf for the sieve `S` on `X`, then if two natural transformations from `yoneda.obj X`
 to `P` agree when restricted to the subfunctor given by `S`, they are equal.
@@ -586,8 +746,14 @@ theorem IsSheafFor.hom_ext {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) (t
   (h.unique_extend t₁ ht).trans (h.unique_extend t₂ rfl).symm
 #align category_theory.presieve.is_sheaf_for.hom_ext CategoryTheory.Presieve.IsSheafFor.hom_ext
 
+/- warning: category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for -> CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, Iff (And (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) (fun (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)))) (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, Iff (And (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) (fun (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t)))) (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafForₓ'. -/
 /-- `P` is a sheaf for `R` iff it is separated for `R` and there exists an amalgamation. -/
-theorem isSeparatedFor_and_exists_isAmalgamation_iff_sheaf_for :
+theorem isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor :
     (IsSeparatedFor P R ∧ ∀ x : FamilyOfElements P R, x.Compatible → ∃ t, x.IsAmalgamation t) ↔
       IsSheafFor P R :=
   by
@@ -602,8 +768,14 @@ theorem isSeparatedFor_and_exists_isAmalgamation_iff_sheaf_for :
     intro t₁ t₂ ht₁ ht₂
     apply (h _).unique ht₁ ht₂
     exact is_compatible_of_exists_amalgamation x ⟨_, ht₂⟩
-#align category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_sheaf_for
-
+#align category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor
+
+/- warning: category_theory.presieve.is_separated_for.is_sheaf_for -> CategoryTheory.Presieve.IsSeparatedFor.isSheafFor is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) (fun (t : CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Exists.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) (fun (t : Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)) => CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.{u1, u2, u3} C _inst_1 P X R x t))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_separated_for.is_sheaf_for CategoryTheory.Presieve.IsSeparatedFor.isSheafForₓ'. -/
 /-- If `P` is separated for `R` and every family has an amalgamation, then `P` is a sheaf for `R`.
 -/
 theorem IsSeparatedFor.isSheafFor (t : IsSeparatedFor P R) :
@@ -613,28 +785,45 @@ theorem IsSeparatedFor.isSheafFor (t : IsSeparatedFor P R) :
   exact And.intro t
 #align category_theory.presieve.is_separated_for.is_sheaf_for CategoryTheory.Presieve.IsSeparatedFor.isSheafFor
 
+#print CategoryTheory.Presieve.IsSheafFor.isSeparatedFor /-
 /-- If `P` is a sheaf for `R`, it is separated for `R`. -/
 theorem IsSheafFor.isSeparatedFor : IsSheafFor P R → IsSeparatedFor P R := fun q =>
-  (isSeparatedFor_and_exists_isAmalgamation_iff_sheaf_for.2 q).1
+  (isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor.2 q).1
 #align category_theory.presieve.is_sheaf_for.is_separated_for CategoryTheory.Presieve.IsSheafFor.isSeparatedFor
+-/
 
+/- warning: category_theory.presieve.is_sheaf_for.amalgamate -> CategoryTheory.Presieve.IsSheafFor.amalgamate is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X)))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) -> (forall (x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R), (CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) -> (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X)))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.amalgamate CategoryTheory.Presieve.IsSheafFor.amalgamateₓ'. -/
 /-- Get the amalgamation of the given compatible family, provided we have a sheaf. -/
 noncomputable def IsSheafFor.amalgamate (t : IsSheafFor P R) (x : FamilyOfElements P R)
     (hx : x.Compatible) : P.obj (op X) :=
   (t x hx).exists.some
 #align category_theory.presieve.is_sheaf_for.amalgamate CategoryTheory.Presieve.IsSheafFor.amalgamate
 
+#print CategoryTheory.Presieve.IsSheafFor.isAmalgamation /-
 theorem IsSheafFor.isAmalgamation (t : IsSheafFor P R) {x : FamilyOfElements P R}
     (hx : x.Compatible) : x.IsAmalgamation (t.amalgamate x hx) :=
   (t x hx).exists.choose_spec
 #align category_theory.presieve.is_sheaf_for.is_amalgamation CategoryTheory.Presieve.IsSheafFor.isAmalgamation
+-/
 
+/- warning: category_theory.presieve.is_sheaf_for.valid_glue -> CategoryTheory.Presieve.IsSheafFor.valid_glue is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (t : CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} (hx : CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X) (Hf : R Y f), Eq.{succ u1} (CategoryTheory.Functor.obj.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C Y)) (CategoryTheory.Functor.map.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) (CategoryTheory.Presieve.IsSheafFor.amalgamate.{u1, u2, u3} C _inst_1 P X R t x hx)) (x Y f Hf)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}} {X : C} {Y : C} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X} (t : CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R) {x : CategoryTheory.Presieve.FamilyOfElements.{u1, u2, u3} C _inst_1 X P R} (hx : CategoryTheory.Presieve.FamilyOfElements.Compatible.{u1, u2, u3} C _inst_1 P X R x) (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X) (Hf : R Y f), Eq.{succ u1} (Prefunctor.obj.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C Y)) (Prefunctor.map.{succ u2, succ u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.toCategoryStruct.{u2, u3} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1))) Type.{u1} (CategoryTheory.CategoryStruct.toQuiver.{u1, succ u1} Type.{u1} (CategoryTheory.Category.toCategoryStruct.{u1, succ u1} Type.{u1} CategoryTheory.types.{u1})) (CategoryTheory.Functor.toPrefunctor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1} P) (Opposite.op.{succ u3} C X) (Opposite.op.{succ u3} C Y) (Quiver.Hom.op.{u3, succ u2} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X f) (CategoryTheory.Presieve.IsSheafFor.amalgamate.{u1, u2, u3} C _inst_1 P X R t x hx)) (x Y f Hf)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for.valid_glue CategoryTheory.Presieve.IsSheafFor.valid_glueₓ'. -/
 @[simp]
 theorem IsSheafFor.valid_glue (t : IsSheafFor P R) {x : FamilyOfElements P R} (hx : x.Compatible)
     (f : Y ⟶ X) (Hf : R f) : P.map f.op (t.amalgamate x hx) = x f Hf :=
   t.IsAmalgamation hx f Hf
 #align category_theory.presieve.is_sheaf_for.valid_glue CategoryTheory.Presieve.IsSheafFor.valid_glue
 
+#print CategoryTheory.Presieve.isSheafFor_iff_generate /-
 /-- C2.1.3 in [Elephant] -/
 theorem isSheafFor_iff_generate (R : Presieve X) : IsSheafFor P R ↔ IsSheafFor P (generate R) :=
   by
@@ -652,6 +841,7 @@ theorem isSheafFor_iff_generate (R : Presieve X) : IsSheafFor P R ↔ IsSheafFor
     intro t ht
     simpa [hx] using is_amalgamation_restrict (le_generate R) _ _ ht
 #align category_theory.presieve.is_sheaf_for_iff_generate CategoryTheory.Presieve.isSheafFor_iff_generate
+-/
 
 /-- Every presheaf is a sheaf for the family {𝟙 X}.
 
@@ -667,6 +857,12 @@ theorem isSheafFor_singleton_iso (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P (Presie
     simpa using ht _ (presieve.singleton_self _)
 #align category_theory.presieve.is_sheaf_for_singleton_iso CategoryTheory.Presieve.isSheafFor_singletonₓ_iso
 
+/- warning: category_theory.presieve.is_sheaf_for_top_sieve -> CategoryTheory.Presieve.isSheafFor_top_sieve is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) (Top.top.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CompleteLattice.toHasTop.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u2, u3} C _inst_1 X))))
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X (Top.top.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CompleteLattice.toTop.{max u3 u2} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u2, u3} C _inst_1 X))))
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_top_sieve CategoryTheory.Presieve.isSheafFor_top_sieveₓ'. -/
 /-- Every presheaf is a sheaf for the maximal sieve.
 
 [Elephant] C2.1.5(ii)
@@ -678,6 +874,7 @@ theorem isSheafFor_top_sieve (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P ((⊤ : Sie
   apply is_sheaf_for_singleton_iso
 #align category_theory.presieve.is_sheaf_for_top_sieve CategoryTheory.Presieve.isSheafFor_top_sieve
 
+#print CategoryTheory.Presieve.isSheafFor_iso /-
 /-- If `P` is a sheaf for `S`, and it is iso to `P'`, then `P'` is a sheaf for `S`. This shows that
 "being a sheaf for a presieve" is a mathematical or hygenic property.
 -/
@@ -696,7 +893,14 @@ theorem isSheafFor_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') : IsSheafFor P R
     rw [show y = (i.inv.app (op X) ≫ i.hom.app (op X)) y by simp]
     simp [ht2 (i.inv.app _ y) (family_of_elements.is_amalgamation.comp_presheaf_map i.inv hy)]
 #align category_theory.presieve.is_sheaf_for_iso CategoryTheory.Presieve.isSheafFor_iso
+-/
 
+/- warning: category_theory.presieve.is_sheaf_for_subsieve_aux -> CategoryTheory.Presieve.isSheafFor_subsieve_aux is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toLE.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S)) -> (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S)))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) R) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S)) -> (forall {{Y : C}} {{f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X}}, (R Y f) -> (CategoryTheory.Presieve.IsSeparatedFor.{u1, u2, u3} C _inst_1 Y P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 Y (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S)))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_subsieve_aux CategoryTheory.Presieve.isSheafFor_subsieve_auxₓ'. -/
 /-- If a presieve `R` on `X` has a subsieve `S` such that:
 
 * `P` is a sheaf for `S`.
@@ -726,6 +930,12 @@ theorem isSheafFor_subsieve_aux (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Pres
     simp
 #align category_theory.presieve.is_sheaf_for_subsieve_aux CategoryTheory.Presieve.isSheafFor_subsieve_aux
 
+/- warning: category_theory.presieve.is_sheaf_for_subsieve -> CategoryTheory.Presieve.isSheafFor_subsieve is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (Preorder.toLE.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (PartialOrder.toPreorder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} ((fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) S) (CategoryTheory.Presieve.completeLattice.{u3, u2} C _inst_1 X))))) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 X) => CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 X) S) R) -> (forall {{Y : C}} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 Y P (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) (fun (_x : CategoryTheory.Sieve.{u2, u3} C _inst_1 Y) => CategoryTheory.Presieve.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.hasCoeToFun.{u2, u3} C _inst_1 Y) (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} (P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) {S : CategoryTheory.Sieve.{u2, u3} C _inst_1 X} {R : CategoryTheory.Presieve.{u2, u3} C _inst_1 X}, (LE.le.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (Preorder.toLE.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (PartialOrder.toPreorder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u3 u2} (CategoryTheory.Presieve.{u2, u3} C _inst_1 X) (CategoryTheory.instCompleteLatticePresieve.{u2, u3} C _inst_1 X))))) (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 X S) R) -> (forall {{Y : C}} (f : Quiver.Hom.{succ u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u2, u3} C (CategoryTheory.Category.toCategoryStruct.{u2, u3} C _inst_1)) Y X), CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 Y P (CategoryTheory.Sieve.arrows.{u2, u3} C _inst_1 Y (CategoryTheory.Sieve.pullback.{u2, u3} C _inst_1 X Y f S))) -> (CategoryTheory.Presieve.IsSheafFor.{u1, u2, u3} C _inst_1 X P R)
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_for_subsieve CategoryTheory.Presieve.isSheafFor_subsieveₓ'. -/
 /--
 If `P` is a sheaf for every pullback of the sieve `S`, then `P` is a sheaf for any presieve which
 contains `S`.
@@ -737,11 +947,14 @@ theorem isSheafFor_subsieve (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Presieve
   isSheafFor_subsieve_aux P h (by simpa using trans (𝟙 _)) fun Y f hf => (trans f).IsSeparatedFor
 #align category_theory.presieve.is_sheaf_for_subsieve CategoryTheory.Presieve.isSheafFor_subsieve
 
+#print CategoryTheory.Presieve.IsSeparated /-
 /-- A presheaf is separated for a topology if it is separated for every sieve in the topology. -/
 def IsSeparated (P : Cᵒᵖ ⥤ Type w) : Prop :=
   ∀ {X} (S : Sieve X), S ∈ J X → IsSeparatedFor P S
 #align category_theory.presieve.is_separated CategoryTheory.Presieve.IsSeparated
+-/
 
+#print CategoryTheory.Presieve.IsSheaf /-
 /-- A presheaf is a sheaf for a topology if it is a sheaf for every sieve in the topology.
 
 If the given topology is given by a pretopology, `is_sheaf_for_pretopology` shows it suffices to
@@ -750,30 +963,42 @@ check the sheaf condition at presieves in the pretopology.
 def IsSheaf (P : Cᵒᵖ ⥤ Type w) : Prop :=
   ∀ ⦃X⦄ (S : Sieve X), S ∈ J X → IsSheafFor P S
 #align category_theory.presieve.is_sheaf CategoryTheory.Presieve.IsSheaf
+-/
 
+#print CategoryTheory.Presieve.IsSheaf.isSheafFor /-
 theorem IsSheaf.isSheafFor {P : Cᵒᵖ ⥤ Type w} (hp : IsSheaf J P) (R : Presieve X)
     (hr : generate R ∈ J X) : IsSheafFor P R :=
   (isSheafFor_iff_generate R).2 <| hp _ hr
 #align category_theory.presieve.is_sheaf.is_sheaf_for CategoryTheory.Presieve.IsSheaf.isSheafFor
+-/
 
+#print CategoryTheory.Presieve.isSheaf_of_le /-
 theorem isSheaf_of_le (P : Cᵒᵖ ⥤ Type w) {J₁ J₂ : GrothendieckTopology C} :
     J₁ ≤ J₂ → IsSheaf J₂ P → IsSheaf J₁ P := fun h t X S hS => t S (h _ hS)
 #align category_theory.presieve.is_sheaf_of_le CategoryTheory.Presieve.isSheaf_of_le
+-/
 
+#print CategoryTheory.Presieve.isSeparated_of_isSheaf /-
 theorem isSeparated_of_isSheaf (P : Cᵒᵖ ⥤ Type w) (h : IsSheaf J P) : IsSeparated J P :=
   fun X S hS => (h S hS).IsSeparatedFor
 #align category_theory.presieve.is_separated_of_is_sheaf CategoryTheory.Presieve.isSeparated_of_isSheaf
+-/
 
+#print CategoryTheory.Presieve.isSheaf_iso /-
 /-- The property of being a sheaf is preserved by isomorphism. -/
 theorem isSheaf_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') (h : IsSheaf J P) : IsSheaf J P' :=
   fun X S hS => isSheafFor_iso i (h S hS)
 #align category_theory.presieve.is_sheaf_iso CategoryTheory.Presieve.isSheaf_iso
+-/
 
+#print CategoryTheory.Presieve.isSheaf_of_yoneda /-
 theorem isSheaf_of_yoneda {P : Cᵒᵖ ⥤ Type v₁}
     (h : ∀ {X} (S : Sieve X), S ∈ J X → YonedaSheafCondition P S) : IsSheaf J P := fun X S hS =>
   isSheafFor_iff_yonedaSheafCondition.2 (h _ hS)
 #align category_theory.presieve.is_sheaf_of_yoneda CategoryTheory.Presieve.isSheaf_of_yoneda
+-/
 
+#print CategoryTheory.Presieve.isSheaf_pretopology /-
 /-- For a topology generated by a basis, it suffices to check the sheaf condition on the basis
 presieves only.
 -/
@@ -793,7 +1018,14 @@ theorem isSheaf_pretopology [HasPullbacks C] (K : Pretopology C) :
     rw [← pullback_arrows_comm, ← is_sheaf_for_iff_generate]
     exact PK (pullback_arrows f R) (K.pullbacks f R hR)
 #align category_theory.presieve.is_sheaf_pretopology CategoryTheory.Presieve.isSheaf_pretopology
+-/
 
+/- warning: category_theory.presieve.is_sheaf_bot -> CategoryTheory.Presieve.isSheaf_bot is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, CategoryTheory.Presieve.IsSheaf.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toHasBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u2, u3} C _inst_1))) P
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {P : CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}}, CategoryTheory.Presieve.IsSheaf.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u2, u3} C _inst_1))) P
+Case conversion may be inaccurate. Consider using '#align category_theory.presieve.is_sheaf_bot CategoryTheory.Presieve.isSheaf_botₓ'. -/
 /-- Any presheaf is a sheaf for the bottom (trivial) grothendieck topology. -/
 theorem isSheaf_bot : IsSheaf (⊥ : GrothendieckTopology C) P := fun X => by
   simp [is_sheaf_for_top_sieve]
@@ -808,6 +1040,7 @@ variable {C : Type u₁} [Category.{v₁} C] (P : Cᵒᵖ ⥤ Type max v₁ u₁
 
 noncomputable section
 
+#print CategoryTheory.Equalizer.FirstObj /-
 /--
 The middle object of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram
 of <https://stacks.math.columbia.edu/tag/00VM>.
@@ -815,7 +1048,9 @@ of <https://stacks.math.columbia.edu/tag/00VM>.
 def FirstObj : Type max v₁ u₁ :=
   ∏ fun f : ΣY, { f : Y ⟶ X // R f } => P.obj (op f.1)
 #align category_theory.equalizer.first_obj CategoryTheory.Equalizer.FirstObj
+-/
 
+#print CategoryTheory.Equalizer.firstObjEqFamily /-
 /-- Show that `first_obj` is isomorphic to `family_of_elements`. -/
 @[simps]
 def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P
@@ -829,10 +1064,17 @@ def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P
     ext (x Y f hf)
     apply limits.types.limit.lift_π_apply'
 #align category_theory.equalizer.first_obj_eq_family CategoryTheory.Equalizer.firstObjEqFamily
+-/
 
 instance : Inhabited (FirstObj P (⊥ : Presieve X)) :=
   (firstObjEqFamily P _).toEquiv.Inhabited
 
+/- warning: category_theory.equalizer.fork_map -> CategoryTheory.Equalizer.forkMap is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X), Quiver.Hom.{succ (max u1 u2), succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2})) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X), Quiver.Hom.{max (succ u2) (succ u1), max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R)
+Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.fork_map CategoryTheory.Equalizer.forkMapₓ'. -/
 /--
 The left morphism of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram
 of <https://stacks.math.columbia.edu/tag/00VM>.
@@ -849,27 +1091,39 @@ the definition of `is_sheaf_for`.
 
 namespace Sieve
 
+#print CategoryTheory.Equalizer.Sieve.SecondObj /-
 /-- The rightmost object of the fork diagram of Equation (3) [MM92], which contains the data used
 to check a family is compatible.
 -/
 def SecondObj : Type max v₁ u₁ :=
   ∏ fun f : Σ(Y Z : _)(g : Z ⟶ Y), { f' : Y ⟶ X // S f' } => P.obj (op f.2.1)
 #align category_theory.equalizer.sieve.second_obj CategoryTheory.Equalizer.Sieve.SecondObj
+-/
 
+#print CategoryTheory.Equalizer.Sieve.firstMap /-
 /-- The map `p` of Equations (3,4) [MM92]. -/
 def firstMap : FirstObj P S ⟶ SecondObj P S :=
   Pi.lift fun fg =>
     Pi.π _ (⟨_, _, S.downward_closed fg.2.2.2.2 fg.2.2.1⟩ : ΣY, { f : Y ⟶ X // S f })
 #align category_theory.equalizer.sieve.first_map CategoryTheory.Equalizer.Sieve.firstMap
+-/
 
 instance : Inhabited (SecondObj P (⊥ : Sieve X)) :=
   ⟨firstMap _ _ default⟩
 
+#print CategoryTheory.Equalizer.Sieve.secondMap /-
 /-- The map `a` of Equations (3,4) [MM92]. -/
 def secondMap : FirstObj P S ⟶ SecondObj P S :=
   Pi.lift fun fg => Pi.π _ ⟨_, fg.2.2.2⟩ ≫ P.map fg.2.2.1.op
 #align category_theory.equalizer.sieve.second_map CategoryTheory.Equalizer.Sieve.secondMap
+-/
 
+/- warning: category_theory.equalizer.sieve.w -> CategoryTheory.Equalizer.Sieve.w is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Eq.{succ (max u1 u2)} (Quiver.Hom.{succ (max u1 u2), succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2})) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S))
+Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.sieve.w CategoryTheory.Equalizer.Sieve.wₓ'. -/
 theorem w : forkMap P S ≫ firstMap P S = forkMap P S ≫ secondMap P S :=
   by
   apply limit.hom_ext
@@ -877,6 +1131,7 @@ theorem w : forkMap P S ≫ firstMap P S = forkMap P S ≫ secondMap P S :=
   simp [first_map, second_map, fork_map]
 #align category_theory.equalizer.sieve.w CategoryTheory.Equalizer.Sieve.w
 
+#print CategoryTheory.Equalizer.Sieve.compatible_iff /-
 /--
 The family of elements given by `x : first_obj P S` is compatible iff `first_map` and `second_map`
 map it to the same point.
@@ -893,7 +1148,14 @@ theorem compatible_iff (x : FirstObj P S) :
     rw [types.limit_ext_iff'] at t
     simpa [first_map, second_map] using t ⟨⟨Y, Z, g, f, hf⟩⟩
 #align category_theory.equalizer.sieve.compatible_iff CategoryTheory.Equalizer.Sieve.compatible_iff
+-/
 
+/- warning: category_theory.equalizer.sieve.equalizer_sheaf_condition -> CategoryTheory.Equalizer.Sieve.equalizer_sheaf_condition is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Iff (CategoryTheory.Presieve.IsSheafFor.{max u1 u2, u1, u2} C _inst_1 X P (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (Nonempty.{succ (succ (max u1 u2))} (CategoryTheory.Limits.IsLimit.{0, max u1 u2, 0, succ (max u1 u2)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Limits.parallelPair.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.Limits.Fork.ofι.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (fun (_x : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) => CategoryTheory.Presieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.hasCoeToFun.{u1, u2} C _inst_1 X) S)) (CategoryTheory.Equalizer.Sieve.w.{u1, u2} C _inst_1 P X S))))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), Iff (CategoryTheory.Presieve.IsSheafFor.{max u2 u1, u1, u2} C _inst_1 X P (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (Nonempty.{max (succ (max (succ u2) (succ u1))) (succ (max u2 u1))} (CategoryTheory.Limits.IsLimit.{0, max u2 u1, 0, max (succ u2) (succ u1)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Limits.parallelPair.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S)) (CategoryTheory.Limits.Fork.ofι.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.SecondObj.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.firstMap.{u1, u2} C _inst_1 P X S) (CategoryTheory.Equalizer.Sieve.secondMap.{u1, u2} C _inst_1 P X S) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S)) (CategoryTheory.Equalizer.Sieve.w.{u1, u2} C _inst_1 P X S))))
+Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.sieve.equalizer_sheaf_condition CategoryTheory.Equalizer.Sieve.equalizer_sheaf_conditionₓ'. -/
 /-- `P` is a sheaf for `S`, iff the fork given by `w` is an equalizer. -/
 theorem equalizer_sheaf_condition :
     Presieve.IsSheafFor P S ↔ Nonempty (IsLimit (Fork.ofι _ (w P S))) :=
@@ -929,6 +1191,7 @@ namespace Presieve
 
 variable [HasPullbacks C]
 
+#print CategoryTheory.Equalizer.Presieve.SecondObj /-
 /-- The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM, which
 contains the data used to check a family of elements for a presieve is compatible.
 -/
@@ -936,20 +1199,31 @@ def SecondObj : Type max v₁ u₁ :=
   ∏ fun fg : (ΣY, { f : Y ⟶ X // R f }) × ΣZ, { g : Z ⟶ X // R g } =>
     P.obj (op (pullback fg.1.2.1 fg.2.2.1))
 #align category_theory.equalizer.presieve.second_obj CategoryTheory.Equalizer.Presieve.SecondObj
+-/
 
+#print CategoryTheory.Equalizer.Presieve.firstMap /-
 /-- The map `pr₀*` of <https://stacks.math.columbia.edu/tag/00VL>. -/
 def firstMap : FirstObj P R ⟶ SecondObj P R :=
   Pi.lift fun fg => Pi.π _ _ ≫ P.map pullback.fst.op
 #align category_theory.equalizer.presieve.first_map CategoryTheory.Equalizer.Presieve.firstMap
+-/
 
 instance : Inhabited (SecondObj P (⊥ : Presieve X)) :=
   ⟨firstMap _ _ default⟩
 
+#print CategoryTheory.Equalizer.Presieve.secondMap /-
 /-- The map `pr₁*` of <https://stacks.math.columbia.edu/tag/00VL>. -/
 def secondMap : FirstObj P R ⟶ SecondObj P R :=
   Pi.lift fun fg => Pi.π _ _ ≫ P.map pullback.snd.op
 #align category_theory.equalizer.presieve.second_map CategoryTheory.Equalizer.Presieve.secondMap
+-/
 
+/- warning: category_theory.equalizer.presieve.w -> CategoryTheory.Equalizer.Presieve.w is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Eq.{succ (max u1 u2)} (Quiver.Hom.{succ (max u1 u2), succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2})) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{succ (max u2 u1), max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.CategoryStruct.comp.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2))
+Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.presieve.w CategoryTheory.Equalizer.Presieve.wₓ'. -/
 theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R :=
   by
   apply limit.hom_ext
@@ -961,6 +1235,7 @@ theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R :=
   simp
 #align category_theory.equalizer.presieve.w CategoryTheory.Equalizer.Presieve.w
 
+#print CategoryTheory.Equalizer.Presieve.compatible_iff /-
 /--
 The family of elements given by `x : first_obj P S` is compatible iff `first_map` and `second_map`
 map it to the same point.
@@ -977,7 +1252,14 @@ theorem compatible_iff (x : FirstObj P R) :
     rw [types.limit_ext_iff'] at t
     simpa [first_map, second_map] using t ⟨⟨⟨Y, f, hf⟩, Z, g, hg⟩⟩
 #align category_theory.equalizer.presieve.compatible_iff CategoryTheory.Equalizer.Presieve.compatible_iff
+-/
 
+/- warning: category_theory.equalizer.presieve.sheaf_condition -> CategoryTheory.Equalizer.Presieve.sheaf_condition is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Iff (CategoryTheory.Presieve.IsSheafFor.{max u1 u2, u1, u2} C _inst_1 X P R) (Nonempty.{succ (succ (max u1 u2))} (CategoryTheory.Limits.IsLimit.{0, max u1 u2, 0, succ (max u1 u2)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Limits.parallelPair.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.Limits.Fork.ofι.{max u1 u2, succ (max u1 u2)} Type.{max u1 u2} CategoryTheory.types.{max u1 u2} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Functor.obj.{u1, max u1 u2, u2, succ (max u1 u2)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u1 u2} P (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.w.{u1, u2} C _inst_1 P X R _inst_2))))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.Functor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1}) {X : C} (R : CategoryTheory.Presieve.{u1, u2} C _inst_1 X) [_inst_2 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1], Iff (CategoryTheory.Presieve.IsSheafFor.{max u2 u1, u1, u2} C _inst_1 X P R) (Nonempty.{max (succ (max (succ u2) (succ u1))) (succ (max u2 u1))} (CategoryTheory.Limits.IsLimit.{0, max u2 u1, 0, max (succ u2) (succ u1)} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Limits.parallelPair.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2)) (CategoryTheory.Limits.Fork.ofι.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1} (CategoryTheory.Equalizer.FirstObj.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.SecondObj.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.firstMap.{u1, u2} C _inst_1 P X R _inst_2) (CategoryTheory.Equalizer.Presieve.secondMap.{u1, u2} C _inst_1 P X R _inst_2) (Prefunctor.obj.{succ u1, max (succ u2) (succ u1), u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.toCategoryStruct.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1))) Type.{max u1 u2} (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (succ u2) (succ u1)} Type.{max u1 u2} CategoryTheory.types.{max u2 u1})) (CategoryTheory.Functor.toPrefunctor.{u1, max u2 u1, u2, max (succ u2) (succ u1)} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) Type.{max u1 u2} CategoryTheory.types.{max u2 u1} P) (Opposite.op.{succ u2} C X)) (CategoryTheory.Equalizer.forkMap.{u1, u2} C _inst_1 P X R) (CategoryTheory.Equalizer.Presieve.w.{u1, u2} C _inst_1 P X R _inst_2))))
+Case conversion may be inaccurate. Consider using '#align category_theory.equalizer.presieve.sheaf_condition CategoryTheory.Equalizer.Presieve.sheaf_conditionₓ'. -/
 /-- `P` is a sheaf for `R`, iff the fork given by `w` is an equalizer.
 See <https://stacks.math.columbia.edu/tag/00VM>.
 -/
@@ -1008,21 +1290,25 @@ variable {C : Type u₁} [Category.{v₁} C]
 
 variable (J : GrothendieckTopology C)
 
+#print CategoryTheory.SheafOfTypes /-
 /-- The category of sheaves on a grothendieck topology. -/
 structure SheafOfTypes (J : GrothendieckTopology C) : Type max u₁ v₁ (w + 1) where
   val : Cᵒᵖ ⥤ Type w
   cond : Presieve.IsSheaf J val
 #align category_theory.SheafOfTypes CategoryTheory.SheafOfTypes
+-/
 
 namespace SheafOfTypes
 
 variable {J}
 
+#print CategoryTheory.SheafOfTypes.Hom /-
 /-- Morphisms between sheaves of types are just morphisms between the underlying presheaves. -/
 @[ext]
 structure Hom (X Y : SheafOfTypes J) where
   val : X.val ⟶ Y.val
 #align category_theory.SheafOfTypes.hom CategoryTheory.SheafOfTypes.Hom
+-/
 
 @[simps]
 instance : Category (SheafOfTypes J) where
@@ -1039,6 +1325,7 @@ instance (X : SheafOfTypes J) : Inhabited (Hom X X) :=
 
 end SheafOfTypes
 
+#print CategoryTheory.sheafOfTypesToPresheaf /-
 /-- The inclusion functor from sheaves to presheaves. -/
 @[simps]
 def sheafOfTypesToPresheaf : SheafOfTypes J ⥤ Cᵒᵖ ⥤ Type w
@@ -1048,11 +1335,18 @@ def sheafOfTypesToPresheaf : SheafOfTypes J ⥤ Cᵒᵖ ⥤ Type w
   map_id' X := rfl
   map_comp' X Y Z f g := rfl
 #align category_theory.SheafOfTypes_to_presheaf CategoryTheory.sheafOfTypesToPresheaf
+-/
 
 instance : Full (sheafOfTypesToPresheaf J) where Preimage X Y f := ⟨f⟩
 
 instance : Faithful (sheafOfTypesToPresheaf J) where
 
+/- warning: category_theory.SheafOfTypes_bot_equiv -> CategoryTheory.sheafOfTypesBotEquiv is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C], CategoryTheory.Equivalence.{max u1 u3, max u3 u1, max u3 u2 (succ u1), max u2 u1 u3 (succ u1)} (CategoryTheory.SheafOfTypes.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toHasBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u2, u3} C _inst_1)))) (CategoryTheory.SheafOfTypes.CategoryTheory.category.{u2, u3, u1} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toHasBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u2, u3} C _inst_1)))) (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1})
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C], CategoryTheory.Equivalence.{max u3 u1, max u3 u1, max (max u3 u2) (succ u1), max (max (max (succ u1) u3) u1) u2} (CategoryTheory.SheafOfTypes.{u1, u2, u3} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u2, u3} C _inst_1)))) (CategoryTheory.Functor.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1}) (CategoryTheory.SheafOfTypes.instCategorySheafOfTypes.{u2, u3, u1} C _inst_1 (Bot.bot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CompleteLattice.toBot.{max u3 u2} (CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u2, u3} C _inst_1)))) (CategoryTheory.Functor.category.{u2, u1, u3, succ u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) Type.{u1} CategoryTheory.types.{u1})
+Case conversion may be inaccurate. Consider using '#align category_theory.SheafOfTypes_bot_equiv CategoryTheory.sheafOfTypesBotEquivₓ'. -/
 /--
 The category of sheaves on the bottom (trivial) grothendieck topology is equivalent to the category
 of presheaves.
Diff
@@ -665,7 +665,7 @@ theorem isSheafFor_singleton_iso (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P (Presie
     simp
   · intro t ht
     simpa using ht _ (presieve.singleton_self _)
-#align category_theory.presieve.is_sheaf_for_singleton_iso CategoryTheory.Presieve.isSheafFor_singleton_iso
+#align category_theory.presieve.is_sheaf_for_singleton_iso CategoryTheory.Presieve.isSheafFor_singletonₓ_iso
 
 /-- Every presheaf is a sheaf for the maximal sieve.
 

Changes in mathlib4

mathlib3
mathlib4
chore(CategoryTheory): make Functor.Full a Prop (#12449)

Before this PR, Functor.Full contained the data of the preimage of maps by a full functor F. This PR makes Functor.Full a proposition. This is to prevent any diamond to appear.

The lemma Functor.image_preimage is also renamed Functor.map_preimage.

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Diff
@@ -265,7 +265,7 @@ def sheafOfTypesToPresheaf : SheafOfTypes J ⥤ Cᵒᵖ ⥤ Type w where
 set_option linter.uppercaseLean3 false in
 #align category_theory.SheafOfTypes_to_presheaf CategoryTheory.sheafOfTypesToPresheaf
 
-instance : (sheafOfTypesToPresheaf J).Full where preimage f := ⟨f⟩
+instance : (sheafOfTypesToPresheaf J).Full where map_surjective f := ⟨⟨f⟩, rfl⟩
 
 instance : (sheafOfTypesToPresheaf J).Faithful where
 
@@ -278,10 +278,8 @@ def sheafOfTypesBotEquiv : SheafOfTypes (⊥ : GrothendieckTopology C) ≌ Cᵒ
   functor := sheafOfTypesToPresheaf _
   inverse :=
     { obj := fun P => ⟨P, Presieve.isSheaf_bot⟩
-      map := fun f => (sheafOfTypesToPresheaf _).preimage f }
-  unitIso :=
-    { hom := { app := fun _ => ⟨𝟙 _⟩ }
-      inv := { app := fun _ => ⟨𝟙 _⟩ } }
+      map := fun f => ⟨f⟩ }
+  unitIso := Iso.refl _
   counitIso := Iso.refl _
 set_option linter.uppercaseLean3 false in
 #align category_theory.SheafOfTypes_bot_equiv CategoryTheory.sheafOfTypesBotEquiv
chore: superfluous parentheses part 2 (#12131)

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

Diff
@@ -166,9 +166,9 @@ theorem yonedaFamily_fromCocone_compatible (S : Sieve X) (s : Cocone (diagram S.
   dsimp [yonedaFamilyOfElements_fromCocone]
   have hgf₁ : S.arrows (g₁ ≫ f₁) := by exact Sieve.downward_closed S hf₁ g₁
   have hgf₂ : S.arrows (g₂ ≫ f₂) := by exact Sieve.downward_closed S hf₂ g₂
-  let F : (Over.mk (g₁ ≫ f₁) : Over X) ⟶ (Over.mk (g₂ ≫ f₂) : Over X) := (Over.homMk (𝟙 Z) )
-  let F₁ : (Over.mk (g₁ ≫ f₁) : Over X) ⟶ (Over.mk f₁ : Over X) := (Over.homMk g₁)
-  let F₂ : (Over.mk (g₂ ≫ f₂) : Over X) ⟶ (Over.mk f₂ : Over X) := (Over.homMk g₂)
+  let F : (Over.mk (g₁ ≫ f₁) : Over X) ⟶ (Over.mk (g₂ ≫ f₂) : Over X) := Over.homMk (𝟙 Z)
+  let F₁ : (Over.mk (g₁ ≫ f₁) : Over X) ⟶ (Over.mk f₁ : Over X) := Over.homMk g₁
+  let F₂ : (Over.mk (g₂ ≫ f₂) : Over X) ⟶ (Over.mk f₂ : Over X) := Over.homMk g₂
   have hF := @Hs ⟨Over.mk (g₁ ≫ f₁), hgf₁⟩ ⟨Over.mk (g₂ ≫ f₂), hgf₂⟩ F
   have hF₁ := @Hs ⟨Over.mk (g₁ ≫ f₁), hgf₁⟩ ⟨Over.mk f₁, hf₁⟩ F₁
   have hF₂ := @Hs ⟨Over.mk (g₂ ≫ f₂), hgf₂⟩ ⟨Over.mk f₂, hf₂⟩ F₂
chore(CategoryTheory): move Full, Faithful, EssSurj, IsEquivalence and ReflectsIsomorphisms to the Functor namespace (#11985)

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

Diff
@@ -265,9 +265,9 @@ def sheafOfTypesToPresheaf : SheafOfTypes J ⥤ Cᵒᵖ ⥤ Type w where
 set_option linter.uppercaseLean3 false in
 #align category_theory.SheafOfTypes_to_presheaf CategoryTheory.sheafOfTypesToPresheaf
 
-instance : Full (sheafOfTypesToPresheaf J) where preimage f := ⟨f⟩
+instance : (sheafOfTypesToPresheaf J).Full where preimage f := ⟨f⟩
 
-instance : Faithful (sheafOfTypesToPresheaf J) where
+instance : (sheafOfTypesToPresheaf J).Faithful where
 
 /--
 The category of sheaves on the bottom (trivial) grothendieck topology is equivalent to the category
chore: remove more bex and ball from lemma names (#11615)

Follow-up to #10816.

Remaining places containing such lemmas are

  • Option.bex_ne_none and Option.ball_ne_none: defined in Lean core
  • Nat.decidableBallLT and Nat.decidableBallLE: defined in Lean core
  • bef_def is still used in a number of places and could be renamed
  • BAll.imp_{left,right}, BEx.imp_{left,right}, BEx.intro and BEx.elim

I only audited the first ~150 lemmas mentioning "ball"; too many lemmas named after Metric.ball/openBall/closedBall.

Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -504,7 +504,7 @@ theorem isSheafFor_iff_yonedaSheafCondition {P : Cᵒᵖ ⥤ Type v₁} :
   simp_rw [extension_iff_amalgamation]
   rw [Equiv.forall_congr_left' natTransEquivCompatibleFamily]
   rw [Subtype.forall]
-  apply ball_congr
+  apply forall₂_congr
   intro x hx
   rw [Equiv.exists_unique_congr_left _]
   simp
chore: remove more bex and ball from lemma names (#11615)

Follow-up to #10816.

Remaining places containing such lemmas are

  • Option.bex_ne_none and Option.ball_ne_none: defined in Lean core
  • Nat.decidableBallLT and Nat.decidableBallLE: defined in Lean core
  • bef_def is still used in a number of places and could be renamed
  • BAll.imp_{left,right}, BEx.imp_{left,right}, BEx.intro and BEx.elim

I only audited the first ~150 lemmas mentioning "ball"; too many lemmas named after Metric.ball/openBall/closedBall.

Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -159,7 +159,7 @@ theorem equalizer_sheaf_condition :
     ← Equiv.forall_congr_left (firstObjEqFamily P (S : Presieve X)).toEquiv.symm]
   simp_rw [← compatible_iff]
   simp only [inv_hom_id_apply, Iso.toEquiv_symm_fun]
-  apply ball_congr
+  apply forall₂_congr
   intro x _
   apply exists_unique_congr
   intro t
@@ -247,7 +247,7 @@ theorem sheaf_condition : R.IsSheafFor P ↔ Nonempty (IsLimit (Fork.ofι _ (w P
   rw [Types.type_equalizer_iff_unique]
   erw [← Equiv.forall_congr_left (firstObjEqFamily P R).toEquiv.symm]
   simp_rw [← compatible_iff, ← Iso.toEquiv_fun, Equiv.apply_symm_apply]
-  apply ball_congr
+  apply forall₂_congr
   intro x _
   apply exists_unique_congr
   intro t
@@ -344,7 +344,7 @@ theorem sheaf_condition : (Presieve.ofArrows X π).IsSheafFor P ↔
   rw [Types.type_equalizer_iff_unique, isSheafFor_arrows_iff]
   erw [← Equiv.forall_congr_left (Types.productIso _).toEquiv.symm]
   simp_rw [← compatible_iff, ← Iso.toEquiv_fun, Equiv.apply_symm_apply]
-  apply ball_congr
+  apply forall₂_congr
   intro x _
   apply exists_unique_congr
   intro t
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


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

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

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

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -58,11 +58,8 @@ open Opposite CategoryTheory Category Limits Sieve
 namespace Presieve
 
 variable {C : Type u} [Category.{v} C]
-
 variable {P : Cᵒᵖ ⥤ Type w}
-
 variable {X : C}
-
 variable (J J₂ : GrothendieckTopology C)
 
 /-- A presheaf is separated for a topology if it is separated for every sieve in the topology. -/
@@ -159,7 +156,6 @@ namespace Sieve
 open Presieve
 
 variable {C : Type u} [Category.{v} C]
-
 variable {X : C}
 
 theorem yonedaFamily_fromCocone_compatible (S : Sieve X) (s : Cocone (diagram S.arrows)) :
@@ -214,7 +210,6 @@ theorem forallYonedaIsSheaf_iff_colimit (S : Sieve X) :
 end Sieve
 
 variable {C : Type u} [Category.{v} C]
-
 variable (J : GrothendieckTopology C)
 
 /-- The category of sheaves on a grothendieck topology. -/
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


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

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

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

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -75,9 +75,7 @@ open Opposite CategoryTheory Category Limits Sieve
 namespace Presieve
 
 variable {C : Type u₁} [Category.{v₁} C]
-
 variable {P Q U : Cᵒᵖ ⥤ Type w}
-
 variable {X Y : C} {S : Sieve X} {R : Presieve X}
 
 /-- A family of elements for a presheaf `P` given a collection of arrows `R` with fixed codomain `X`
@@ -275,7 +273,6 @@ theorem FamilyOfElements.comp_of_compatible (S : Sieve X) {x : FamilyOfElements
 section FunctorPullback
 
 variable {D : Type u₂} [Category.{v₂} D] (F : D ⥤ C) {Z : D}
-
 variable {T : Presieve (F.obj Z)} {x : FamilyOfElements P T}
 
 /--
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -248,7 +248,7 @@ theorem restrict_inj {x₁ x₂ : FamilyOfElements P (generate R)} (t₁ : x₁.
     (t₂ : x₂.Compatible) : x₁.restrict (le_generate R) = x₂.restrict (le_generate R) → x₁ = x₂ :=
   fun h => by
   rw [← extend_restrict t₁, ← extend_restrict t₂]
-  -- porting note: congr fails to make progress
+  -- Porting note: congr fails to make progress
   apply congr_arg
   exact h
 #align category_theory.presieve.restrict_inj CategoryTheory.Presieve.restrict_inj
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -76,7 +76,7 @@ def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P where
 instance : Inhabited (FirstObj P (⊥ : Presieve X)) :=
   (firstObjEqFamily P _).toEquiv.inhabited
 
--- porting note: was not needed in mathlib
+-- Porting note: was not needed in mathlib
 instance : Inhabited (FirstObj P ((⊥ : Sieve X) : Presieve X)) :=
   (inferInstance : Inhabited (FirstObj P (⊥ : Presieve X)))
 
chore: prepare Lean version bump with explicit simp (#10999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -659,7 +659,7 @@ theorem isSheafFor_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') : IsSheafFor P R
   use i.hom.app _ t
   fconstructor
   · convert FamilyOfElements.IsAmalgamation.compPresheafMap i.hom ht1
-    simp
+    simp [x']
   · intro y hy
     rw [show y = (i.inv.app (op X) ≫ i.hom.app (op X)) y by simp]
     simp [ht2 (i.inv.app _ y) (FamilyOfElements.IsAmalgamation.compPresheafMap i.inv hy)]
chore: classify added to ease automation porting notes (#10689)
  • Classifies by adding issue number (#10688) to porting notes claiming anything semantically equivalent to added to ease automation.
  • Enforce singular convention converting "porting notes" to "porting note".
Diff
@@ -55,7 +55,7 @@ def FirstObj : Type max v u :=
 
 variable {P R}
 
--- porting note: added to ease automation
+-- Porting note (#10688): added to ease automation
 @[ext]
 lemma FirstObj.ext (z₁ z₂ : FirstObj P R) (h : ∀ (Y : C) (f : Y ⟶ X)
     (hf : R f), (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶ _) z₁ =
@@ -105,7 +105,7 @@ def SecondObj : Type max v u :=
 
 variable {P S}
 
--- porting note: added to ease automation
+-- Porting note (#10688): added to ease automation
 @[ext]
 lemma SecondObj.ext (z₁ z₂ : SecondObj P S) (h : ∀ (Y Z : C) (g : Z ⟶ Y) (f : Y ⟶ X)
     (hf : S.arrows f), (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶ _) z₁ =
refactor: remove simp attribute from yonedaEquiv_apply (#10109)
Diff
@@ -488,7 +488,7 @@ theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.functor 
   · rintro rfl Y f hf
     rw [yonedaEquiv_naturality]
     dsimp
-    simp
+    simp [yonedaEquiv_apply]
   -- See note [dsimp, simp].
   · intro h
     ext Y ⟨f, hf⟩
feat(CategoryTheory/Sites): objects which cover the terminal object (#8632)

In this PR, given a site (C, J), we introduce the notion of a family of objects Y : I → C which "cover the final object". This notion is used in order to formulate results about global sections of sheaves. It shall also be useful in future PRs in order to formulate descent properties of sheaves.

Diff
@@ -266,7 +266,7 @@ namespace Arrows
 open Presieve
 
 variable {B : C} {I : Type} (X : I → C) (π : (i : I) → X i ⟶ B) [UnivLE.{w, max v u}]
-    [(ofArrows X π).hasPullbacks]
+    [(Presieve.ofArrows X π).hasPullbacks]
 -- TODO: allow `I : Type w` 
 
 /--
@@ -339,7 +339,7 @@ theorem compatible_iff (x : FirstObj P X) : (Arrows.Compatible P π ((Types.prod
 `P` is a sheaf for `Presieve.ofArrows X π`, iff the fork given by `w` is an equalizer.
 See <https://stacks.math.columbia.edu/tag/00VM>.
 -/
-theorem sheaf_condition : (ofArrows X π).IsSheafFor P ↔
+theorem sheaf_condition : (Presieve.ofArrows X π).IsSheafFor P ↔
     Nonempty (IsLimit (Fork.ofι (forkMap P X π) (w P X π))) := by
   rw [Types.type_equalizer_iff_unique, isSheafFor_arrows_iff]
   erw [← Equiv.forall_congr_left (Types.productIso _).toEquiv.symm]
chore: tidy various files (#8823)
Diff
@@ -15,7 +15,7 @@ Defines the notion of a sheaf of types (usually called a sheaf of sets by mathem
 on a category equipped with a Grothendieck topology, as well as a range of equivalent
 conditions useful in different situations.
 
-In `Mathlib/CategoryTheory/Sites/IsSheafFor` it is defined what it means for a presheaf to be a
+In `Mathlib/CategoryTheory/Sites/IsSheafFor.lean` it is defined what it means for a presheaf to be a
 sheaf *for* a particular sieve. Given a Grothendieck topology `J`, `P` is a sheaf if it is a sheaf
 for every sieve in the topology. See `IsSheaf`.
 
chore: tidy various files (#8823)
Diff
@@ -12,7 +12,7 @@ import Mathlib.Tactic.ApplyFun
 /-!
 # The equalizer diagram sheaf condition for a presieve
 
-In `Mathlib/CategoryTheory/Sites/IsSheafFor` it is defined what it means for a presheaf to be a
+In `Mathlib/CategoryTheory/Sites/IsSheafFor.lean` it is defined what it means for a presheaf to be a
 sheaf *for* a particular presieve. In this file we provide equivalent conditions in terms of
 equalizer diagrams.
 
feat: categorical sheaf condition for presieves of arrows (#7918)
Diff
@@ -5,6 +5,7 @@ Authors: Bhavik Mehta
 -/
 import Mathlib.CategoryTheory.Sites.IsSheafFor
 import Mathlib.CategoryTheory.Limits.Shapes.Types
+import Mathlib.Tactic.ApplyFun
 
 #align_import category_theory.sites.sheaf_of_types from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
 
@@ -185,7 +186,8 @@ namespace Presieve
 
 variable [R.hasPullbacks]
 
-/-- The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM, which
+/--
+The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM, which
 contains the data used to check a family of elements for a presieve is compatible.
 -/
 @[simp] def SecondObj : Type max v u :=
@@ -259,6 +261,104 @@ theorem sheaf_condition : R.IsSheafFor P ↔ Nonempty (IsLimit (Fork.ofι _ (w P
     simp [forkMap]
 #align category_theory.equalizer.presieve.sheaf_condition CategoryTheory.Equalizer.Presieve.sheaf_condition
 
+namespace Arrows
+
+open Presieve
+
+variable {B : C} {I : Type} (X : I → C) (π : (i : I) → X i ⟶ B) [UnivLE.{w, max v u}]
+    [(ofArrows X π).hasPullbacks]
+-- TODO: allow `I : Type w` 
+
+/--
+The middle object of the fork diagram of <https://stacks.math.columbia.edu/tag/00VM>.
+The difference between this and `Equalizer.FirstObj P (ofArrows X π)` arrises if the family of
+arrows `π` contains duplicates. The `Presieve.ofArrows` doesn't see those.
+-/
+def FirstObj : Type max v u := ∏ (fun i ↦ P.obj (op (X i)))
+
+@[ext]
+lemma FirstObj.ext (z₁ z₂ : FirstObj P X) (h : ∀ i, (Pi.π _ i : FirstObj P X ⟶ _) z₁ =
+    (Pi.π _ i : FirstObj P X ⟶ _) z₂) : z₁ = z₂ := by
+  apply Limits.Types.limit_ext
+  rintro ⟨i⟩
+  exact h i
+
+/--
+The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM.
+The difference between this and `Equalizer.Presieve.SecondObj P (ofArrows X π)` arrises if the
+family of arrows `π` contains duplicates. The `Presieve.ofArrows` doesn't see those.
+-/
+def SecondObj : Type max v u  :=
+  ∏ (fun (ij : I × I) ↦ P.obj (op (pullback (π ij.1) (π ij.2))))
+
+@[ext]
+lemma SecondObj.ext (z₁ z₂ : SecondObj P X π) (h : ∀ ij, (Pi.π _ ij : SecondObj P X π ⟶ _) z₁ =
+    (Pi.π _ ij : SecondObj P X π ⟶ _) z₂) : z₁ = z₂ := by
+  apply Limits.Types.limit_ext
+  rintro ⟨i⟩
+  exact h i
+
+/--
+The left morphism of the fork diagram.
+-/
+def forkMap : P.obj (op B) ⟶ FirstObj P X := Pi.lift (fun i ↦ P.map (π i).op)
+
+/--
+The first of the two parallel morphisms of the fork diagram, induced by the first projection in
+each pullback.
+-/
+def firstMap : FirstObj P X ⟶ SecondObj P X π := Pi.lift fun _ => Pi.π _ _ ≫ P.map pullback.fst.op
+
+/--
+The second of the two parallel morphisms of the fork diagram, induced by the second projection in
+each pullback.
+-/
+def secondMap : FirstObj P X ⟶ SecondObj P X π := Pi.lift fun _ => Pi.π _ _ ≫ P.map pullback.snd.op
+
+theorem w : forkMap P X π ≫ firstMap P X π = forkMap P X π ≫ secondMap P X π := by
+  ext x ij
+  simp only [firstMap, secondMap, forkMap, types_comp_apply, Types.pi_lift_π_apply,
+    ← FunctorToTypes.map_comp_apply, ← op_comp, pullback.condition]
+
+/--
+The family of elements given by `x : FirstObj P S` is compatible iff `firstMap` and `secondMap`
+map it to the same point.
+-/
+theorem compatible_iff (x : FirstObj P X) : (Arrows.Compatible P π ((Types.productIso _).hom x)) ↔
+    firstMap P X π x = secondMap P X π x := by
+  rw [Arrows.pullbackCompatible_iff]
+  constructor
+  · intro t
+    ext ij
+    simpa [firstMap, secondMap] using t ij.1 ij.2
+  · intro t i j
+    apply_fun Pi.π (fun (ij : I × I) ↦ P.obj (op (pullback (π ij.1) (π ij.2)))) ⟨i, j⟩ at t
+    simpa [firstMap, secondMap] using t
+
+/--
+`P` is a sheaf for `Presieve.ofArrows X π`, iff the fork given by `w` is an equalizer.
+See <https://stacks.math.columbia.edu/tag/00VM>.
+-/
+theorem sheaf_condition : (ofArrows X π).IsSheafFor P ↔
+    Nonempty (IsLimit (Fork.ofι (forkMap P X π) (w P X π))) := by
+  rw [Types.type_equalizer_iff_unique, isSheafFor_arrows_iff]
+  erw [← Equiv.forall_congr_left (Types.productIso _).toEquiv.symm]
+  simp_rw [← compatible_iff, ← Iso.toEquiv_fun, Equiv.apply_symm_apply]
+  apply ball_congr
+  intro x _
+  apply exists_unique_congr
+  intro t
+  erw [Equiv.eq_symm_apply]
+  constructor
+  · intro q
+    funext i
+    simpa [forkMap] using q i
+  · intro q i
+    rw [← q]
+    simp [forkMap]
+
+end Arrows
+
 end Presieve
 
 end
feat: more explicit sheaf condition for presieves of arrows (#7855)

We give more explicit analogues for compatible families of elements for a Presieve.ofArrows and prove that if such families have unique amalgamation then the sheaf condition is satisfied.

Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -113,6 +113,9 @@ In special cases, this condition can be simplified, see `pullbackCompatible_iff`
 
 This is referred to as a "compatible family" in Definition C2.1.2 of [Elephant], and on nlab:
 https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents
+
+For a more explicit version in the case where `R` is of the form `Presieve.ofArrows`, see
+`CategoryTheory.Presieve.Arrows.Compatible`.
 -/
 def FamilyOfElements.Compatible (x : FamilyOfElements P R) : Prop :=
   ∀ ⦃Y₁ Y₂ Z⦄ (g₁ : Z ⟶ Y₁) (g₂ : Z ⟶ Y₂) ⦃f₁ : Y₁ ⟶ X⦄ ⦃f₂ : Y₂ ⟶ X⦄ (h₁ : R f₁) (h₂ : R f₂),
@@ -130,6 +133,9 @@ This is the definition for a "matching" family given in [MM92], Chapter III, Sec
 Equation (5). Viewing the type `FamilyOfElements` as the middle object of the fork in
 https://stacks.math.columbia.edu/tag/00VM, this condition expresses that `pr₀* (x) = pr₁* (x)`,
 using the notation defined there.
+
+For a more explicit version in the case where `R` is of the form `Presieve.ofArrows`, see
+`CategoryTheory.Presieve.Arrows.PullbackCompatible`.
 -/
 def FamilyOfElements.PullbackCompatible (x : FamilyOfElements P R) [R.hasPullbacks] : Prop :=
   ∀ ⦃Y₁ Y₂⦄ ⦃f₁ : Y₁ ⟶ X⦄ ⦃f₂ : Y₂ ⟶ X⦄ (h₁ : R f₁) (h₂ : R f₂),
@@ -700,4 +706,85 @@ theorem isSheafFor_subsieve (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Presieve
   isSheafFor_subsieve_aux P h (by simpa using trans (𝟙 _)) fun Y f _ => (trans f).isSeparatedFor
 #align category_theory.presieve.is_sheaf_for_subsieve CategoryTheory.Presieve.isSheafFor_subsieve
 
+section Arrows
+
+variable {B : C} {I : Type*} {X : I → C} (π : (i : I) → X i ⟶ B) (P)
+
+/--
+A more explicit version of `FamilyOfElements.Compatible` for a `Presieve.ofArrows`.
+-/
+def Arrows.Compatible (x : (i : I) → P.obj (op (X i))) : Prop :=
+  ∀ i j Z (gi : Z ⟶ X i) (gj : Z ⟶ X j), gi ≫ π i = gj ≫ π j →
+    P.map gi.op (x i) = P.map gj.op (x j)
+
+lemma FamilyOfElements.isAmalgamation_iff_ofArrows (x : FamilyOfElements P (ofArrows X π))
+    (t : P.obj (op B)) :
+    x.IsAmalgamation t ↔ ∀ (i : I), P.map (π i).op t = x _ (ofArrows.mk i) :=
+  ⟨fun h i ↦ h _ (ofArrows.mk i), fun h _ f ⟨i⟩ ↦ h i⟩
+
+namespace Arrows.Compatible
+
+variable {x : (i : I) → P.obj (op (X i))} (hx : Compatible P π x)
+variable {P π}
+
+theorem exists_familyOfElements :
+    ∃ (x' : FamilyOfElements P (ofArrows X π)), ∀ (i : I), x' _ (ofArrows.mk i) = x i := by
+  choose i h h' using @ofArrows_surj _ _ _ _ _ π
+  exact ⟨fun Y f hf ↦ P.map (eqToHom (h f hf).symm).op (x _),
+    fun j ↦ (hx _ j (X j) _ (𝟙 _) <| by rw [← h', id_comp]).trans <| by simp⟩
+
+/--
+A `FamilyOfElements` associated to an explicit family of elements.
+-/
+noncomputable
+def familyOfElements : FamilyOfElements P (ofArrows X π) :=
+  (exists_familyOfElements hx).choose
+
+@[simp]
+theorem familyOfElements_ofArrows_mk (i : I) :
+    hx.familyOfElements _ (ofArrows.mk i) = x i :=
+  (exists_familyOfElements hx).choose_spec _
+
+theorem familyOfElements_compatible : hx.familyOfElements.Compatible := by
+  rintro Y₁ Y₂ Z g₁ g₂ f₁ f₂ ⟨i⟩ ⟨j⟩ hgf
+  simp [hx i j Z g₁ g₂ hgf]
+
+end Arrows.Compatible
+
+theorem isSheafFor_arrows_iff : (ofArrows X π).IsSheafFor P ↔
+    (∀ (x : (i : I) → P.obj (op (X i))), Arrows.Compatible P π x →
+    ∃! t, ∀ i, P.map (π i).op t = x i) := by
+  refine ⟨fun h x hx ↦ ?_, fun h x hx ↦ ?_⟩
+  · obtain ⟨t, ht₁, ht₂⟩ := h _ hx.familyOfElements_compatible
+    refine ⟨t, fun i ↦ ?_, fun t' ht' ↦ ht₂ _ fun _ _ ⟨i⟩ ↦ ?_⟩
+    · rw [ht₁ _ (ofArrows.mk i), hx.familyOfElements_ofArrows_mk]
+    · rw [ht', hx.familyOfElements_ofArrows_mk]
+  · obtain ⟨t, hA, ht⟩ := h (fun i ↦ x (π i) (ofArrows.mk _))
+      (fun i j Z gi gj ↦ hx gi gj (ofArrows.mk _) (ofArrows.mk _))
+    exact ⟨t, fun Y f ⟨i⟩ ↦ hA i, fun y hy ↦ ht y (fun i ↦ hy (π i) (ofArrows.mk _))⟩
+
+variable [(ofArrows X π).hasPullbacks]
+
+/--
+A more explicit version of `FamilyOfElements.PullbackCompatible` for a `Presieve.ofArrows`.
+-/
+def Arrows.PullbackCompatible (x : (i : I) → P.obj (op (X i))) : Prop :=
+  ∀ i j, P.map (pullback.fst (f := π i) (g := π j)).op (x i) =
+    P.map (pullback.snd (f := π i) (g := π j)).op (x j)
+
+theorem Arrows.pullbackCompatible_iff (x : (i : I) → P.obj (op (X i))) :
+    Compatible P π x ↔ PullbackCompatible P π x := by
+  refine ⟨fun t i j ↦ ?_, fun t i j Z gi gj comm ↦ ?_⟩
+  · apply t
+    exact pullback.condition
+  · rw [← pullback.lift_fst _ _ comm, op_comp, FunctorToTypes.map_comp_apply, t i j,
+      ← FunctorToTypes.map_comp_apply, ← op_comp, pullback.lift_snd]
+
+theorem isSheafFor_arrows_iff_pullbacks : (ofArrows X π).IsSheafFor P ↔
+    (∀ (x : (i : I) → P.obj (op (X i))), Arrows.PullbackCompatible P π x →
+    ∃! t, ∀ i, P.map (π i).op t = x i) := by
+  simp_rw [← Arrows.pullbackCompatible_iff, isSheafFor_arrows_iff]
+
+end Arrows
+
 end Presieve
chore: remove some double spaces (#7983)

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

Diff
@@ -145,7 +145,7 @@ theorem pullbackCompatible_iff (x : FamilyOfElements P R) [R.hasPullbacks] :
     haveI := hasPullbacks.has_pullbacks hf₁ hf₂
     apply pullback.condition
   · intro t Y₁ Y₂ Z g₁ g₂ f₁ f₂ hf₁ hf₂ comm
-    haveI := hasPullbacks.has_pullbacks  hf₁ hf₂
+    haveI := hasPullbacks.has_pullbacks hf₁ hf₂
     rw [← pullback.lift_fst _ _ comm, op_comp, FunctorToTypes.map_comp_apply, t hf₁ hf₂,
       ← FunctorToTypes.map_comp_apply, ← op_comp, pullback.lift_snd]
 #align category_theory.presieve.pullback_compatible_iff CategoryTheory.Presieve.pullbackCompatible_iff
chore: split `CategoryTheory/Sites/SheafOfTypes (#7854)

I was planning to add some stuff to this file which was already over 1000 lines long.

  • The explicit sheaf condition for a sieve/presieve IsSheafFor is now in CategoryTheory/Sites/IsSheafFor.
  • The sheaf condition for a sieve/presieve in terms of equalizer diagrams is now in CategoryTheory/Sites/EqualizerSheafCondition
  • Only things related to IsSheaf/IsSeparated are left in the file CategoryTheory/Sites/SheafOfTypes.
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Bhavik Mehta
 -/
 import Mathlib.CategoryTheory.Sites.Pretopology
-import Mathlib.CategoryTheory.Limits.Shapes.Types
+import Mathlib.CategoryTheory.Sites.IsSheafFor
 
 #align_import category_theory.sites.sheaf_of_types from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
 
@@ -15,34 +15,9 @@ Defines the notion of a sheaf of types (usually called a sheaf of sets by mathem
 on a category equipped with a Grothendieck topology, as well as a range of equivalent
 conditions useful in different situations.
 
-First define what it means for a presheaf `P : Cᵒᵖ ⥤ Type v` to be a sheaf *for* a particular
-presieve `R` on `X`:
-* A *family of elements* `x` for `P` at `R` is an element `x_f` of `P Y` for every `f : Y ⟶ X` in
-  `R`. See `FamilyOfElements`.
-* The family `x` is *compatible* if, for any `f₁ : Y₁ ⟶ X` and `f₂ : Y₂ ⟶ X` both in `R`,
-  and any `g₁ : Z ⟶ Y₁` and `g₂ : Z ⟶ Y₂` such that `g₁ ≫ f₁ = g₂ ≫ f₂`, the restriction of
-  `x_f₁` along `g₁` agrees with the restriction of `x_f₂` along `g₂`.
-  See `FamilyOfElements.Compatible`.
-* An *amalgamation* `t` for the family is an element of `P X` such that for every `f : Y ⟶ X` in
-  `R`, the restriction of `t` on `f` is `x_f`.
-  See `FamilyOfElements.IsAmalgamation`.
-We then say `P` is *separated* for `R` if every compatible family has at most one amalgamation,
-and it is a *sheaf* for `R` if every compatible family has a unique amalgamation.
-See `IsSeparatedFor` and `IsSheafFor`.
-
-In the special case where `R` is a sieve, the compatibility condition can be simplified:
-* The family `x` is *compatible* if, for any `f : Y ⟶ X` in `R` and `g : Z ⟶ Y`, the restriction of
-  `x_f` along `g` agrees with `x_(g ≫ f)` (which is well defined since `g ≫ f` is in `R`).
-See `FamilyOfElements.SieveCompatible` and `compatible_iff_sieveCompatible`.
-
-In the special case where `C` has pullbacks, the compatibility condition can be simplified:
-* The family `x` is *compatible* if, for any `f : Y ⟶ X` and `g : Z ⟶ X` both in `R`,
-  the restriction of `x_f` along `π₁ : pullback f g ⟶ Y` agrees with the restriction of `x_g`
-  along `π₂ : pullback f g ⟶ Z`.
-See `FamilyOfElements.PullbackCompatible` and `pullbackCompatible_iff`.
-
-Now given a Grothendieck topology `J`, `P` is a sheaf if it is a sheaf for every sieve in the
-topology. See `IsSheaf`.
+In `Mathlib/CategoryTheory/Sites/IsSheafFor` it is defined what it means for a presheaf to be a
+sheaf *for* a particular sieve. Given a Grothendieck topology `J`, `P` is a sheaf if it is a sheaf
+for every sieve in the topology. See `IsSheaf`.
 
 In the case where the topology is generated by a basis, it suffices to check `P` is a sheaf for
 every presieve in the pretopology. See `isSheaf_pretopology`.
@@ -59,22 +34,10 @@ We also provide equivalent conditions to satisfy alternate definitions given in
 
 * Maclane-Moerdijk [MM92]: Using `compatible_iff_sieveCompatible`, the definitions of `IsSheaf`
   are equivalent. There are also alternate definitions given:
-  - Yoneda condition: Defined in `yonedaSheafCondition` and equivalence in
-    `isSheafFor_iff_yonedaSheafCondition`.
-  - Equalizer condition (Equation 3): Defined in the `Equalizer.Sieve` namespace, and equivalence
-    in `Equalizer.Sieve.sheaf_condition`.
-  - Matching family for presieves with pullback: `pullbackCompatible_iff`.
-  - Sheaf for a pretopology (Prop 1): `isSheaf_pretopology` combined with the previous.
+  - Sheaf for a pretopology (Prop 1): `isSheaf_pretopology` combined with `pullbackCompatible_iff`.
   - Sheaf for a pretopology as equalizer (Prop 1, bis): `Equalizer.Presieve.sheaf_condition`
     combined with the previous.
 
-## Implementation
-
-The sheaf condition is given as a proposition, rather than a subsingleton in `Type (max u₁ v)`.
-This doesn't seem to make a big difference, other than making a couple of definitions noncomputable,
-but it means that equivalent conditions can be given as `↔` statements rather than `≃` statements,
-which can be convenient.
-
 ## References
 
 * [MM92]: *Sheaves in geometry and logic*, Saunders MacLane, and Ieke Moerdijk:
@@ -86,7 +49,7 @@ which can be convenient.
 -/
 
 
-universe w v₁ v₂ u₁ u₂
+universe w v u
 
 namespace CategoryTheory
 
@@ -94,634 +57,14 @@ open Opposite CategoryTheory Category Limits Sieve
 
 namespace Presieve
 
-variable {C : Type u₁} [Category.{v₁} C]
+variable {C : Type u} [Category.{v} C]
 
-variable {P Q U : Cᵒᵖ ⥤ Type w}
+variable {P : Cᵒᵖ ⥤ Type w}
 
-variable {X Y : C} {S : Sieve X} {R : Presieve X}
+variable {X : C}
 
 variable (J J₂ : GrothendieckTopology C)
 
-/-- A family of elements for a presheaf `P` given a collection of arrows `R` with fixed codomain `X`
-consists of an element of `P Y` for every `f : Y ⟶ X` in `R`.
-A presheaf is a sheaf (resp, separated) if every *compatible* family of elements has exactly one
-(resp, at most one) amalgamation.
-
-This data is referred to as a `family` in [MM92], Chapter III, Section 4. It is also a concrete
-version of the elements of the middle object in https://stacks.math.columbia.edu/tag/00VM which is
-more useful for direct calculations. It is also used implicitly in Definition C2.1.2 in [Elephant].
--/
-def FamilyOfElements (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) :=
-  ∀ ⦃Y : C⦄ (f : Y ⟶ X), R f → P.obj (op Y)
-#align category_theory.presieve.family_of_elements CategoryTheory.Presieve.FamilyOfElements
-
-instance : Inhabited (FamilyOfElements P (⊥ : Presieve X)) :=
-  ⟨fun _ _ => False.elim⟩
-
-/-- A family of elements for a presheaf on the presieve `R₂` can be restricted to a smaller presieve
-`R₁`.
--/
-def FamilyOfElements.restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂) :
-    FamilyOfElements P R₂ → FamilyOfElements P R₁ := fun x _ f hf => x f (h _ hf)
-#align category_theory.presieve.family_of_elements.restrict CategoryTheory.Presieve.FamilyOfElements.restrict
-
-/-- A family of elements for the arrow set `R` is *compatible* if for any `f₁ : Y₁ ⟶ X` and
-`f₂ : Y₂ ⟶ X` in `R`, and any `g₁ : Z ⟶ Y₁` and `g₂ : Z ⟶ Y₂`, if the square `g₁ ≫ f₁ = g₂ ≫ f₂`
-commutes then the elements of `P Z` obtained by restricting the element of `P Y₁` along `g₁` and
-restricting the element of `P Y₂` along `g₂` are the same.
-
-In special cases, this condition can be simplified, see `pullbackCompatible_iff` and
-`compatible_iff_sieveCompatible`.
-
-This is referred to as a "compatible family" in Definition C2.1.2 of [Elephant], and on nlab:
-https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents
--/
-def FamilyOfElements.Compatible (x : FamilyOfElements P R) : Prop :=
-  ∀ ⦃Y₁ Y₂ Z⦄ (g₁ : Z ⟶ Y₁) (g₂ : Z ⟶ Y₂) ⦃f₁ : Y₁ ⟶ X⦄ ⦃f₂ : Y₂ ⟶ X⦄ (h₁ : R f₁) (h₂ : R f₂),
-    g₁ ≫ f₁ = g₂ ≫ f₂ → P.map g₁.op (x f₁ h₁) = P.map g₂.op (x f₂ h₂)
-#align category_theory.presieve.family_of_elements.compatible CategoryTheory.Presieve.FamilyOfElements.Compatible
-
-/--
-If the category `C` has pullbacks, this is an alternative condition for a family of elements to be
-compatible: For any `f : Y ⟶ X` and `g : Z ⟶ X` in the presieve `R`, the restriction of the
-given elements for `f` and `g` to the pullback agree.
-This is equivalent to being compatible (provided `C` has pullbacks), shown in
-`pullbackCompatible_iff`.
-
-This is the definition for a "matching" family given in [MM92], Chapter III, Section 4,
-Equation (5). Viewing the type `FamilyOfElements` as the middle object of the fork in
-https://stacks.math.columbia.edu/tag/00VM, this condition expresses that `pr₀* (x) = pr₁* (x)`,
-using the notation defined there.
--/
-def FamilyOfElements.PullbackCompatible (x : FamilyOfElements P R) [R.hasPullbacks] : Prop :=
-  ∀ ⦃Y₁ Y₂⦄ ⦃f₁ : Y₁ ⟶ X⦄ ⦃f₂ : Y₂ ⟶ X⦄ (h₁ : R f₁) (h₂ : R f₂),
-    haveI := hasPullbacks.has_pullbacks h₁ h₂
-    P.map (pullback.fst : Limits.pullback f₁ f₂ ⟶ _).op (x f₁ h₁) = P.map pullback.snd.op (x f₂ h₂)
-#align category_theory.presieve.family_of_elements.pullback_compatible CategoryTheory.Presieve.FamilyOfElements.PullbackCompatible
-
-theorem pullbackCompatible_iff (x : FamilyOfElements P R) [R.hasPullbacks] :
-    x.Compatible ↔ x.PullbackCompatible := by
-  constructor
-  · intro t Y₁ Y₂ f₁ f₂ hf₁ hf₂
-    apply t
-    haveI := hasPullbacks.has_pullbacks hf₁ hf₂
-    apply pullback.condition
-  · intro t Y₁ Y₂ Z g₁ g₂ f₁ f₂ hf₁ hf₂ comm
-    haveI := hasPullbacks.has_pullbacks  hf₁ hf₂
-    rw [← pullback.lift_fst _ _ comm, op_comp, FunctorToTypes.map_comp_apply, t hf₁ hf₂,
-      ← FunctorToTypes.map_comp_apply, ← op_comp, pullback.lift_snd]
-#align category_theory.presieve.pullback_compatible_iff CategoryTheory.Presieve.pullbackCompatible_iff
-
-/-- The restriction of a compatible family is compatible. -/
-theorem FamilyOfElements.Compatible.restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂)
-    {x : FamilyOfElements P R₂} : x.Compatible → (x.restrict h).Compatible :=
-  fun q _ _ _ g₁ g₂ _ _ h₁ h₂ comm => q g₁ g₂ (h _ h₁) (h _ h₂) comm
-#align category_theory.presieve.family_of_elements.compatible.restrict CategoryTheory.Presieve.FamilyOfElements.Compatible.restrict
-
-/-- Extend a family of elements to the sieve generated by an arrow set.
-This is the construction described as "easy" in Lemma C2.1.3 of [Elephant].
--/
-noncomputable def FamilyOfElements.sieveExtend (x : FamilyOfElements P R) :
-    FamilyOfElements P (generate R : Presieve X) := fun _ _ hf =>
-  P.map hf.choose_spec.choose.op (x _ hf.choose_spec.choose_spec.choose_spec.1)
-#align category_theory.presieve.family_of_elements.sieve_extend CategoryTheory.Presieve.FamilyOfElements.sieveExtend
-
-/-- The extension of a compatible family to the generated sieve is compatible. -/
-theorem FamilyOfElements.Compatible.sieveExtend {x : FamilyOfElements P R} (hx : x.Compatible) :
-    x.sieveExtend.Compatible := by
-  intro _ _ _ _ _ _ _ h₁ h₂ comm
-  iterate 2 erw [← FunctorToTypes.map_comp_apply]; rw [← op_comp]
-  apply hx
-  simp [comm, h₁.choose_spec.choose_spec.choose_spec.2, h₂.choose_spec.choose_spec.choose_spec.2]
-#align category_theory.presieve.family_of_elements.compatible.sieve_extend CategoryTheory.Presieve.FamilyOfElements.Compatible.sieveExtend
-
-/-- The extension of a family agrees with the original family. -/
-theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X} (hf : R f) :
-    x.sieveExtend f (le_generate R Y hf) = x f hf := by
-  have h := (le_generate R Y hf).choose_spec
-  unfold FamilyOfElements.sieveExtend
-  rw [t h.choose (𝟙 _) _ hf _]
-  · simp
-  · rw [id_comp]
-    exact h.choose_spec.choose_spec.2
-#align category_theory.presieve.extend_agrees CategoryTheory.Presieve.extend_agrees
-
-/-- The restriction of an extension is the original. -/
-@[simp]
-theorem restrict_extend {x : FamilyOfElements P R} (t : x.Compatible) :
-    x.sieveExtend.restrict (le_generate R) = x := by
-  funext Y f hf
-  exact extend_agrees t hf
-#align category_theory.presieve.restrict_extend CategoryTheory.Presieve.restrict_extend
-
-/--
-If the arrow set for a family of elements is actually a sieve (i.e. it is downward closed) then the
-consistency condition can be simplified.
-This is an equivalent condition, see `compatible_iff_sieveCompatible`.
-
-This is the notion of "matching" given for families on sieves given in [MM92], Chapter III,
-Section 4, Equation 1, and nlab: https://ncatlab.org/nlab/show/matching+family.
-See also the discussion before Lemma C2.1.4 of [Elephant].
--/
-def FamilyOfElements.SieveCompatible (x : FamilyOfElements P (S : Presieve X)) : Prop :=
-  ∀ ⦃Y Z⦄ (f : Y ⟶ X) (g : Z ⟶ Y) (hf), x (g ≫ f) (S.downward_closed hf g) = P.map g.op (x f hf)
-#align category_theory.presieve.family_of_elements.sieve_compatible CategoryTheory.Presieve.FamilyOfElements.SieveCompatible
-
-theorem compatible_iff_sieveCompatible (x : FamilyOfElements P (S : Presieve X)) :
-    x.Compatible ↔ x.SieveCompatible := by
-  constructor
-  · intro h Y Z f g hf
-    simpa using h (𝟙 _) g (S.downward_closed hf g) hf (id_comp _)
-  · intro h Y₁ Y₂ Z g₁ g₂ f₁ f₂ h₁ h₂ k
-    simp_rw [← h f₁ g₁ h₁, ← h f₂ g₂ h₂]
-    congr
-#align category_theory.presieve.compatible_iff_sieve_compatible CategoryTheory.Presieve.compatible_iff_sieveCompatible
-
-theorem FamilyOfElements.Compatible.to_sieveCompatible {x : FamilyOfElements P (S : Presieve X)}
-    (t : x.Compatible) : x.SieveCompatible :=
-  (compatible_iff_sieveCompatible x).1 t
-#align category_theory.presieve.family_of_elements.compatible.to_sieve_compatible CategoryTheory.Presieve.FamilyOfElements.Compatible.to_sieveCompatible
-
-/--
-Given a family of elements `x` for the sieve `S` generated by a presieve `R`, if `x` is restricted
-to `R` and then extended back up to `S`, the resulting extension equals `x`.
--/
-@[simp]
-theorem extend_restrict {x : FamilyOfElements P (generate R)} (t : x.Compatible) :
-    (x.restrict (le_generate R)).sieveExtend = x := by
-  rw [compatible_iff_sieveCompatible] at t
-  funext _ _ h
-  apply (t _ _ _).symm.trans
-  congr
-  exact h.choose_spec.choose_spec.choose_spec.2
-#align category_theory.presieve.extend_restrict CategoryTheory.Presieve.extend_restrict
-
-/--
-Two compatible families on the sieve generated by a presieve `R` are equal if and only if they are
-equal when restricted to `R`.
--/
-theorem restrict_inj {x₁ x₂ : FamilyOfElements P (generate R)} (t₁ : x₁.Compatible)
-    (t₂ : x₂.Compatible) : x₁.restrict (le_generate R) = x₂.restrict (le_generate R) → x₁ = x₂ :=
-  fun h => by
-  rw [← extend_restrict t₁, ← extend_restrict t₂]
-  -- porting note: congr fails to make progress
-  apply congr_arg
-  exact h
-#align category_theory.presieve.restrict_inj CategoryTheory.Presieve.restrict_inj
-
-/-- Compatible families of elements for a presheaf of types `P` and a presieve `R`
-    are in 1-1 correspondence with compatible families for the same presheaf and
-    the sieve generated by `R`, through extension and restriction. -/
-@[simps]
-noncomputable def compatibleEquivGenerateSieveCompatible :
-    { x : FamilyOfElements P R // x.Compatible } ≃
-      { x : FamilyOfElements P (generate R : Presieve X) // x.Compatible } where
-  toFun x := ⟨x.1.sieveExtend, x.2.sieveExtend⟩
-  invFun x := ⟨x.1.restrict (le_generate R), x.2.restrict _⟩
-  left_inv x := Subtype.ext (restrict_extend x.2)
-  right_inv x := Subtype.ext (extend_restrict x.2)
-#align category_theory.presieve.compatible_equiv_generate_sieve_compatible CategoryTheory.Presieve.compatibleEquivGenerateSieveCompatible
-
-theorem FamilyOfElements.comp_of_compatible (S : Sieve X) {x : FamilyOfElements P S}
-    (t : x.Compatible) {f : Y ⟶ X} (hf : S f) {Z} (g : Z ⟶ Y) :
-    x (g ≫ f) (S.downward_closed hf g) = P.map g.op (x f hf) := by
-  simpa using t (𝟙 _) g (S.downward_closed hf g) hf (id_comp _)
-#align category_theory.presieve.family_of_elements.comp_of_compatible CategoryTheory.Presieve.FamilyOfElements.comp_of_compatible
-
-section FunctorPullback
-
-variable {D : Type u₂} [Category.{v₂} D] (F : D ⥤ C) {Z : D}
-
-variable {T : Presieve (F.obj Z)} {x : FamilyOfElements P T}
-
-/--
-Given a family of elements of a sieve `S` on `F(X)`, we can realize it as a family of elements of
-`S.functorPullback F`.
--/
-def FamilyOfElements.functorPullback (x : FamilyOfElements P T) :
-    FamilyOfElements (F.op ⋙ P) (T.functorPullback F) := fun _ f hf => x (F.map f) hf
-#align category_theory.presieve.family_of_elements.functor_pullback CategoryTheory.Presieve.FamilyOfElements.functorPullback
-
-theorem FamilyOfElements.Compatible.functorPullback (h : x.Compatible) :
-    (x.functorPullback F).Compatible := by
-  intro Z₁ Z₂ W g₁ g₂ f₁ f₂ h₁ h₂ eq
-  exact h (F.map g₁) (F.map g₂) h₁ h₂ (by simp only [← F.map_comp, eq])
-#align category_theory.presieve.family_of_elements.compatible.functor_pullback CategoryTheory.Presieve.FamilyOfElements.Compatible.functorPullback
-
-end FunctorPullback
-
-/-- Given a family of elements of a sieve `S` on `X` whose values factors through `F`, we can
-realize it as a family of elements of `S.functorPushforward F`. Since the preimage is obtained by
-choice, this is not well-defined generally.
--/
-noncomputable def FamilyOfElements.functorPushforward {D : Type u₂} [Category.{v₂} D] (F : D ⥤ C)
-    {X : D} {T : Presieve X} (x : FamilyOfElements (F.op ⋙ P) T) :
-    FamilyOfElements P (T.functorPushforward F) := fun Y f h => by
-  obtain ⟨Z, g, h, h₁, _⟩ := getFunctorPushforwardStructure h
-  exact P.map h.op (x g h₁)
-#align category_theory.presieve.family_of_elements.functor_pushforward CategoryTheory.Presieve.FamilyOfElements.functorPushforward
-
-section Pullback
-
-/-- Given a family of elements of a sieve `S` on `X`, and a map `Y ⟶ X`, we can obtain a
-family of elements of `S.pullback f` by taking the same elements.
--/
-def FamilyOfElements.pullback (f : Y ⟶ X) (x : FamilyOfElements P (S : Presieve X)) :
-    FamilyOfElements P (S.pullback f : Presieve Y) := fun _ g hg => x (g ≫ f) hg
-#align category_theory.presieve.family_of_elements.pullback CategoryTheory.Presieve.FamilyOfElements.pullback
-
-theorem FamilyOfElements.Compatible.pullback (f : Y ⟶ X) {x : FamilyOfElements P S}
-    (h : x.Compatible) : (x.pullback f).Compatible := by
-  simp only [compatible_iff_sieveCompatible] at h ⊢
-  intro W Z f₁ f₂ hf
-  unfold FamilyOfElements.pullback
-  rw [← h (f₁ ≫ f) f₂ hf]
-  congr 1
-  simp only [assoc]
-#align category_theory.presieve.family_of_elements.compatible.pullback CategoryTheory.Presieve.FamilyOfElements.Compatible.pullback
-
-end Pullback
-
-/-- Given a morphism of presheaves `f : P ⟶ Q`, we can take a family of elements valued in `P` to a
-family of elements valued in `Q` by composing with `f`.
--/
-def FamilyOfElements.compPresheafMap (f : P ⟶ Q) (x : FamilyOfElements P R) :
-    FamilyOfElements Q R := fun Y g hg => f.app (op Y) (x g hg)
-#align category_theory.presieve.family_of_elements.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.compPresheafMap
-
-@[simp]
-theorem FamilyOfElements.compPresheafMap_id (x : FamilyOfElements P R) :
-    x.compPresheafMap (𝟙 P) = x :=
-  rfl
-#align category_theory.presieve.family_of_elements.comp_presheaf_map_id CategoryTheory.Presieve.FamilyOfElements.compPresheafMap_id
-
-@[simp]
-theorem FamilyOfElements.compPresheafMap_comp (x : FamilyOfElements P R) (f : P ⟶ Q)
-    (g : Q ⟶ U) : (x.compPresheafMap f).compPresheafMap g = x.compPresheafMap (f ≫ g) :=
-  rfl
-#align category_theory.presieve.family_of_elements.comp_prersheaf_map_comp CategoryTheory.Presieve.FamilyOfElements.compPresheafMap_comp
-
-theorem FamilyOfElements.Compatible.compPresheafMap (f : P ⟶ Q) {x : FamilyOfElements P R}
-    (h : x.Compatible) : (x.compPresheafMap f).Compatible := by
-  intro Z₁ Z₂ W g₁ g₂ f₁ f₂ h₁ h₂ eq
-  unfold FamilyOfElements.compPresheafMap
-  rwa [← FunctorToTypes.naturality, ← FunctorToTypes.naturality, h]
-#align category_theory.presieve.family_of_elements.compatible.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.Compatible.compPresheafMap
-
-/--
-The given element `t` of `P.obj (op X)` is an *amalgamation* for the family of elements `x` if every
-restriction `P.map f.op t = x_f` for every arrow `f` in the presieve `R`.
-
-This is the definition given in https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents,
-and https://ncatlab.org/nlab/show/matching+family, as well as [MM92], Chapter III, Section 4,
-equation (2).
--/
-def FamilyOfElements.IsAmalgamation (x : FamilyOfElements P R) (t : P.obj (op X)) : Prop :=
-  ∀ ⦃Y : C⦄ (f : Y ⟶ X) (h : R f), P.map f.op t = x f h
-#align category_theory.presieve.family_of_elements.is_amalgamation CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation
-
-theorem FamilyOfElements.IsAmalgamation.compPresheafMap {x : FamilyOfElements P R} {t} (f : P ⟶ Q)
-    (h : x.IsAmalgamation t) : (x.compPresheafMap f).IsAmalgamation (f.app (op X) t) := by
-  intro Y g hg
-  dsimp [FamilyOfElements.compPresheafMap]
-  change (f.app _ ≫ Q.map _) _ = _
-  rw [← f.naturality, types_comp_apply, h g hg]
-#align category_theory.presieve.family_of_elements.is_amalgamation.comp_presheaf_map CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap
-
-theorem is_compatible_of_exists_amalgamation (x : FamilyOfElements P R)
-    (h : ∃ t, x.IsAmalgamation t) : x.Compatible := by
-  cases' h with t ht
-  intro Y₁ Y₂ Z g₁ g₂ f₁ f₂ h₁ h₂ comm
-  rw [← ht _ h₁, ← ht _ h₂, ← FunctorToTypes.map_comp_apply, ← op_comp, comm]
-  simp
-#align category_theory.presieve.is_compatible_of_exists_amalgamation CategoryTheory.Presieve.is_compatible_of_exists_amalgamation
-
-theorem isAmalgamation_restrict {R₁ R₂ : Presieve X} (h : R₁ ≤ R₂) (x : FamilyOfElements P R₂)
-    (t : P.obj (op X)) (ht : x.IsAmalgamation t) : (x.restrict h).IsAmalgamation t := fun Y f hf =>
-  ht f (h Y hf)
-#align category_theory.presieve.is_amalgamation_restrict CategoryTheory.Presieve.isAmalgamation_restrict
-
-theorem isAmalgamation_sieveExtend {R : Presieve X} (x : FamilyOfElements P R) (t : P.obj (op X))
-    (ht : x.IsAmalgamation t) : x.sieveExtend.IsAmalgamation t := by
-  intro Y f hf
-  dsimp [FamilyOfElements.sieveExtend]
-  rw [← ht _, ← FunctorToTypes.map_comp_apply, ← op_comp, hf.choose_spec.choose_spec.choose_spec.2]
-#align category_theory.presieve.is_amalgamation_sieve_extend CategoryTheory.Presieve.isAmalgamation_sieveExtend
-
-/-- A presheaf is separated for a presieve if there is at most one amalgamation. -/
-def IsSeparatedFor (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) : Prop :=
-  ∀ (x : FamilyOfElements P R) (t₁ t₂), x.IsAmalgamation t₁ → x.IsAmalgamation t₂ → t₁ = t₂
-#align category_theory.presieve.is_separated_for CategoryTheory.Presieve.IsSeparatedFor
-
-theorem IsSeparatedFor.ext {R : Presieve X} (hR : IsSeparatedFor P R) {t₁ t₂ : P.obj (op X)}
-    (h : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (_ : R f), P.map f.op t₁ = P.map f.op t₂) : t₁ = t₂ :=
-  hR (fun _ f _ => P.map f.op t₂) t₁ t₂ (fun _ _ hf => h hf) fun _ _ _ => rfl
-#align category_theory.presieve.is_separated_for.ext CategoryTheory.Presieve.IsSeparatedFor.ext
-
-theorem isSeparatedFor_iff_generate :
-    IsSeparatedFor P R ↔ IsSeparatedFor P (generate R : Presieve X) := by
-  constructor
-  · intro h x t₁ t₂ ht₁ ht₂
-    apply h (x.restrict (le_generate R)) t₁ t₂ _ _
-    · exact isAmalgamation_restrict _ x t₁ ht₁
-    · exact isAmalgamation_restrict _ x t₂ ht₂
-  · intro h x t₁ t₂ ht₁ ht₂
-    apply h x.sieveExtend
-    · exact isAmalgamation_sieveExtend x t₁ ht₁
-    · exact isAmalgamation_sieveExtend x t₂ ht₂
-#align category_theory.presieve.is_separated_for_iff_generate CategoryTheory.Presieve.isSeparatedFor_iff_generate
-
-theorem isSeparatedFor_top (P : Cᵒᵖ ⥤ Type w) : IsSeparatedFor P (⊤ : Presieve X) :=
-  fun x t₁ t₂ h₁ h₂ => by
-  have q₁ := h₁ (𝟙 X) (by tauto)
-  have q₂ := h₂ (𝟙 X) (by tauto)
-  simp only [op_id, FunctorToTypes.map_id_apply] at q₁ q₂
-  rw [q₁, q₂]
-#align category_theory.presieve.is_separated_for_top CategoryTheory.Presieve.isSeparatedFor_top
-
-/-- We define `P` to be a sheaf for the presieve `R` if every compatible family has a unique
-amalgamation.
-
-This is the definition of a sheaf for the given presieve given in C2.1.2 of [Elephant], and
-https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents.
-Using `compatible_iff_sieveCompatible`,
-this is equivalent to the definition of a sheaf in [MM92], Chapter III, Section 4.
--/
-def IsSheafFor (P : Cᵒᵖ ⥤ Type w) (R : Presieve X) : Prop :=
-  ∀ x : FamilyOfElements P R, x.Compatible → ∃! t, x.IsAmalgamation t
-#align category_theory.presieve.is_sheaf_for CategoryTheory.Presieve.IsSheafFor
-
-/-- This is an equivalent condition to be a sheaf, which is useful for the abstraction to local
-operators on elementary toposes. However this definition is defined only for sieves, not presieves.
-The equivalence between this and `IsSheafFor` is given in `isSheafFor_iff_yonedaSheafCondition`.
-This version is also useful to establish that being a sheaf is preserved under isomorphism of
-presheaves.
-
-See the discussion before Equation (3) of [MM92], Chapter III, Section 4. See also C2.1.4 of
-[Elephant]. This is also a direct reformulation of <https://stacks.math.columbia.edu/tag/00Z8>.
--/
-def YonedaSheafCondition (P : Cᵒᵖ ⥤ Type v₁) (S : Sieve X) : Prop :=
-  ∀ f : S.functor ⟶ P, ∃! g, S.functorInclusion ≫ g = f
-#align category_theory.presieve.yoneda_sheaf_condition CategoryTheory.Presieve.YonedaSheafCondition
-
--- TODO: We can generalize the universe parameter v₁ above by composing with
--- appropriate `ulift_functor`s.
-/-- (Implementation). This is a (primarily internal) equivalence between natural transformations
-and compatible families.
-
-Cf the discussion after Lemma 7.47.10 in <https://stacks.math.columbia.edu/tag/00YW>. See also
-the proof of C2.1.4 of [Elephant], and the discussion in [MM92], Chapter III, Section 4.
--/
-def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
-    (S.functor ⟶ P) ≃ { x : FamilyOfElements P (S : Presieve X) // x.Compatible } where
-  toFun α := by
-    refine' ⟨fun Y f hf => _, _⟩
-    · apply α.app (op Y) ⟨_, hf⟩
-    · rw [compatible_iff_sieveCompatible]
-      intro Y Z f g hf
-      dsimp
-      rw [← FunctorToTypes.naturality _ _ α g.op]
-      rfl
-  invFun t :=
-    { app := fun Y f => t.1 _ f.2
-      naturality := fun Y Z g => by
-        ext ⟨f, hf⟩
-        apply t.2.to_sieveCompatible _ }
-  left_inv α := by
-    ext X ⟨_, _⟩
-    rfl
-  right_inv := by
-    rintro ⟨x, hx⟩
-    rfl
-#align category_theory.presieve.nat_trans_equiv_compatible_family CategoryTheory.Presieve.natTransEquivCompatibleFamily
-
-/-- (Implementation). A lemma useful to prove `isSheafFor_iff_yonedaSheafCondition`. -/
-theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.functor ⟶ P) (g : yoneda.obj X ⟶ P) :
-    S.functorInclusion ≫ g = x ↔
-      (natTransEquivCompatibleFamily x).1.IsAmalgamation (yonedaEquiv g) := by
-  change _ ↔ ∀ ⦃Y : C⦄ (f : Y ⟶ X) (h : S f), P.map f.op (yonedaEquiv g) = x.app (op Y) ⟨f, h⟩
-  constructor
-  · rintro rfl Y f hf
-    rw [yonedaEquiv_naturality]
-    dsimp
-    simp
-  -- See note [dsimp, simp].
-  · intro h
-    ext Y ⟨f, hf⟩
-    convert h f hf
-    rw [yonedaEquiv_naturality]
-    simp [yonedaEquiv]
-#align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamation
-
-/-- The yoneda version of the sheaf condition is equivalent to the sheaf condition.
-
-C2.1.4 of [Elephant].
--/
-theorem isSheafFor_iff_yonedaSheafCondition {P : Cᵒᵖ ⥤ Type v₁} :
-    IsSheafFor P (S : Presieve X) ↔ YonedaSheafCondition P S := by
-  rw [IsSheafFor, YonedaSheafCondition]
-  simp_rw [extension_iff_amalgamation]
-  rw [Equiv.forall_congr_left' natTransEquivCompatibleFamily]
-  rw [Subtype.forall]
-  apply ball_congr
-  intro x hx
-  rw [Equiv.exists_unique_congr_left _]
-  simp
-#align category_theory.presieve.is_sheaf_for_iff_yoneda_sheaf_condition CategoryTheory.Presieve.isSheafFor_iff_yonedaSheafCondition
-
-/--
-If `P` is a sheaf for the sieve `S` on `X`, a natural transformation from `S` (viewed as a functor)
-to `P` can be (uniquely) extended to all of `yoneda.obj X`.
-
-      f
-   S  →  P
-   ↓  ↗
-   yX
-
--/
-noncomputable def IsSheafFor.extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P (S : Presieve X))
-    (f : S.functor ⟶ P) : yoneda.obj X ⟶ P :=
-  (isSheafFor_iff_yonedaSheafCondition.1 h f).exists.choose
-#align category_theory.presieve.is_sheaf_for.extend CategoryTheory.Presieve.IsSheafFor.extend
-
-/--
-Show that the extension of `f : S.functor ⟶ P` to all of `yoneda.obj X` is in fact an extension, ie
-that the triangle below commutes, provided `P` is a sheaf for `S`
-
-      f
-   S  →  P
-   ↓  ↗
-   yX
-
--/
-@[reassoc (attr := simp)]
-theorem IsSheafFor.functorInclusion_comp_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S)
-    (f : S.functor ⟶ P) : S.functorInclusion ≫ h.extend f = f :=
-  (isSheafFor_iff_yonedaSheafCondition.1 h f).exists.choose_spec
-#align category_theory.presieve.is_sheaf_for.functor_inclusion_comp_extend CategoryTheory.Presieve.IsSheafFor.functorInclusion_comp_extend
-
-/-- The extension of `f` to `yoneda.obj X` is unique. -/
-theorem IsSheafFor.unique_extend {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P S) {f : S.functor ⟶ P}
-    (t : yoneda.obj X ⟶ P) (ht : S.functorInclusion ≫ t = f) : t = h.extend f :=
-  (isSheafFor_iff_yonedaSheafCondition.1 h f).unique ht (h.functorInclusion_comp_extend f)
-#align category_theory.presieve.is_sheaf_for.unique_extend CategoryTheory.Presieve.IsSheafFor.unique_extend
-
-/--
-If `P` is a sheaf for the sieve `S` on `X`, then if two natural transformations from `yoneda.obj X`
-to `P` agree when restricted to the subfunctor given by `S`, they are equal.
--/
-theorem IsSheafFor.hom_ext {P : Cᵒᵖ ⥤ Type v₁} (h : IsSheafFor P (S : Presieve X))
-    (t₁ t₂ : yoneda.obj X ⟶ P) (ht : S.functorInclusion ≫ t₁ = S.functorInclusion ≫ t₂) :
-    t₁ = t₂ :=
-  (h.unique_extend t₁ ht).trans (h.unique_extend t₂ rfl).symm
-#align category_theory.presieve.is_sheaf_for.hom_ext CategoryTheory.Presieve.IsSheafFor.hom_ext
-
-/-- `P` is a sheaf for `R` iff it is separated for `R` and there exists an amalgamation. -/
-theorem isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor :
-    (IsSeparatedFor P R ∧ ∀ x : FamilyOfElements P R, x.Compatible → ∃ t, x.IsAmalgamation t) ↔
-      IsSheafFor P R := by
-  rw [IsSeparatedFor, ← forall_and]
-  apply forall_congr'
-  intro x
-  constructor
-  · intro z hx
-    exact exists_unique_of_exists_of_unique (z.2 hx) z.1
-  · intro h
-    refine' ⟨_, ExistsUnique.exists ∘ h⟩
-    intro t₁ t₂ ht₁ ht₂
-    apply (h _).unique ht₁ ht₂
-    exact is_compatible_of_exists_amalgamation x ⟨_, ht₂⟩
-#align category_theory.presieve.is_separated_for_and_exists_is_amalgamation_iff_sheaf_for CategoryTheory.Presieve.isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor
-
-/-- If `P` is separated for `R` and every family has an amalgamation, then `P` is a sheaf for `R`.
--/
-theorem IsSeparatedFor.isSheafFor (t : IsSeparatedFor P R) :
-    (∀ x : FamilyOfElements P R, x.Compatible → ∃ t, x.IsAmalgamation t) → IsSheafFor P R := by
-  rw [← isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor]
-  exact And.intro t
-#align category_theory.presieve.is_separated_for.is_sheaf_for CategoryTheory.Presieve.IsSeparatedFor.isSheafFor
-
-/-- If `P` is a sheaf for `R`, it is separated for `R`. -/
-theorem IsSheafFor.isSeparatedFor : IsSheafFor P R → IsSeparatedFor P R := fun q =>
-  (isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor.2 q).1
-#align category_theory.presieve.is_sheaf_for.is_separated_for CategoryTheory.Presieve.IsSheafFor.isSeparatedFor
-
-/-- Get the amalgamation of the given compatible family, provided we have a sheaf. -/
-noncomputable def IsSheafFor.amalgamate (t : IsSheafFor P R) (x : FamilyOfElements P R)
-    (hx : x.Compatible) : P.obj (op X) :=
-  (t x hx).exists.choose
-#align category_theory.presieve.is_sheaf_for.amalgamate CategoryTheory.Presieve.IsSheafFor.amalgamate
-
-theorem IsSheafFor.isAmalgamation (t : IsSheafFor P R) {x : FamilyOfElements P R}
-    (hx : x.Compatible) : x.IsAmalgamation (t.amalgamate x hx) :=
-  (t x hx).exists.choose_spec
-#align category_theory.presieve.is_sheaf_for.is_amalgamation CategoryTheory.Presieve.IsSheafFor.isAmalgamation
-
-@[simp]
-theorem IsSheafFor.valid_glue (t : IsSheafFor P R) {x : FamilyOfElements P R} (hx : x.Compatible)
-    (f : Y ⟶ X) (Hf : R f) : P.map f.op (t.amalgamate x hx) = x f Hf :=
-  t.isAmalgamation hx f Hf
-#align category_theory.presieve.is_sheaf_for.valid_glue CategoryTheory.Presieve.IsSheafFor.valid_glue
-
-/-- C2.1.3 in [Elephant] -/
-theorem isSheafFor_iff_generate (R : Presieve X) :
-    IsSheafFor P R ↔ IsSheafFor P (generate R : Presieve X) := by
-  rw [← isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor]
-  rw [← isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor]
-  rw [← isSeparatedFor_iff_generate]
-  apply and_congr (Iff.refl _)
-  constructor
-  · intro q x hx
-    apply Exists.imp _ (q _ (hx.restrict (le_generate R)))
-    intro t ht
-    simpa [hx] using isAmalgamation_sieveExtend _ _ ht
-  · intro q x hx
-    apply Exists.imp _ (q _ hx.sieveExtend)
-    intro t ht
-    simpa [hx] using isAmalgamation_restrict (le_generate R) _ _ ht
-#align category_theory.presieve.is_sheaf_for_iff_generate CategoryTheory.Presieve.isSheafFor_iff_generate
-
-/-- Every presheaf is a sheaf for the family {𝟙 X}.
-
-[Elephant] C2.1.5(i)
--/
-theorem isSheafFor_singleton_iso (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P (Presieve.singleton (𝟙 X)) := by
-  intro x _
-  refine' ⟨x _ (Presieve.singleton_self _), _, _⟩
-  · rintro _ _ ⟨rfl, rfl⟩
-    simp
-  · intro t ht
-    simpa using ht _ (Presieve.singleton_self _)
-#align category_theory.presieve.is_sheaf_for_singleton_iso CategoryTheory.Presieve.isSheafFor_singletonₓ_iso
-
-/-- Every presheaf is a sheaf for the maximal sieve.
-
-[Elephant] C2.1.5(ii)
--/
-theorem isSheafFor_top_sieve (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P ((⊤ : Sieve X) : Presieve X) := by
-  rw [← generate_of_singleton_isSplitEpi (𝟙 X)]
-  rw [← isSheafFor_iff_generate]
-  apply isSheafFor_singleton_iso
-#align category_theory.presieve.is_sheaf_for_top_sieve CategoryTheory.Presieve.isSheafFor_top_sieve
-
-/-- If `P` is a sheaf for `S`, and it is iso to `P'`, then `P'` is a sheaf for `S`. This shows that
-"being a sheaf for a presieve" is a mathematical or hygienic property.
--/
-theorem isSheafFor_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') : IsSheafFor P R → IsSheafFor P' R := by
-  intro h x hx
-  let x' := x.compPresheafMap i.inv
-  have : x'.Compatible := FamilyOfElements.Compatible.compPresheafMap i.inv hx
-  obtain ⟨t, ht1, ht2⟩ := h x' this
-  use i.hom.app _ t
-  fconstructor
-  · convert FamilyOfElements.IsAmalgamation.compPresheafMap i.hom ht1
-    simp
-  · intro y hy
-    rw [show y = (i.inv.app (op X) ≫ i.hom.app (op X)) y by simp]
-    simp [ht2 (i.inv.app _ y) (FamilyOfElements.IsAmalgamation.compPresheafMap i.inv hy)]
-#align category_theory.presieve.is_sheaf_for_iso CategoryTheory.Presieve.isSheafFor_iso
-
-/-- If a presieve `R` on `X` has a subsieve `S` such that:
-
-* `P` is a sheaf for `S`.
-* For every `f` in `R`, `P` is separated for the pullback of `S` along `f`,
-
-then `P` is a sheaf for `R`.
-
-This is closely related to [Elephant] C2.1.6(i).
--/
-theorem isSheafFor_subsieve_aux (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Presieve X}
-    (h : (S : Presieve X) ≤ R) (hS : IsSheafFor P (S : Presieve X))
-    (trans : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄, R f → IsSeparatedFor P (S.pullback f : Presieve Y)) :
-    IsSheafFor P R := by
-  rw [← isSeparatedFor_and_exists_isAmalgamation_iff_isSheafFor]
-  constructor
-  · intro x t₁ t₂ ht₁ ht₂
-    exact
-      hS.isSeparatedFor _ _ _ (isAmalgamation_restrict h x t₁ ht₁)
-        (isAmalgamation_restrict h x t₂ ht₂)
-  · intro x hx
-    use hS.amalgamate _ (hx.restrict h)
-    intro W j hj
-    apply (trans hj).ext
-    intro Y f hf
-    rw [← FunctorToTypes.map_comp_apply, ← op_comp, hS.valid_glue (hx.restrict h) _ hf,
-      FamilyOfElements.restrict, ← hx (𝟙 _) f (h _ hf) _ (id_comp _)]
-    simp
-#align category_theory.presieve.is_sheaf_for_subsieve_aux CategoryTheory.Presieve.isSheafFor_subsieve_aux
-
-/--
-If `P` is a sheaf for every pullback of the sieve `S`, then `P` is a sheaf for any presieve which
-contains `S`.
-This is closely related to [Elephant] C2.1.6.
--/
-theorem isSheafFor_subsieve (P : Cᵒᵖ ⥤ Type w) {S : Sieve X} {R : Presieve X}
-    (h : (S : Presieve X) ≤ R) (trans : ∀ ⦃Y⦄ (f : Y ⟶ X),
-      IsSheafFor P (S.pullback f : Presieve Y)) :
-    IsSheafFor P R :=
-  isSheafFor_subsieve_aux P h (by simpa using trans (𝟙 _)) fun Y f _ => (trans f).isSeparatedFor
-#align category_theory.presieve.is_sheaf_for_subsieve CategoryTheory.Presieve.isSheafFor_subsieve
-
 /-- A presheaf is separated for a topology if it is separated for every sieve in the topology. -/
 def IsSeparated (P : Cᵒᵖ ⥤ Type w) : Prop :=
   ∀ {X} (S : Sieve X), S ∈ J X → IsSeparatedFor P (S : Presieve X)
@@ -754,7 +97,7 @@ theorem isSheaf_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') (h : IsSheaf J P) :
   fun _ S hS => isSheafFor_iso i (h S hS)
 #align category_theory.presieve.is_sheaf_iso CategoryTheory.Presieve.isSheaf_iso
 
-theorem isSheaf_of_yoneda {P : Cᵒᵖ ⥤ Type v₁}
+theorem isSheaf_of_yoneda {P : Cᵒᵖ ⥤ Type v}
     (h : ∀ {X} (S : Sieve X), S ∈ J X → YonedaSheafCondition P S) : IsSheaf J P := fun _ _ hS =>
   isSheafFor_iff_yonedaSheafCondition.2 (h _ hS)
 #align category_theory.presieve.is_sheaf_of_yoneda CategoryTheory.Presieve.isSheaf_of_yoneda
@@ -815,7 +158,7 @@ end Presieve
 namespace Sieve
 open Presieve
 
-variable {C : Type u₁} [Category.{v₁} C]
+variable {C : Type u} [Category.{v} C]
 
 variable {X : C}
 
@@ -870,240 +213,12 @@ theorem forallYonedaIsSheaf_iff_colimit (S : Sieve X) :
 
 end Sieve
 
-namespace Equalizer
-
-variable {C : Type u₁} [Category.{v₁} C] (P : Cᵒᵖ ⥤ Type max v₁ u₁) {X : C} (R : Presieve X)
-  (S : Sieve X)
-
-noncomputable section
-
-/--
-The middle object of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram
-of <https://stacks.math.columbia.edu/tag/00VM>.
--/
-def FirstObj : Type max v₁ u₁ :=
-  ∏ fun f : ΣY, { f : Y ⟶ X // R f } => P.obj (op f.1)
-#align category_theory.equalizer.first_obj CategoryTheory.Equalizer.FirstObj
-
-variable {P R}
-
--- porting note: added to ease automation
-@[ext]
-lemma FirstObj.ext (z₁ z₂ : FirstObj P R) (h : ∀ (Y : C) (f : Y ⟶ X)
-    (hf : R f), (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶ _) z₁ =
-      (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶ _) z₂) : z₁ = z₂ := by
-  apply Limits.Types.limit_ext
-  rintro ⟨⟨Y, f, hf⟩⟩
-  exact h Y f hf
-
-variable (P R)
-
-/-- Show that `FirstObj` is isomorphic to `FamilyOfElements`. -/
-@[simps]
-def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P where
-  hom t Y f hf := Pi.π (fun f : ΣY, { f : Y ⟶ X // R f } => P.obj (op f.1)) ⟨_, _, hf⟩ t
-  inv := Pi.lift fun f x => x _ f.2.2
-#align category_theory.equalizer.first_obj_eq_family CategoryTheory.Equalizer.firstObjEqFamily
-
-instance : Inhabited (FirstObj P (⊥ : Presieve X)) :=
-  (firstObjEqFamily P _).toEquiv.inhabited
-
--- porting note: was not needed in mathlib
-instance : Inhabited (FirstObj P ((⊥ : Sieve X) : Presieve X)) :=
-  (inferInstance : Inhabited (FirstObj P (⊥ : Presieve X)))
-
-/--
-The left morphism of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram
-of <https://stacks.math.columbia.edu/tag/00VM>.
--/
-def forkMap : P.obj (op X) ⟶ FirstObj P R :=
-  Pi.lift fun f => P.map f.2.1.op
-#align category_theory.equalizer.fork_map CategoryTheory.Equalizer.forkMap
-
-/-!
-This section establishes the equivalence between the sheaf condition of Equation (3) [MM92] and
-the definition of `IsSheafFor`.
--/
-
-
-namespace Sieve
-
-/-- The rightmost object of the fork diagram of Equation (3) [MM92], which contains the data used
-to check a family is compatible.
--/
-def SecondObj : Type max v₁ u₁ :=
-  ∏ fun f : Σ(Y Z : _) (_ : Z ⟶ Y), { f' : Y ⟶ X // S f' } => P.obj (op f.2.1)
-#align category_theory.equalizer.sieve.second_obj CategoryTheory.Equalizer.Sieve.SecondObj
-
-variable {P S}
-
--- porting note: added to ease automation
-@[ext]
-lemma SecondObj.ext (z₁ z₂ : SecondObj P S) (h : ∀ (Y Z : C) (g : Z ⟶ Y) (f : Y ⟶ X)
-    (hf : S.arrows f), (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶ _) z₁ =
-      (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶ _) z₂) : z₁ = z₂ := by
-  apply Limits.Types.limit_ext
-  rintro ⟨⟨Y, Z, g, f, hf⟩⟩
-  apply h
-
-variable (P S)
-
-/-- The map `p` of Equations (3,4) [MM92]. -/
-def firstMap : FirstObj P (S : Presieve X) ⟶ SecondObj P S :=
-  Pi.lift fun fg =>
-    Pi.π _ (⟨_, _, S.downward_closed fg.2.2.2.2 fg.2.2.1⟩ : ΣY, { f : Y ⟶ X // S f })
-#align category_theory.equalizer.sieve.first_map CategoryTheory.Equalizer.Sieve.firstMap
-
-instance : Inhabited (SecondObj P (⊥ : Sieve X)) :=
-  ⟨firstMap _ _ default⟩
-
-/-- The map `a` of Equations (3,4) [MM92]. -/
-def secondMap : FirstObj P (S : Presieve X) ⟶ SecondObj P S :=
-  Pi.lift fun fg => Pi.π _ ⟨_, fg.2.2.2⟩ ≫ P.map fg.2.2.1.op
-#align category_theory.equalizer.sieve.second_map CategoryTheory.Equalizer.Sieve.secondMap
-
-theorem w : forkMap P (S : Presieve X) ≫ firstMap P S = forkMap P S ≫ secondMap P S := by
-  ext
-  simp [firstMap, secondMap, forkMap]
-#align category_theory.equalizer.sieve.w CategoryTheory.Equalizer.Sieve.w
-
-/--
-The family of elements given by `x : FirstObj P S` is compatible iff `firstMap` and `secondMap`
-map it to the same point.
--/
-theorem compatible_iff (x : FirstObj P S) :
-    ((firstObjEqFamily P S).hom x).Compatible ↔ firstMap P S x = secondMap P S x := by
-  rw [Presieve.compatible_iff_sieveCompatible]
-  constructor
-  · intro t
-    apply SecondObj.ext
-    intros Y Z g f hf
-    simpa [firstMap, secondMap] using t _ g hf
-  · intro t Y Z f g hf
-    rw [Types.limit_ext_iff'] at t
-    simpa [firstMap, secondMap] using t ⟨⟨Y, Z, g, f, hf⟩⟩
-#align category_theory.equalizer.sieve.compatible_iff CategoryTheory.Equalizer.Sieve.compatible_iff
-
-/-- `P` is a sheaf for `S`, iff the fork given by `w` is an equalizer. -/
-theorem equalizer_sheaf_condition :
-    Presieve.IsSheafFor P (S : Presieve X) ↔ Nonempty (IsLimit (Fork.ofι _ (w P S))) := by
-  rw [Types.type_equalizer_iff_unique,
-    ← Equiv.forall_congr_left (firstObjEqFamily P (S : Presieve X)).toEquiv.symm]
-  simp_rw [← compatible_iff]
-  simp only [inv_hom_id_apply, Iso.toEquiv_symm_fun]
-  apply ball_congr
-  intro x _
-  apply exists_unique_congr
-  intro t
-  rw [← Iso.toEquiv_symm_fun]
-  rw [Equiv.eq_symm_apply]
-  constructor
-  · intro q
-    funext Y f hf
-    simpa [firstObjEqFamily, forkMap] using q _ _
-  · intro q Y f hf
-    rw [← q]
-    simp [firstObjEqFamily, forkMap]
-#align category_theory.equalizer.sieve.equalizer_sheaf_condition CategoryTheory.Equalizer.Sieve.equalizer_sheaf_condition
-
-end Sieve
-
-/-!
-This section establishes the equivalence between the sheaf condition of
-https://stacks.math.columbia.edu/tag/00VM and the definition of `isSheafFor`.
--/
-
-
-namespace Presieve
-
-variable [R.hasPullbacks]
-
-/-- The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM, which
-contains the data used to check a family of elements for a presieve is compatible.
--/
-@[simp] def SecondObj : Type max v₁ u₁ :=
-  ∏ fun fg : (ΣY, { f : Y ⟶ X // R f }) × ΣZ, { g : Z ⟶ X // R g } =>
-    haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
-    P.obj (op (pullback fg.1.2.1 fg.2.2.1))
-#align category_theory.equalizer.presieve.second_obj CategoryTheory.Equalizer.Presieve.SecondObj
-
-/-- The map `pr₀*` of <https://stacks.math.columbia.edu/tag/00VL>. -/
-def firstMap : FirstObj P R ⟶ SecondObj P R :=
-  Pi.lift fun fg =>
-    haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
-    Pi.π _ _ ≫ P.map pullback.fst.op
-#align category_theory.equalizer.presieve.first_map CategoryTheory.Equalizer.Presieve.firstMap
-
-instance [HasPullbacks C] : Inhabited (SecondObj P (⊥ : Presieve X)) :=
-  ⟨firstMap _ _ default⟩
-
-/-- The map `pr₁*` of <https://stacks.math.columbia.edu/tag/00VL>. -/
-def secondMap : FirstObj P R ⟶ SecondObj P R :=
-  Pi.lift fun fg =>
-    haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
-    Pi.π _ _ ≫ P.map pullback.snd.op
-#align category_theory.equalizer.presieve.second_map CategoryTheory.Equalizer.Presieve.secondMap
-
-theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R := by
-  dsimp
-  ext fg
-  simp only [firstMap, secondMap, forkMap]
-  simp only [limit.lift_π, limit.lift_π_assoc, assoc, Fan.mk_π_app]
-  haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
-  rw [← P.map_comp, ← op_comp, pullback.condition]
-  simp
-#align category_theory.equalizer.presieve.w CategoryTheory.Equalizer.Presieve.w
-
-/--
-The family of elements given by `x : FirstObj P S` is compatible iff `firstMap` and `secondMap`
-map it to the same point.
--/
-theorem compatible_iff (x : FirstObj P R) :
-    ((firstObjEqFamily P R).hom x).Compatible ↔ firstMap P R x = secondMap P R x := by
-  rw [Presieve.pullbackCompatible_iff]
-  constructor
-  · intro t
-    apply Limits.Types.limit_ext
-    rintro ⟨⟨Y, f, hf⟩, Z, g, hg⟩
-    simpa [firstMap, secondMap] using t hf hg
-  · intro t Y Z f g hf hg
-    rw [Types.limit_ext_iff'] at t
-    simpa [firstMap, secondMap] using t ⟨⟨⟨Y, f, hf⟩, Z, g, hg⟩⟩
-#align category_theory.equalizer.presieve.compatible_iff CategoryTheory.Equalizer.Presieve.compatible_iff
-
-/-- `P` is a sheaf for `R`, iff the fork given by `w` is an equalizer.
-See <https://stacks.math.columbia.edu/tag/00VM>.
--/
-theorem sheaf_condition : R.IsSheafFor P ↔ Nonempty (IsLimit (Fork.ofι _ (w P R))) := by
-  rw [Types.type_equalizer_iff_unique]
-  erw [← Equiv.forall_congr_left (firstObjEqFamily P R).toEquiv.symm]
-  simp_rw [← compatible_iff, ← Iso.toEquiv_fun, Equiv.apply_symm_apply]
-  apply ball_congr
-  intro x _
-  apply exists_unique_congr
-  intro t
-  rw [Equiv.eq_symm_apply]
-  constructor
-  · intro q
-    funext Y f hf
-    simpa [forkMap] using q _ _
-  · intro q Y f hf
-    rw [← q]
-    simp [forkMap]
-#align category_theory.equalizer.presieve.sheaf_condition CategoryTheory.Equalizer.Presieve.sheaf_condition
-
-end Presieve
-
-end
-
-end Equalizer
-
-variable {C : Type u₁} [Category.{v₁} C]
+variable {C : Type u} [Category.{v} C]
 
 variable (J : GrothendieckTopology C)
 
 /-- The category of sheaves on a grothendieck topology. -/
-structure SheafOfTypes (J : GrothendieckTopology C) : Type max u₁ v₁ (w + 1) where
+structure SheafOfTypes (J : GrothendieckTopology C) : Type max u v (w + 1) where
   /-- the underlying presheaf -/
   val : Cᵒᵖ ⥤ Type w
   /-- the condition that the presheaf is a sheaf -/
chore: split `CategoryTheory/Sites/SheafOfTypes (#7854)

I was planning to add some stuff to this file which was already over 1000 lines long.

  • The explicit sheaf condition for a sieve/presieve IsSheafFor is now in CategoryTheory/Sites/IsSheafFor.
  • The sheaf condition for a sieve/presieve in terms of equalizer diagrams is now in CategoryTheory/Sites/EqualizerSheafCondition
  • Only things related to IsSheaf/IsSeparated are left in the file CategoryTheory/Sites/SheafOfTypes.
chore: split `CategoryTheory/Sites/SheafOfTypes (#7854)

I was planning to add some stuff to this file which was already over 1000 lines long.

  • The explicit sheaf condition for a sieve/presieve IsSheafFor is now in CategoryTheory/Sites/IsSheafFor.
  • The sheaf condition for a sieve/presieve in terms of equalizer diagrams is now in CategoryTheory/Sites/EqualizerSheafCondition
  • Only things related to IsSheaf/IsSeparated are left in the file CategoryTheory/Sites/SheafOfTypes.
feat: generalize sheaf condition to only the relevant pullbacks existing (#6750)

We define a predicate Presieve.hasPullbacks which says that the pullback of every pair of arrows in the presieve exists. This allows to generalize Equalizer.Presieve.sheaf_condition to categories that don't necessarily have all pullbacks (such as Stonean).

Co-authored-by: Riccardo Brasca @riccardobrasca [riccardo.brasca@gmail.com](mailto:riccardo.brasca@gmail.com) Co-authored-by: Filippo A E Nuccio @faenuccio [filippo.nuccio@univ-st-etienne.fr](mailto:filippo.nuccio@univ-st-etienne.fr)

Diff
@@ -153,18 +153,21 @@ Equation (5). Viewing the type `FamilyOfElements` as the middle object of the fo
 https://stacks.math.columbia.edu/tag/00VM, this condition expresses that `pr₀* (x) = pr₁* (x)`,
 using the notation defined there.
 -/
-def FamilyOfElements.PullbackCompatible (x : FamilyOfElements P R) [HasPullbacks C] : Prop :=
+def FamilyOfElements.PullbackCompatible (x : FamilyOfElements P R) [R.hasPullbacks] : Prop :=
   ∀ ⦃Y₁ Y₂⦄ ⦃f₁ : Y₁ ⟶ X⦄ ⦃f₂ : Y₂ ⟶ X⦄ (h₁ : R f₁) (h₂ : R f₂),
-    P.map (pullback.fst : pullback f₁ f₂ ⟶ _).op (x f₁ h₁) = P.map pullback.snd.op (x f₂ h₂)
+    haveI := hasPullbacks.has_pullbacks h₁ h₂
+    P.map (pullback.fst : Limits.pullback f₁ f₂ ⟶ _).op (x f₁ h₁) = P.map pullback.snd.op (x f₂ h₂)
 #align category_theory.presieve.family_of_elements.pullback_compatible CategoryTheory.Presieve.FamilyOfElements.PullbackCompatible
 
-theorem pullbackCompatible_iff (x : FamilyOfElements P R) [HasPullbacks C] :
+theorem pullbackCompatible_iff (x : FamilyOfElements P R) [R.hasPullbacks] :
     x.Compatible ↔ x.PullbackCompatible := by
   constructor
   · intro t Y₁ Y₂ f₁ f₂ hf₁ hf₂
     apply t
+    haveI := hasPullbacks.has_pullbacks hf₁ hf₂
     apply pullback.condition
   · intro t Y₁ Y₂ Z g₁ g₂ f₁ f₂ hf₁ hf₂ comm
+    haveI := hasPullbacks.has_pullbacks  hf₁ hf₂
     rw [← pullback.lift_fst _ _ comm, op_comp, FunctorToTypes.map_comp_apply, t hf₁ hf₂,
       ← FunctorToTypes.map_comp_apply, ← op_comp, pullback.lift_snd]
 #align category_theory.presieve.pullback_compatible_iff CategoryTheory.Presieve.pullbackCompatible_iff
@@ -1013,34 +1016,40 @@ https://stacks.math.columbia.edu/tag/00VM and the definition of `isSheafFor`.
 
 namespace Presieve
 
-variable [HasPullbacks C]
+variable [R.hasPullbacks]
 
 /-- The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM, which
 contains the data used to check a family of elements for a presieve is compatible.
 -/
 @[simp] def SecondObj : Type max v₁ u₁ :=
   ∏ fun fg : (ΣY, { f : Y ⟶ X // R f }) × ΣZ, { g : Z ⟶ X // R g } =>
+    haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
     P.obj (op (pullback fg.1.2.1 fg.2.2.1))
 #align category_theory.equalizer.presieve.second_obj CategoryTheory.Equalizer.Presieve.SecondObj
 
 /-- The map `pr₀*` of <https://stacks.math.columbia.edu/tag/00VL>. -/
 def firstMap : FirstObj P R ⟶ SecondObj P R :=
-  Pi.lift fun _ => Pi.π _ _ ≫ P.map pullback.fst.op
+  Pi.lift fun fg =>
+    haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
+    Pi.π _ _ ≫ P.map pullback.fst.op
 #align category_theory.equalizer.presieve.first_map CategoryTheory.Equalizer.Presieve.firstMap
 
-instance : Inhabited (SecondObj P (⊥ : Presieve X)) :=
+instance [HasPullbacks C] : Inhabited (SecondObj P (⊥ : Presieve X)) :=
   ⟨firstMap _ _ default⟩
 
 /-- The map `pr₁*` of <https://stacks.math.columbia.edu/tag/00VL>. -/
 def secondMap : FirstObj P R ⟶ SecondObj P R :=
-  Pi.lift fun _ => Pi.π _ _ ≫ P.map pullback.snd.op
+  Pi.lift fun fg =>
+    haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
+    Pi.π _ _ ≫ P.map pullback.snd.op
 #align category_theory.equalizer.presieve.second_map CategoryTheory.Equalizer.Presieve.secondMap
 
 theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R := by
   dsimp
-  ext
+  ext fg
   simp only [firstMap, secondMap, forkMap]
   simp only [limit.lift_π, limit.lift_π_assoc, assoc, Fan.mk_π_app]
+  haveI := Presieve.hasPullbacks.has_pullbacks fg.1.2.2 fg.2.2.2
   rw [← P.map_comp, ← op_comp, pullback.condition]
   simp
 #align category_theory.equalizer.presieve.w CategoryTheory.Equalizer.Presieve.w
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,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
-
-! This file was ported from Lean 3 source module category_theory.sites.sheaf_of_types
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Sites.Pretopology
 import Mathlib.CategoryTheory.Limits.Shapes.Types
 
+#align_import category_theory.sites.sheaf_of_types from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
+
 /-!
 # Sheaves of types on a Grothendieck topology
 
chore: cleanup whitespace (#5988)

Grepping for [^ .:{-] [^ :] and reviewing the results. Once I started I couldn't stop. :-)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -372,7 +372,7 @@ theorem FamilyOfElements.Compatible.compPresheafMap (f : P ⟶ Q) {x : FamilyOfE
 The given element `t` of `P.obj (op X)` is an *amalgamation* for the family of elements `x` if every
 restriction `P.map f.op t = x_f` for every arrow `f` in the presieve `R`.
 
-This is the definition given in  https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents,
+This is the definition given in https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents,
 and https://ncatlab.org/nlab/show/matching+family, as well as [MM92], Chapter III, Section 4,
 equation (2).
 -/
@@ -890,8 +890,8 @@ variable {P R}
 -- porting note: added to ease automation
 @[ext]
 lemma FirstObj.ext (z₁ z₂ : FirstObj P R) (h : ∀ (Y : C) (f : Y ⟶ X)
-    (hf : R f), (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶  _) z₁ =
-      (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶  _) z₂) : z₁ = z₂ := by
+    (hf : R f), (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶ _) z₁ =
+      (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶ _) z₂) : z₁ = z₂ := by
   apply Limits.Types.limit_ext
   rintro ⟨⟨Y, f, hf⟩⟩
   exact h Y f hf
@@ -940,8 +940,8 @@ variable {P S}
 -- porting note: added to ease automation
 @[ext]
 lemma SecondObj.ext (z₁ z₂ : SecondObj P S) (h : ∀ (Y Z : C) (g : Z ⟶ Y) (f : Y ⟶ X)
-    (hf : S.arrows f), (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶  _) z₁ =
-      (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶  _) z₂) : z₁ = z₂ := by
+    (hf : S.arrows f), (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶ _) z₁ =
+      (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶ _) z₂) : z₁ = z₂ := by
   apply Limits.Types.limit_ext
   rintro ⟨⟨Y, Z, g, f, hf⟩⟩
   apply h
chore: tidy various files (#5840)
Diff
@@ -792,23 +792,23 @@ Note: This is related to `CategoryTheory.Presheaf.conesEquivSieveCompatibleFamil
  -/
 
 def compatibleYonedaFamily_toCocone (R : Presieve X) (W : C) (x : FamilyOfElements (yoneda.obj W) R)
-  (hx : FamilyOfElements.Compatible x) :
-     Cocone (R.diagram)  where
+    (hx : FamilyOfElements.Compatible x) :
+    Cocone (R.diagram) where
   pt := W
-  ι  := {
-    app := fun f => x f.obj.hom f.property
-    naturality := by
-      intro g₁ g₂ F
-      simp only [Functor.id_obj, Functor.comp_obj, fullSubcategoryInclusion.obj, Over.forget_obj,
+  ι :=
+    { app := fun f => x f.obj.hom f.property
+      naturality := by
+        intro g₁ g₂ F
+        simp only [Functor.id_obj, Functor.comp_obj, fullSubcategoryInclusion.obj, Over.forget_obj,
           Functor.const_obj_obj, Functor.comp_map, fullSubcategoryInclusion.map, Over.forget_map,
           Functor.const_obj_map, Category.comp_id]
-      rw [← Category.id_comp (x g₁.obj.hom g₁.property)]
-      apply hx
-      simp only [Functor.id_obj, Over.w, Opposite.unop_op, Category.id_comp]
-  }
+        rw [← Category.id_comp (x g₁.obj.hom g₁.property)]
+        apply hx
+        simp only [Functor.id_obj, Over.w, Opposite.unop_op, Category.id_comp] }
 
 def yonedaFamilyOfElements_fromCocone (R : Presieve X) (s : Cocone (diagram R)) :
-      FamilyOfElements (yoneda.obj s.pt) R := fun _ f hf => s.ι.app ⟨Over.mk f, hf⟩
+    FamilyOfElements (yoneda.obj s.pt) R :=
+  fun _ f hf => s.ι.app ⟨Over.mk f, hf⟩
 
 end Presieve
 
@@ -845,21 +845,21 @@ theorem forallYonedaIsSheaf_iff_colimit (S : Sieve X) :
   constructor
   · intro H
     refine Nonempty.intro ?_
-    exact {
-    desc := fun s => H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
+    exact
+    { desc := fun s => H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
         (yonedaFamily_fromCocone_compatible S s) |>.choose
-    fac := by
-      intro s f
-      replace H := H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
-         (yonedaFamily_fromCocone_compatible S s)
-      have ht := H.choose_spec.1 f.obj.hom f.property
-      aesop_cat
-    uniq := by
-      intro s Fs HFs
-      replace H := H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
+      fac := by
+        intro s f
+        replace H := H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
+          (yonedaFamily_fromCocone_compatible S s)
+        have ht := H.choose_spec.1 f.obj.hom f.property
+        aesop_cat
+      uniq := by
+        intro s Fs HFs
+        replace H := H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
           (yonedaFamily_fromCocone_compatible S s)
-      apply H.choose_spec.2 Fs
-      exact fun _ f hf => HFs ⟨Over.mk f, hf⟩  }
+        apply H.choose_spec.2 Fs
+        exact fun _ f hf => HFs ⟨Over.mk f, hf⟩ }
   · intro H W x hx
     replace H := Classical.choice H
     let s := compatibleYonedaFamily_toCocone S W x hx
feat: using UnivLE in constructing limits in Type (#5724)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Apurva <apurvnakade@gmail.com> Co-authored-by: Jon Eugster <eugster.jon@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Johan Commelin <johan@commelin.net>

Diff
@@ -892,7 +892,7 @@ variable {P R}
 lemma FirstObj.ext (z₁ z₂ : FirstObj P R) (h : ∀ (Y : C) (f : Y ⟶ X)
     (hf : R f), (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶  _) z₁ =
       (Pi.π _ ⟨Y, f, hf⟩ : FirstObj P R ⟶  _) z₂) : z₁ = z₂ := by
-  apply Limits.Types.limit_ext.{max u₁ v₁, u₁}
+  apply Limits.Types.limit_ext
   rintro ⟨⟨Y, f, hf⟩⟩
   exact h Y f hf
 
@@ -942,7 +942,7 @@ variable {P S}
 lemma SecondObj.ext (z₁ z₂ : SecondObj P S) (h : ∀ (Y Z : C) (g : Z ⟶ Y) (f : Y ⟶ X)
     (hf : S.arrows f), (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶  _) z₁ =
       (Pi.π _ ⟨Y, Z, g, f, hf⟩ : SecondObj P S ⟶  _) z₂) : z₁ = z₂ := by
-  apply Limits.Types.limit_ext.{max u₁ v₁, u₁}
+  apply Limits.Types.limit_ext
   rintro ⟨⟨Y, Z, g, f, hf⟩⟩
   apply h
 
@@ -1057,7 +1057,7 @@ theorem compatible_iff (x : FirstObj P R) :
   rw [Presieve.pullbackCompatible_iff]
   constructor
   · intro t
-    apply Limits.Types.limit_ext.{max u₁ v₁, u₁}
+    apply Limits.Types.limit_ext
     rintro ⟨⟨Y, f, hf⟩, Z, g, hg⟩
     simpa [firstMap, secondMap] using t hf hg
   · intro t Y Z f g hf hg
chore: fix focusing dots (#5708)

This PR is the result of running

find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;

which firstly replaces . focusing dots with · and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.

Diff
@@ -975,11 +975,11 @@ theorem compatible_iff (x : FirstObj P S) :
     ((firstObjEqFamily P S).hom x).Compatible ↔ firstMap P S x = secondMap P S x := by
   rw [Presieve.compatible_iff_sieveCompatible]
   constructor
-  . intro t
+  · intro t
     apply SecondObj.ext
     intros Y Z g f hf
     simpa [firstMap, secondMap] using t _ g hf
-  . intro t Y Z f g hf
+  · intro t Y Z f g hf
     rw [Types.limit_ext_iff'] at t
     simpa [firstMap, secondMap] using t ⟨⟨Y, Z, g, f, hf⟩⟩
 #align category_theory.equalizer.sieve.compatible_iff CategoryTheory.Equalizer.Sieve.compatible_iff
@@ -998,7 +998,7 @@ theorem equalizer_sheaf_condition :
   rw [← Iso.toEquiv_symm_fun]
   rw [Equiv.eq_symm_apply]
   constructor
-  . intro q
+  · intro q
     funext Y f hf
     simpa [firstObjEqFamily, forkMap] using q _ _
   · intro q Y f hf
@@ -1056,7 +1056,7 @@ theorem compatible_iff (x : FirstObj P R) :
     ((firstObjEqFamily P R).hom x).Compatible ↔ firstMap P R x = secondMap P R x := by
   rw [Presieve.pullbackCompatible_iff]
   constructor
-  . intro t
+  · intro t
     apply Limits.Types.limit_ext.{max u₁ v₁, u₁}
     rintro ⟨⟨Y, f, hf⟩, Z, g, hg⟩
     simpa [firstMap, secondMap] using t hf hg
feat: cocones over Sieves and FamilyOfElements for yoneda (#5647)

Adding some lemmas that relate a FamilyOfElements for yoneda presheaves with cocones over a sieve.

Co-authored-by: nick-kuhn <46423253+nick-kuhn@users.noreply.github.com>

Diff
@@ -783,8 +783,93 @@ theorem isSheaf_bot : IsSheaf (⊥ : GrothendieckTopology C) P := fun X => by
   simp [isSheafFor_top_sieve]
 #align category_theory.presieve.is_sheaf_bot CategoryTheory.Presieve.isSheaf_bot
 
+/--
+For a presheaf of the form `yoneda.obj W`, a compatible family of elements on a sieve
+is the same as a co-cone over the sieve. Constructing a co-cone from a compatible family works for
+any presieve, as does constructing a family of elements from a co-cone. Showing compatibility of the
+family needs the sieve condition.
+Note: This is related to `CategoryTheory.Presheaf.conesEquivSieveCompatibleFamily`
+ -/
+
+def compatibleYonedaFamily_toCocone (R : Presieve X) (W : C) (x : FamilyOfElements (yoneda.obj W) R)
+  (hx : FamilyOfElements.Compatible x) :
+     Cocone (R.diagram)  where
+  pt := W
+  ι  := {
+    app := fun f => x f.obj.hom f.property
+    naturality := by
+      intro g₁ g₂ F
+      simp only [Functor.id_obj, Functor.comp_obj, fullSubcategoryInclusion.obj, Over.forget_obj,
+          Functor.const_obj_obj, Functor.comp_map, fullSubcategoryInclusion.map, Over.forget_map,
+          Functor.const_obj_map, Category.comp_id]
+      rw [← Category.id_comp (x g₁.obj.hom g₁.property)]
+      apply hx
+      simp only [Functor.id_obj, Over.w, Opposite.unop_op, Category.id_comp]
+  }
+
+def yonedaFamilyOfElements_fromCocone (R : Presieve X) (s : Cocone (diagram R)) :
+      FamilyOfElements (yoneda.obj s.pt) R := fun _ f hf => s.ι.app ⟨Over.mk f, hf⟩
+
 end Presieve
 
+namespace Sieve
+open Presieve
+
+variable {C : Type u₁} [Category.{v₁} C]
+
+variable {X : C}
+
+theorem yonedaFamily_fromCocone_compatible (S : Sieve X) (s : Cocone (diagram S.arrows)) :
+    FamilyOfElements.Compatible <| yonedaFamilyOfElements_fromCocone S.arrows s := by
+  intro Y₁ Y₂ Z g₁ g₂ f₁ f₂ hf₁ hf₂ hgf
+  have Hs := s.ι.naturality
+  simp only [Functor.id_obj, yoneda_obj_obj, Opposite.unop_op, yoneda_obj_map, Quiver.Hom.unop_op]
+  dsimp [yonedaFamilyOfElements_fromCocone]
+  have hgf₁ : S.arrows (g₁ ≫ f₁) := by exact Sieve.downward_closed S hf₁ g₁
+  have hgf₂ : S.arrows (g₂ ≫ f₂) := by exact Sieve.downward_closed S hf₂ g₂
+  let F : (Over.mk (g₁ ≫ f₁) : Over X) ⟶ (Over.mk (g₂ ≫ f₂) : Over X) := (Over.homMk (𝟙 Z) )
+  let F₁ : (Over.mk (g₁ ≫ f₁) : Over X) ⟶ (Over.mk f₁ : Over X) := (Over.homMk g₁)
+  let F₂ : (Over.mk (g₂ ≫ f₂) : Over X) ⟶ (Over.mk f₂ : Over X) := (Over.homMk g₂)
+  have hF := @Hs ⟨Over.mk (g₁ ≫ f₁), hgf₁⟩ ⟨Over.mk (g₂ ≫ f₂), hgf₂⟩ F
+  have hF₁ := @Hs ⟨Over.mk (g₁ ≫ f₁), hgf₁⟩ ⟨Over.mk f₁, hf₁⟩ F₁
+  have hF₂ := @Hs ⟨Over.mk (g₂ ≫ f₂), hgf₂⟩ ⟨Over.mk f₂, hf₂⟩ F₂
+  aesop_cat
+
+/--
+The base of a sieve `S` is a colimit of `S` iff all Yoneda-presheaves satisfy
+the sheaf condition for `S`.
+-/
+theorem forallYonedaIsSheaf_iff_colimit (S : Sieve X) :
+    (∀ W : C, Presieve.IsSheafFor (yoneda.obj W) (S : Presieve X)) ↔
+      Nonempty (IsColimit S.arrows.cocone) := by
+  constructor
+  · intro H
+    refine Nonempty.intro ?_
+    exact {
+    desc := fun s => H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
+        (yonedaFamily_fromCocone_compatible S s) |>.choose
+    fac := by
+      intro s f
+      replace H := H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
+         (yonedaFamily_fromCocone_compatible S s)
+      have ht := H.choose_spec.1 f.obj.hom f.property
+      aesop_cat
+    uniq := by
+      intro s Fs HFs
+      replace H := H s.pt (yonedaFamilyOfElements_fromCocone S.arrows s)
+          (yonedaFamily_fromCocone_compatible S s)
+      apply H.choose_spec.2 Fs
+      exact fun _ f hf => HFs ⟨Over.mk f, hf⟩  }
+  · intro H W x hx
+    replace H := Classical.choice H
+    let s := compatibleYonedaFamily_toCocone S W x hx
+    use H.desc s
+    constructor
+    · exact fun _ f hf => (H.fac s) ⟨Over.mk f, hf⟩
+    · exact fun g hg => H.uniq s g (fun ⟨⟨f, _, hom⟩, hf⟩ => hg hom hf)
+
+end Sieve
+
 namespace Equalizer
 
 variable {C : Type u₁} [Category.{v₁} C] (P : Cᵒᵖ ⥤ Type max v₁ u₁) {X : C} (R : Presieve X)
chore: remove superfluous parentheses in calls to ext (#5258)

Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -488,7 +488,7 @@ def natTransEquivCompatibleFamily {P : Cᵒᵖ ⥤ Type v₁} :
         ext ⟨f, hf⟩
         apply t.2.to_sieveCompatible _ }
   left_inv α := by
-    ext (X⟨_, _⟩)
+    ext X ⟨_, _⟩
     rfl
   right_inv := by
     rintro ⟨x, hx⟩
feat: more consistent use of ext, and updating porting notes. (#5242)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -818,13 +818,6 @@ variable (P R)
 def firstObjEqFamily : FirstObj P R ≅ R.FamilyOfElements P where
   hom t Y f hf := Pi.π (fun f : ΣY, { f : Y ⟶ X // R f } => P.obj (op f.1)) ⟨_, _, hf⟩ t
   inv := Pi.lift fun f x => x _ f.2.2
-  hom_inv_id := by
-    funext
-    ext
-    simp
-  inv_hom_id := by
-    funext
-    apply Limits.Types.Limit.lift_π_apply'
 #align category_theory.equalizer.first_obj_eq_family CategoryTheory.Equalizer.firstObjEqFamily
 
 instance : Inhabited (FirstObj P (⊥ : Presieve X)) :=
@@ -885,8 +878,7 @@ def secondMap : FirstObj P (S : Presieve X) ⟶ SecondObj P S :=
 #align category_theory.equalizer.sieve.second_map CategoryTheory.Equalizer.Sieve.secondMap
 
 theorem w : forkMap P (S : Presieve X) ≫ firstMap P S = forkMap P S ≫ secondMap P S := by
-  apply limit.hom_ext
-  rintro ⟨Y, Z, g, f, hf⟩
+  ext
   simp [firstMap, secondMap, forkMap]
 #align category_theory.equalizer.sieve.w CategoryTheory.Equalizer.Sieve.w
 
@@ -944,7 +936,7 @@ variable [HasPullbacks C]
 /-- The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM, which
 contains the data used to check a family of elements for a presieve is compatible.
 -/
-def SecondObj : Type max v₁ u₁ :=
+@[simp] def SecondObj : Type max v₁ u₁ :=
   ∏ fun fg : (ΣY, { f : Y ⟶ X // R f }) × ΣZ, { g : Z ⟶ X // R g } =>
     P.obj (op (pullback fg.1.2.1 fg.2.2.1))
 #align category_theory.equalizer.presieve.second_obj CategoryTheory.Equalizer.Presieve.SecondObj
@@ -963,8 +955,8 @@ def secondMap : FirstObj P R ⟶ SecondObj P R :=
 #align category_theory.equalizer.presieve.second_map CategoryTheory.Equalizer.Presieve.secondMap
 
 theorem w : forkMap P R ≫ firstMap P R = forkMap P R ≫ secondMap P R := by
-  apply limit.hom_ext
-  rintro ⟨⟨Y, f, hf⟩, ⟨Z, g, hg⟩⟩
+  dsimp
+  ext
   simp only [firstMap, secondMap, forkMap]
   simp only [limit.lift_π, limit.lift_π_assoc, assoc, Fan.mk_π_app]
   rw [← P.map_comp, ← op_comp, pullback.condition]
chore: formatting issues (#4947)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -854,7 +854,7 @@ namespace Sieve
 to check a family is compatible.
 -/
 def SecondObj : Type max v₁ u₁ :=
-  ∏ fun f : Σ(Y Z : _)(_ : Z ⟶ Y), { f' : Y ⟶ X // S f' } => P.obj (op f.2.1)
+  ∏ fun f : Σ(Y Z : _) (_ : Z ⟶ Y), { f' : Y ⟶ X // S f' } => P.obj (op f.2.1)
 #align category_theory.equalizer.sieve.second_obj CategoryTheory.Equalizer.Sieve.SecondObj
 
 variable {P S}
chore: fix typos (#4518)

I ran codespell Mathlib and got tired halfway through the suggestions.

Diff
@@ -665,7 +665,7 @@ theorem isSheafFor_top_sieve (P : Cᵒᵖ ⥤ Type w) : IsSheafFor P ((⊤ : Sie
 #align category_theory.presieve.is_sheaf_for_top_sieve CategoryTheory.Presieve.isSheafFor_top_sieve
 
 /-- If `P` is a sheaf for `S`, and it is iso to `P'`, then `P'` is a sheaf for `S`. This shows that
-"being a sheaf for a presieve" is a mathematical or hygenic property.
+"being a sheaf for a presieve" is a mathematical or hygienic property.
 -/
 theorem isSheafFor_iso {P' : Cᵒᵖ ⥤ Type w} (i : P ≅ P') : IsSheafFor P R → IsSheafFor P' R := by
   intro h x hx
feat : add ext lemma for Type u (#3593)

This lemma, which was not needed in mathlib3, simplifies several proofs (back to the state they were in in mathlib3).

Note on what's going on here: Lean 3 ext would fall back on "try all ext lemmas" if it failed, and thus it could see through lots of definitional equalities. Lean 4 ext doesn't do this (because it's inefficient) and so we need to add more ext lemmas in order to recover Lean 3 functionality.

Diff
@@ -511,7 +511,6 @@ theorem extension_iff_amalgamation {P : Cᵒᵖ ⥤ Type v₁} (x : S.functor 
     convert h f hf
     rw [yonedaEquiv_naturality]
     simp [yonedaEquiv]
-    rfl
 #align category_theory.presieve.extension_iff_amalgamation CategoryTheory.Presieve.extension_iff_amalgamation
 
 /-- The yoneda version of the sheaf condition is equivalent to the sheaf condition.
chore: forward port of #18742, no simps lemmas for Category.Hom (#3340)

This is the forward port of https://github.com/leanprover-community/mathlib/pull/18742. That PR hasn't landed yet, so this PR still needs to be updated with the new commit SHA.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>

Diff
@@ -1050,6 +1050,13 @@ instance : Category (SheafOfTypes J) where
   comp_id _ := Hom.ext _ _ <| comp_id _
   assoc _ _ _ := Hom.ext _ _ <| assoc _ _ _
 
+-- Porting note: we need to restate the ext lemma in terms of the categorical morphism
+-- not just the underlying structure.
+-- It would be nice if this boilerplate weren't necessary.
+@[ext]
+theorem Hom.ext' {X Y : SheafOfTypes J} (f g : X ⟶ Y) (w : f.val = g.val) : f = g :=
+  Hom.ext f g w
+
 -- Let's make the inhabited linter happy...
 instance (X : SheafOfTypes J) : Inhabited (Hom X X) :=
   ⟨𝟙 X⟩
chore: tidy various files (#3358)
Diff
@@ -201,7 +201,7 @@ theorem extend_agrees {x : FamilyOfElements P R} (t : x.Compatible) {f : Y ⟶ X
   have h := (le_generate R Y hf).choose_spec
   unfold FamilyOfElements.sieveExtend
   rw [t h.choose (𝟙 _) _ hf _]
-  · simp;
+  · simp
   · rw [id_comp]
     exact h.choose_spec.choose_spec.2
 #align category_theory.presieve.extend_agrees CategoryTheory.Presieve.extend_agrees
@@ -845,7 +845,7 @@ def forkMap : P.obj (op X) ⟶ FirstObj P R :=
 
 /-!
 This section establishes the equivalence between the sheaf condition of Equation (3) [MM92] and
-the definition of `is_sheaf_for`.
+the definition of `IsSheafFor`.
 -/
 
 
@@ -1026,7 +1026,7 @@ structure SheafOfTypes (J : GrothendieckTopology C) : Type max u₁ v₁ (w + 1)
   val : Cᵒᵖ ⥤ Type w
   /-- the condition that the presheaf is a sheaf -/
   cond : Presieve.IsSheaf J val
-  set_option linter.uppercaseLean3 false in
+set_option linter.uppercaseLean3 false in
 #align category_theory.SheafOfTypes CategoryTheory.SheafOfTypes
 
 namespace SheafOfTypes
@@ -1038,7 +1038,7 @@ variable {J}
 structure Hom (X Y : SheafOfTypes J) where
   /-- a morphism between the underlying presheaves -/
   val : X.val ⟶ Y.val
-  set_option linter.uppercaseLean3 false in
+set_option linter.uppercaseLean3 false in
 #align category_theory.SheafOfTypes.hom CategoryTheory.SheafOfTypes.Hom
 
 @[simps]
feat: port CategoryTheory.Sites.Sheaf (#3244)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -1024,7 +1024,7 @@ variable (J : GrothendieckTopology C)
 structure SheafOfTypes (J : GrothendieckTopology C) : Type max u₁ v₁ (w + 1) where
   /-- the underlying presheaf -/
   val : Cᵒᵖ ⥤ Type w
-  /-- the condition the a presheaf is a sheaf -/
+  /-- the condition that the presheaf is a sheaf -/
   cond : Presieve.IsSheaf J val
   set_option linter.uppercaseLean3 false in
 #align category_theory.SheafOfTypes CategoryTheory.SheafOfTypes
feat: port CategoryTheory.Sites.SheafOfTypes (#3223)

Co-authored-by: Scott Morrison <scott@tqft.net>

Dependencies 2 + 258

259 files ported (99.2%)
112486 lines ported (99.9%)
Show graph

The unported dependencies are