category_theory.sites.grothendieckMathlib.CategoryTheory.Sites.Grothendieck

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -257,7 +257,7 @@ def trivial : GrothendieckTopology C where
     simp [hf]
   transitive' X S hS R hR :=
     by
-    rw [Set.mem_singleton_iff, ← sieve.id_mem_iff_eq_top] at hS 
+    rw [Set.mem_singleton_iff, ← sieve.id_mem_iff_eq_top] at hS
     simpa using hR hS
 #align category_theory.grothendieck_topology.trivial CategoryTheory.GrothendieckTopology.trivial
 -/
@@ -341,7 +341,7 @@ instance : CompleteLattice (GrothendieckTopology C) :=
     (by
       apply le_antisymm
       · intro X S hS
-        rw [trivial_covering] at hS 
+        rw [trivial_covering] at hS
         apply covering_of_eq_top _ hS
       · refine' @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_sInf) (trivial C))
     _ rfl _ rfl _ rfl sInf rfl
Diff
@@ -3,11 +3,11 @@ Copyright (c) 2020 Bhavik Mehta, E. W. Ayers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Bhavik Mehta, E. W. Ayers
 -/
-import Mathbin.CategoryTheory.Sites.Sieves
-import Mathbin.CategoryTheory.Limits.Shapes.Pullbacks
-import Mathbin.CategoryTheory.Limits.Shapes.Multiequalizer
-import Mathbin.CategoryTheory.Category.Preorder
-import Mathbin.Order.Copy
+import CategoryTheory.Sites.Sieves
+import CategoryTheory.Limits.Shapes.Pullbacks
+import CategoryTheory.Limits.Shapes.Multiequalizer
+import CategoryTheory.Category.Preorder
+import Order.Copy
 
 #align_import category_theory.sites.grothendieck from "leanprover-community/mathlib"@"cb3ceec8485239a61ed51d944cb9a95b68c6bafc"
 
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2020 Bhavik Mehta, E. W. Ayers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Bhavik Mehta, E. W. Ayers
-
-! This file was ported from Lean 3 source module category_theory.sites.grothendieck
-! leanprover-community/mathlib commit cb3ceec8485239a61ed51d944cb9a95b68c6bafc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Sites.Sieves
 import Mathbin.CategoryTheory.Limits.Shapes.Pullbacks
@@ -14,6 +9,8 @@ import Mathbin.CategoryTheory.Limits.Shapes.Multiequalizer
 import Mathbin.CategoryTheory.Category.Preorder
 import Mathbin.Order.Copy
 
+#align_import category_theory.sites.grothendieck from "leanprover-community/mathlib"@"cb3ceec8485239a61ed51d944cb9a95b68c6bafc"
+
 /-!
 # Grothendieck topologies
 
Diff
@@ -112,11 +112,13 @@ theorem mem_sieves_iff_coe : S ∈ J.sieves X ↔ S ∈ J X :=
   Iff.rfl
 #align category_theory.grothendieck_topology.mem_sieves_iff_coe CategoryTheory.GrothendieckTopology.mem_sieves_iff_coe
 
+#print CategoryTheory.GrothendieckTopology.top_mem /-
 -- Also known as the maximality axiom.
 @[simp]
 theorem top_mem (X : C) : ⊤ ∈ J X :=
   J.top_mem' X
 #align category_theory.grothendieck_topology.top_mem CategoryTheory.GrothendieckTopology.top_mem
+-/
 
 #print CategoryTheory.GrothendieckTopology.pullback_stable /-
 -- Also known as the stability axiom.
@@ -133,9 +135,12 @@ theorem transitive (hS : S ∈ J X) (R : Sieve X) (h : ∀ ⦃Y⦄ ⦃f : Y ⟶
 #align category_theory.grothendieck_topology.transitive CategoryTheory.GrothendieckTopology.transitive
 -/
 
+#print CategoryTheory.GrothendieckTopology.covering_of_eq_top /-
 theorem covering_of_eq_top : S = ⊤ → S ∈ J X := fun h => h.symm ▸ J.top_mem X
 #align category_theory.grothendieck_topology.covering_of_eq_top CategoryTheory.GrothendieckTopology.covering_of_eq_top
+-/
 
+#print CategoryTheory.GrothendieckTopology.superset_covering /-
 /-- If `S` is a subset of `R`, and `S` is covering, then `R` is covering as well.
 
 See <https://stacks.math.columbia.edu/tag/00Z5> (2), or discussion after [MM92] Chapter III,
@@ -148,7 +153,9 @@ theorem superset_covering (Hss : S ≤ R) (sjx : S ∈ J X) : R ∈ J X :=
   rw [← top_le_iff, ← S.pullback_eq_top_of_mem hf]
   apply sieve.pullback_monotone _ Hss
 #align category_theory.grothendieck_topology.superset_covering CategoryTheory.GrothendieckTopology.superset_covering
+-/
 
+#print CategoryTheory.GrothendieckTopology.intersection_covering /-
 /-- The intersection of two covering sieves is covering.
 
 See <https://stacks.math.columbia.edu/tag/00Z5> (1), or [MM92] Chapter III,
@@ -160,12 +167,15 @@ theorem intersection_covering (rj : R ∈ J X) (sj : S ∈ J X) : R ⊓ S ∈ J
   rw [sieve.pullback_inter, R.pullback_eq_top_of_mem Hf]
   simp [sj]
 #align category_theory.grothendieck_topology.intersection_covering CategoryTheory.GrothendieckTopology.intersection_covering
+-/
 
+#print CategoryTheory.GrothendieckTopology.intersection_covering_iff /-
 @[simp]
 theorem intersection_covering_iff : R ⊓ S ∈ J X ↔ R ∈ J X ∧ S ∈ J X :=
   ⟨fun h => ⟨J.superset_covering inf_le_left h, J.superset_covering inf_le_right h⟩, fun t =>
     intersection_covering _ t.1 t.2⟩
 #align category_theory.grothendieck_topology.intersection_covering_iff CategoryTheory.GrothendieckTopology.intersection_covering_iff
+-/
 
 #print CategoryTheory.GrothendieckTopology.bind_covering /-
 theorem bind_covering {S : Sieve X} {R : ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄, S f → Sieve Y} (hS : S ∈ J X)
@@ -227,9 +237,11 @@ theorem arrow_trans (f : Y ⟶ X) (S R : Sieve X) (h : J.Covers S f) :
 #align category_theory.grothendieck_topology.arrow_trans CategoryTheory.GrothendieckTopology.arrow_trans
 -/
 
+#print CategoryTheory.GrothendieckTopology.arrow_intersect /-
 theorem arrow_intersect (f : Y ⟶ X) (S R : Sieve X) (hS : J.Covers S f) (hR : J.Covers R f) :
     J.Covers (S ⊓ R) f := by simpa [covers_iff] using And.intro hS hR
 #align category_theory.grothendieck_topology.arrow_intersect CategoryTheory.GrothendieckTopology.arrow_intersect
+-/
 
 variable (C)
 
@@ -269,9 +281,11 @@ def discrete : GrothendieckTopology C
 
 variable {C}
 
+#print CategoryTheory.GrothendieckTopology.trivial_covering /-
 theorem trivial_covering : S ∈ trivial C X ↔ S = ⊤ :=
   Set.mem_singleton_iff
 #align category_theory.grothendieck_topology.trivial_covering CategoryTheory.GrothendieckTopology.trivial_covering
+-/
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z6> -/
 instance : LE (GrothendieckTopology C)
@@ -306,6 +320,7 @@ instance : InfSet (GrothendieckTopology C)
         apply
           J.transitive (hS _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩) _ fun Y f hf => h hf _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩ }
 
+#print CategoryTheory.GrothendieckTopology.isGLB_sInf /-
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
 theorem isGLB_sInf (s : Set (GrothendieckTopology C)) : IsGLB s (sInf s) :=
   by
@@ -313,6 +328,7 @@ theorem isGLB_sInf (s : Set (GrothendieckTopology C)) : IsGLB s (sInf s) :=
   · intros; rfl
   · exact isGLB_sInf _
 #align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_sInf
+-/
 
 /-- Construct a complete lattice from the `Inf`, but make the trivial and discrete topologies
 definitionally equal to the bottom and top respectively.
@@ -336,34 +352,46 @@ instance : CompleteLattice (GrothendieckTopology C) :=
 instance : Inhabited (GrothendieckTopology C) :=
   ⟨⊤⟩
 
+#print CategoryTheory.GrothendieckTopology.trivial_eq_bot /-
 @[simp]
 theorem trivial_eq_bot : trivial C = ⊥ :=
   rfl
 #align category_theory.grothendieck_topology.trivial_eq_bot CategoryTheory.GrothendieckTopology.trivial_eq_bot
+-/
 
+#print CategoryTheory.GrothendieckTopology.discrete_eq_top /-
 @[simp]
 theorem discrete_eq_top : discrete C = ⊤ :=
   rfl
 #align category_theory.grothendieck_topology.discrete_eq_top CategoryTheory.GrothendieckTopology.discrete_eq_top
+-/
 
+#print CategoryTheory.GrothendieckTopology.bot_covering /-
 @[simp]
 theorem bot_covering : S ∈ (⊥ : GrothendieckTopology C) X ↔ S = ⊤ :=
   trivial_covering
 #align category_theory.grothendieck_topology.bot_covering CategoryTheory.GrothendieckTopology.bot_covering
+-/
 
+#print CategoryTheory.GrothendieckTopology.top_covering /-
 @[simp]
 theorem top_covering : S ∈ (⊤ : GrothendieckTopology C) X :=
   ⟨⟩
 #align category_theory.grothendieck_topology.top_covering CategoryTheory.GrothendieckTopology.top_covering
+-/
 
+#print CategoryTheory.GrothendieckTopology.bot_covers /-
 theorem bot_covers (S : Sieve X) (f : Y ⟶ X) : (⊥ : GrothendieckTopology C).Covers S f ↔ S f := by
   rw [covers_iff, bot_covering, ← sieve.pullback_eq_top_iff_mem]
 #align category_theory.grothendieck_topology.bot_covers CategoryTheory.GrothendieckTopology.bot_covers
+-/
 
+#print CategoryTheory.GrothendieckTopology.top_covers /-
 @[simp]
 theorem top_covers (S : Sieve X) (f : Y ⟶ X) : (⊤ : GrothendieckTopology C).Covers S f := by
   simp [covers_iff]
 #align category_theory.grothendieck_topology.top_covers CategoryTheory.GrothendieckTopology.top_covers
+-/
 
 #print CategoryTheory.GrothendieckTopology.dense /-
 /-- The dense Grothendieck topology.
@@ -512,17 +540,21 @@ structure Relation (S : J.cover X) where
 #align category_theory.grothendieck_topology.cover.relation CategoryTheory.GrothendieckTopology.Cover.Relation
 -/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.map /-
 /-- Map a `arrow` along a refinement `S ⟶ T`. -/
 @[simps]
 def Arrow.map {S T : J.cover X} (I : S.arrow) (f : S ⟶ T) : T.arrow :=
   ⟨I.y, I.f, f.le _ I.hf⟩
 #align category_theory.grothendieck_topology.cover.arrow.map CategoryTheory.GrothendieckTopology.Cover.Arrow.map
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.map /-
 /-- Map a `relation` along a refinement `S ⟶ T`. -/
 @[simps]
 def Relation.map {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) : T.Relation :=
   ⟨_, _, _, I.g₁, I.g₂, I.f₁, I.f₂, f.le _ I.h₁, f.le _ I.h₂, I.w⟩
 #align category_theory.grothendieck_topology.cover.relation.map CategoryTheory.GrothendieckTopology.Cover.Relation.map
+-/
 
 #print CategoryTheory.GrothendieckTopology.Cover.Relation.fst /-
 /-- The first `arrow` associated to a `relation`.
@@ -542,17 +574,21 @@ def Relation.snd {S : J.cover X} (I : S.Relation) : S.arrow :=
 #align category_theory.grothendieck_topology.cover.relation.snd CategoryTheory.GrothendieckTopology.Cover.Relation.snd
 -/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.map_fst /-
 @[simp]
 theorem Relation.map_fst {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) :
     I.fst.map f = (I.map f).fst :=
   rfl
 #align category_theory.grothendieck_topology.cover.relation.map_fst CategoryTheory.GrothendieckTopology.Cover.Relation.map_fst
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.map_snd /-
 @[simp]
 theorem Relation.map_snd {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) :
     I.snd.map f = (I.map f).snd :=
   rfl
 #align category_theory.grothendieck_topology.cover.relation.map_snd CategoryTheory.GrothendieckTopology.Cover.Relation.map_snd
+-/
 
 #print CategoryTheory.GrothendieckTopology.Cover.pullback /-
 /-- Pull back a cover along a morphism. -/
@@ -601,16 +637,20 @@ theorem coe_pullback {Z : C} (f : Y ⟶ X) (g : Z ⟶ Y) (S : J.cover X) :
 #align category_theory.grothendieck_topology.cover.coe_pullback CategoryTheory.GrothendieckTopology.Cover.coe_pullback
 -/
 
+#print CategoryTheory.GrothendieckTopology.Cover.pullbackId /-
 /-- The isomorphism between `S` and the pullback of `S` w.r.t. the identity. -/
 def pullbackId (S : J.cover X) : S.pullback (𝟙 X) ≅ S :=
   eqToIso <| Cover.ext _ _ fun Y f => by simp
 #align category_theory.grothendieck_topology.cover.pullback_id CategoryTheory.GrothendieckTopology.Cover.pullbackId
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.pullbackComp /-
 /-- Pulling back with respect to a composition is the composition of the pullbacks. -/
 def pullbackComp {X Y Z : C} (S : J.cover X) (f : Z ⟶ Y) (g : Y ⟶ X) :
     S.pullback (f ≫ g) ≅ (S.pullback g).pullback f :=
   eqToIso <| Cover.ext _ _ fun Y f => by simp
 #align category_theory.grothendieck_topology.cover.pullback_comp CategoryTheory.GrothendieckTopology.Cover.pullbackComp
+-/
 
 #print CategoryTheory.GrothendieckTopology.Cover.bind /-
 /-- Combine a family of covers over a cover. -/
@@ -620,10 +660,12 @@ def bind {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : J.cover X
 #align category_theory.grothendieck_topology.cover.bind CategoryTheory.GrothendieckTopology.Cover.bind
 -/
 
+#print CategoryTheory.GrothendieckTopology.Cover.bindToBase /-
 /-- The canonical moprhism from `S.bind T` to `T`. -/
 def bindToBase {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : S.bind T ⟶ S :=
   homOfLE <| by rintro Y f ⟨Z, e1, e2, h1, h2, h3⟩; rw [← h3]; apply sieve.downward_closed; exact h1
 #align category_theory.grothendieck_topology.cover.bind_to_base CategoryTheory.GrothendieckTopology.Cover.bindToBase
+-/
 
 #print CategoryTheory.GrothendieckTopology.Cover.Arrow.middle /-
 /-- An arrow in bind has the form `A ⟶ B ⟶ X` where `A ⟶ B` is an arrow in `T I` for some `I`.
@@ -724,6 +766,7 @@ abbrev multifork {D : Type w} [Category.{max v u} D] (S : J.cover X) (P : Cᵒ
 #align category_theory.grothendieck_topology.cover.multifork CategoryTheory.GrothendieckTopology.Cover.multifork
 -/
 
+#print CategoryTheory.GrothendieckTopology.Cover.toMultiequalizer /-
 /-- The canonical map from `P.obj (op X)` to the multiequalizer associated to a covering sieve,
 assuming such a multiequalizer exists. This will be used in `sheaf.lean` to provide an equivalent
 sheaf condition in terms of multiequalizers. -/
@@ -736,9 +779,11 @@ noncomputable abbrev toMultiequalizer {D : Type w} [Category.{max v u} D] (S : J
       dsimp only [index, relation.fst, relation.snd]
       simp only [← P.map_comp, ← op_comp, I.w])
 #align category_theory.grothendieck_topology.cover.to_multiequalizer CategoryTheory.GrothendieckTopology.Cover.toMultiequalizer
+-/
 
 end Cover
 
+#print CategoryTheory.GrothendieckTopology.pullback /-
 /-- Pull back a cover along a morphism. -/
 @[simps obj]
 def pullback (f : Y ⟶ X) : J.cover X ⥤ J.cover Y
@@ -746,18 +791,23 @@ def pullback (f : Y ⟶ X) : J.cover X ⥤ J.cover Y
   obj S := S.pullback f
   map S T f := (Sieve.pullback_monotone _ f.le).Hom
 #align category_theory.grothendieck_topology.pullback CategoryTheory.GrothendieckTopology.pullback
+-/
 
+#print CategoryTheory.GrothendieckTopology.pullbackId /-
 /-- Pulling back along the identity is naturally isomorphic to the identity functor. -/
 def pullbackId (X : C) : J.pullback (𝟙 X) ≅ 𝟭 _ :=
   (NatIso.ofComponents fun S => S.pullback_id) <| by tidy
 #align category_theory.grothendieck_topology.pullback_id CategoryTheory.GrothendieckTopology.pullbackId
+-/
 
+#print CategoryTheory.GrothendieckTopology.pullbackComp /-
 /-- Pulling back along a composition is naturally isomorphic to
 the composition of the pullbacks. -/
 def pullbackComp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) :
     J.pullback (f ≫ g) ≅ J.pullback g ⋙ J.pullback f :=
   (NatIso.ofComponents fun S => S.pullback_comp f g) <| by tidy
 #align category_theory.grothendieck_topology.pullback_comp CategoryTheory.GrothendieckTopology.pullbackComp
+-/
 
 end GrothendieckTopology
 
Diff
@@ -103,7 +103,7 @@ the projection `.sieves`.
 -/
 @[ext]
 theorem ext {J₁ J₂ : GrothendieckTopology C} (h : (J₁ : ∀ X : C, Set (Sieve X)) = J₂) : J₁ = J₂ :=
-  by cases J₁; cases J₂; congr ; apply h
+  by cases J₁; cases J₂; congr; apply h
 #align category_theory.grothendieck_topology.ext CategoryTheory.GrothendieckTopology.ext
 -/
 
@@ -207,7 +207,7 @@ theorem arrow_max (f : Y ⟶ X) (S : Sieve X) (hf : S f) : J.Covers S f :=
 /-- The stability axiom in 'arrow' form: If `S` covers `f` then `S` covers `g ≫ f` for any `g`. -/
 theorem arrow_stable (f : Y ⟶ X) (S : Sieve X) (h : J.Covers S f) {Z : C} (g : Z ⟶ Y) :
     J.Covers S (g ≫ f) := by
-  rw [covers_iff] at h⊢
+  rw [covers_iff] at h ⊢
   simp [h, sieve.pullback_comp]
 #align category_theory.grothendieck_topology.arrow_stable CategoryTheory.GrothendieckTopology.arrow_stable
 -/
@@ -244,11 +244,11 @@ def trivial : GrothendieckTopology C where
   sieves X := {⊤}
   top_mem' X := rfl
   pullback_stable' X Y S f hf := by
-    rw [Set.mem_singleton_iff] at hf⊢
+    rw [Set.mem_singleton_iff] at hf ⊢
     simp [hf]
   transitive' X S hS R hR :=
     by
-    rw [Set.mem_singleton_iff, ← sieve.id_mem_iff_eq_top] at hS
+    rw [Set.mem_singleton_iff, ← sieve.id_mem_iff_eq_top] at hS 
     simpa using hR hS
 #align category_theory.grothendieck_topology.trivial CategoryTheory.GrothendieckTopology.trivial
 -/
@@ -310,7 +310,7 @@ instance : InfSet (GrothendieckTopology C)
 theorem isGLB_sInf (s : Set (GrothendieckTopology C)) : IsGLB s (sInf s) :=
   by
   refine' @IsGLB.of_image _ _ _ _ sieves _ _ _ _
-  · intros ; rfl
+  · intros; rfl
   · exact isGLB_sInf _
 #align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_sInf
 
@@ -328,7 +328,7 @@ instance : CompleteLattice (GrothendieckTopology C) :=
     (by
       apply le_antisymm
       · intro X S hS
-        rw [trivial_covering] at hS
+        rw [trivial_covering] at hS 
         apply covering_of_eq_top _ hS
       · refine' @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_sInf) (trivial C))
     _ rfl _ rfl _ rfl sInf rfl
@@ -372,7 +372,7 @@ See https://ncatlab.org/nlab/show/dense+topology, or [MM92] Chapter III, Section
 -/
 def dense : GrothendieckTopology C
     where
-  sieves X S := ∀ {Y : C} (f : Y ⟶ X), ∃ (Z : _)(g : Z ⟶ Y), S (g ≫ f)
+  sieves X S := ∀ {Y : C} (f : Y ⟶ X), ∃ (Z : _) (g : Z ⟶ Y), S (g ≫ f)
   top_mem' X Y f := ⟨Y, 𝟙 Y, ⟨⟩⟩
   pullback_stable' := by
     intro X Y S h H Z f
@@ -387,7 +387,7 @@ def dense : GrothendieckTopology C
 -/
 
 #print CategoryTheory.GrothendieckTopology.dense_covering /-
-theorem dense_covering : S ∈ dense X ↔ ∀ {Y} (f : Y ⟶ X), ∃ (Z : _)(g : Z ⟶ Y), S (g ≫ f) :=
+theorem dense_covering : S ∈ dense X ↔ ∀ {Y} (f : Y ⟶ X), ∃ (Z : _) (g : Z ⟶ Y), S (g ≫ f) :=
   Iff.rfl
 #align category_theory.grothendieck_topology.dense_covering CategoryTheory.GrothendieckTopology.dense_covering
 -/
@@ -399,7 +399,7 @@ NB. Any category with pullbacks obviously satisfies the right Ore condition, see
 `right_ore_of_pullbacks`.
 -/
 def RightOreCondition (C : Type u) [Category.{v} C] : Prop :=
-  ∀ {X Y Z : C} (yx : Y ⟶ X) (zx : Z ⟶ X), ∃ (W : _)(wy : W ⟶ Y)(wz : W ⟶ Z), wy ≫ yx = wz ≫ zx
+  ∀ {X Y Z : C} (yx : Y ⟶ X) (zx : Z ⟶ X), ∃ (W : _) (wy : W ⟶ Y) (wz : W ⟶ Z), wy ≫ yx = wz ≫ zx
 #align category_theory.grothendieck_topology.right_ore_condition CategoryTheory.GrothendieckTopology.RightOreCondition
 -/
 
@@ -417,7 +417,7 @@ See https://ncatlab.org/nlab/show/atomic+site, or [MM92] Chapter III, Section 2,
 -/
 def atomic (hro : RightOreCondition C) : GrothendieckTopology C
     where
-  sieves X S := ∃ (Y : _)(f : Y ⟶ X), S f
+  sieves X S := ∃ (Y : _) (f : Y ⟶ X), S f
   top_mem' X := ⟨_, 𝟙 _, ⟨⟩⟩
   pullback_stable' := by
     rintro X Y S h ⟨Z, f, hf⟩
@@ -435,7 +435,8 @@ def atomic (hro : RightOreCondition C) : GrothendieckTopology C
 /-- `J.cover X` denotes the poset of covers of `X` with respect to the
 Grothendieck topology `J`. -/
 def Cover (X : C) :=
-  { S : Sieve X // S ∈ J X }deriving Preorder
+  { S : Sieve X // S ∈ J X }
+deriving Preorder
 #align category_theory.grothendieck_topology.cover CategoryTheory.GrothendieckTopology.Cover
 -/
 
Diff
@@ -112,12 +112,6 @@ theorem mem_sieves_iff_coe : S ∈ J.sieves X ↔ S ∈ J X :=
   Iff.rfl
 #align category_theory.grothendieck_topology.mem_sieves_iff_coe CategoryTheory.GrothendieckTopology.mem_sieves_iff_coe
 
-/- warning: category_theory.grothendieck_topology.top_mem -> CategoryTheory.GrothendieckTopology.top_mem is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))) (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.top_mem CategoryTheory.GrothendieckTopology.top_memₓ'. -/
 -- Also known as the maximality axiom.
 @[simp]
 theorem top_mem (X : C) : ⊤ ∈ J X :=
@@ -139,21 +133,9 @@ theorem transitive (hS : S ∈ J X) (R : Sieve X) (h : ∀ ⦃Y⦄ ⦃f : Y ⟶
 #align category_theory.grothendieck_topology.transitive CategoryTheory.GrothendieckTopology.transitive
 -/
 
-/- warning: category_theory.grothendieck_topology.covering_of_eq_top -> CategoryTheory.GrothendieckTopology.covering_of_eq_top 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} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X)))) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
-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} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.covering_of_eq_top CategoryTheory.GrothendieckTopology.covering_of_eq_topₓ'. -/
 theorem covering_of_eq_top : S = ⊤ → S ∈ J X := fun h => h.symm ▸ J.top_mem X
 #align category_theory.grothendieck_topology.covering_of_eq_top CategoryTheory.GrothendieckTopology.covering_of_eq_top
 
-/- warning: category_theory.grothendieck_topology.superset_covering -> CategoryTheory.GrothendieckTopology.superset_covering 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (LE.le.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Preorder.toHasLe.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) S R) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
-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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (LE.le.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Preorder.toLE.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))))) S R) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.superset_covering CategoryTheory.GrothendieckTopology.superset_coveringₓ'. -/
 /-- If `S` is a subset of `R`, and `S` is covering, then `R` is covering as well.
 
 See <https://stacks.math.columbia.edu/tag/00Z5> (2), or discussion after [MM92] Chapter III,
@@ -167,12 +149,6 @@ theorem superset_covering (Hss : S ≤ R) (sjx : S ∈ J X) : R ∈ J X :=
   apply sieve.pullback_monotone _ Hss
 #align category_theory.grothendieck_topology.superset_covering CategoryTheory.GrothendieckTopology.superset_covering
 
-/- warning: category_theory.grothendieck_topology.intersection_covering -> CategoryTheory.GrothendieckTopology.intersection_covering 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) R S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
-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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) R S) (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.intersection_covering CategoryTheory.GrothendieckTopology.intersection_coveringₓ'. -/
 /-- The intersection of two covering sieves is covering.
 
 See <https://stacks.math.columbia.edu/tag/00Z5> (1), or [MM92] Chapter III,
@@ -185,12 +161,6 @@ theorem intersection_covering (rj : R ∈ J X) (sj : S ∈ J X) : R ⊓ S ∈ J
   simp [sj]
 #align category_theory.grothendieck_topology.intersection_covering CategoryTheory.GrothendieckTopology.intersection_covering
 
-/- warning: category_theory.grothendieck_topology.intersection_covering_iff -> CategoryTheory.GrothendieckTopology.intersection_covering_iff 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), Iff (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) R S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) (And (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)))
-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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), Iff (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) R S) (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) (And (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.intersection_covering_iff CategoryTheory.GrothendieckTopology.intersection_covering_iffₓ'. -/
 @[simp]
 theorem intersection_covering_iff : R ⊓ S ∈ J X ↔ R ∈ J X ∧ S ∈ J X :=
   ⟨fun h => ⟨J.superset_covering inf_le_left h, J.superset_covering inf_le_right h⟩, fun t =>
@@ -257,12 +227,6 @@ theorem arrow_trans (f : Y ⟶ X) (S R : Sieve X) (h : J.Covers S f) :
 #align category_theory.grothendieck_topology.arrow_trans CategoryTheory.GrothendieckTopology.arrow_trans
 -/
 
-/- warning: category_theory.grothendieck_topology.arrow_intersect -> CategoryTheory.GrothendieckTopology.arrow_intersect is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J S f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J R f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) S R) f)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J S f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J R f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) S R) f)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.arrow_intersect CategoryTheory.GrothendieckTopology.arrow_intersectₓ'. -/
 theorem arrow_intersect (f : Y ⟶ X) (S R : Sieve X) (hS : J.Covers S f) (hR : J.Covers R f) :
     J.Covers (S ⊓ R) f := by simpa [covers_iff] using And.intro hS hR
 #align category_theory.grothendieck_topology.arrow_intersect CategoryTheory.GrothendieckTopology.arrow_intersect
@@ -305,12 +269,6 @@ def discrete : GrothendieckTopology C
 
 variable {C}
 
-/- warning: category_theory.grothendieck_topology.trivial_covering -> CategoryTheory.GrothendieckTopology.trivial_covering 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}, Iff (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))
-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}, Iff (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.trivial_covering CategoryTheory.GrothendieckTopology.trivial_coveringₓ'. -/
 theorem trivial_covering : S ∈ trivial C X ↔ S = ⊤ :=
   Set.mem_singleton_iff
 #align category_theory.grothendieck_topology.trivial_covering CategoryTheory.GrothendieckTopology.trivial_covering
@@ -348,12 +306,6 @@ instance : InfSet (GrothendieckTopology C)
         apply
           J.transitive (hS _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩) _ fun Y f hf => h hf _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩ }
 
-/- warning: category_theory.grothendieck_topology.is_glb_Inf -> CategoryTheory.GrothendieckTopology.isGLB_sInf is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.partialOrder.{u1, u2} C _inst_1)) s (InfSet.sInf.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.hasInf.{u1, u2} C _inst_1) s)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instPartialOrderGrothendieckTopology.{u1, u2} C _inst_1)) s (InfSet.sInf.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instInfSetGrothendieckTopology.{u1, u2} C _inst_1) s)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_sInfₓ'. -/
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
 theorem isGLB_sInf (s : Set (GrothendieckTopology C)) : IsGLB s (sInf s) :=
   by
@@ -384,66 +336,30 @@ instance : CompleteLattice (GrothendieckTopology C) :=
 instance : Inhabited (GrothendieckTopology C) :=
   ⟨⊤⟩
 
-/- warning: category_theory.grothendieck_topology.trivial_eq_bot -> CategoryTheory.GrothendieckTopology.trivial_eq_bot is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1)))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1)))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.trivial_eq_bot CategoryTheory.GrothendieckTopology.trivial_eq_botₓ'. -/
 @[simp]
 theorem trivial_eq_bot : trivial C = ⊥ :=
   rfl
 #align category_theory.grothendieck_topology.trivial_eq_bot CategoryTheory.GrothendieckTopology.trivial_eq_bot
 
-/- warning: category_theory.grothendieck_topology.discrete_eq_top -> CategoryTheory.GrothendieckTopology.discrete_eq_top is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.discrete.{u1, u2} C _inst_1) (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1)))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.discrete.{u1, u2} C _inst_1) (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1)))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.discrete_eq_top CategoryTheory.GrothendieckTopology.discrete_eq_topₓ'. -/
 @[simp]
 theorem discrete_eq_top : discrete C = ⊤ :=
   rfl
 #align category_theory.grothendieck_topology.discrete_eq_top CategoryTheory.GrothendieckTopology.discrete_eq_top
 
-/- warning: category_theory.grothendieck_topology.bot_covering -> CategoryTheory.GrothendieckTopology.bot_covering 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}, Iff (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))
-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}, Iff (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.bot_covering CategoryTheory.GrothendieckTopology.bot_coveringₓ'. -/
 @[simp]
 theorem bot_covering : S ∈ (⊥ : GrothendieckTopology C) X ↔ S = ⊤ :=
   trivial_covering
 #align category_theory.grothendieck_topology.bot_covering CategoryTheory.GrothendieckTopology.bot_covering
 
-/- warning: category_theory.grothendieck_topology.top_covering -> CategoryTheory.GrothendieckTopology.top_covering 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}, Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) X)
-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}, Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) X)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.top_covering CategoryTheory.GrothendieckTopology.top_coveringₓ'. -/
 @[simp]
 theorem top_covering : S ∈ (⊤ : GrothendieckTopology C) X :=
   ⟨⟩
 #align category_theory.grothendieck_topology.top_covering CategoryTheory.GrothendieckTopology.top_covering
 
-/- warning: category_theory.grothendieck_topology.bot_covers -> CategoryTheory.GrothendieckTopology.bot_covers is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), Iff (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) S f) (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 Y f)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), Iff (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) S f) (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S Y f)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.bot_covers CategoryTheory.GrothendieckTopology.bot_coversₓ'. -/
 theorem bot_covers (S : Sieve X) (f : Y ⟶ X) : (⊥ : GrothendieckTopology C).Covers S f ↔ S f := by
   rw [covers_iff, bot_covering, ← sieve.pullback_eq_top_iff_mem]
 #align category_theory.grothendieck_topology.bot_covers CategoryTheory.GrothendieckTopology.bot_covers
 
-/- warning: category_theory.grothendieck_topology.top_covers -> CategoryTheory.GrothendieckTopology.top_covers is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) S f
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) S f
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.top_covers CategoryTheory.GrothendieckTopology.top_coversₓ'. -/
 @[simp]
 theorem top_covers (S : Sieve X) (f : Y ⟶ X) : (⊤ : GrothendieckTopology C).Covers S f := by
   simp [covers_iff]
@@ -595,24 +511,12 @@ structure Relation (S : J.cover X) where
 #align category_theory.grothendieck_topology.cover.relation CategoryTheory.GrothendieckTopology.Cover.Relation
 -/
 
-/- warning: category_theory.grothendieck_topology.cover.arrow.map -> CategoryTheory.GrothendieckTopology.Cover.Arrow.map is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.arrow.map CategoryTheory.GrothendieckTopology.Cover.Arrow.mapₓ'. -/
 /-- Map a `arrow` along a refinement `S ⟶ T`. -/
 @[simps]
 def Arrow.map {S T : J.cover X} (I : S.arrow) (f : S ⟶ T) : T.arrow :=
   ⟨I.y, I.f, f.le _ I.hf⟩
 #align category_theory.grothendieck_topology.cover.arrow.map CategoryTheory.GrothendieckTopology.Cover.Arrow.map
 
-/- warning: category_theory.grothendieck_topology.cover.relation.map -> CategoryTheory.GrothendieckTopology.Cover.Relation.map is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J T)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J T)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.relation.map CategoryTheory.GrothendieckTopology.Cover.Relation.mapₓ'. -/
 /-- Map a `relation` along a refinement `S ⟶ T`. -/
 @[simps]
 def Relation.map {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) : T.Relation :=
@@ -637,24 +541,12 @@ def Relation.snd {S : J.cover X} (I : S.Relation) : S.arrow :=
 #align category_theory.grothendieck_topology.cover.relation.snd CategoryTheory.GrothendieckTopology.Cover.Relation.snd
 -/
 
-/- warning: category_theory.grothendieck_topology.cover.relation.map_fst -> CategoryTheory.GrothendieckTopology.Cover.Relation.map_fst is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.relation.map_fst CategoryTheory.GrothendieckTopology.Cover.Relation.map_fstₓ'. -/
 @[simp]
 theorem Relation.map_fst {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) :
     I.fst.map f = (I.map f).fst :=
   rfl
 #align category_theory.grothendieck_topology.cover.relation.map_fst CategoryTheory.GrothendieckTopology.Cover.Relation.map_fst
 
-/- warning: category_theory.grothendieck_topology.cover.relation.map_snd -> CategoryTheory.GrothendieckTopology.Cover.Relation.map_snd is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.relation.map_snd CategoryTheory.GrothendieckTopology.Cover.Relation.map_sndₓ'. -/
 @[simp]
 theorem Relation.map_snd {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) :
     I.snd.map f = (I.map f).snd :=
@@ -708,23 +600,11 @@ theorem coe_pullback {Z : C} (f : Y ⟶ X) (g : Z ⟶ Y) (S : J.cover X) :
 #align category_theory.grothendieck_topology.cover.coe_pullback CategoryTheory.GrothendieckTopology.Cover.coe_pullback
 -/
 
-/- warning: category_theory.grothendieck_topology.cover.pullback_id -> CategoryTheory.GrothendieckTopology.Cover.pullbackId is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X X J S (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) S
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X X J S (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) S
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.pullback_id CategoryTheory.GrothendieckTopology.Cover.pullbackIdₓ'. -/
 /-- The isomorphism between `S` and the pullback of `S` w.r.t. the identity. -/
 def pullbackId (S : J.cover X) : S.pullback (𝟙 X) ≅ S :=
   eqToIso <| Cover.ext _ _ fun Y f => by simp
 #align category_theory.grothendieck_topology.cover.pullback_id CategoryTheory.GrothendieckTopology.Cover.pullbackId
 
-/- warning: category_theory.grothendieck_topology.cover.pullback_comp -> CategoryTheory.GrothendieckTopology.Cover.pullbackComp is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} {Y : C} {Z : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Z J S (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) Z Y X f g)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 Y Z J (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Y J S g) f)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} {Y : C} {Z : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Z J S (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) Z Y X f g)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 Y Z J (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Y J S g) f)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.pullback_comp CategoryTheory.GrothendieckTopology.Cover.pullbackCompₓ'. -/
 /-- Pulling back with respect to a composition is the composition of the pullbacks. -/
 def pullbackComp {X Y Z : C} (S : J.cover X) (f : Z ⟶ Y) (g : Y ⟶ X) :
     S.pullback (f ≫ g) ≅ (S.pullback g).pullback f :=
@@ -739,12 +619,6 @@ def bind {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : J.cover X
 #align category_theory.grothendieck_topology.cover.bind CategoryTheory.GrothendieckTopology.Cover.bind
 -/
 
-/- warning: category_theory.grothendieck_topology.cover.bind_to_base -> CategoryTheory.GrothendieckTopology.Cover.bindToBase is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (T : forall (I : CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S), CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J (CategoryTheory.GrothendieckTopology.Cover.Arrow.y.{u1, u2} C _inst_1 X J S I)), Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) (CategoryTheory.GrothendieckTopology.Cover.bind.{u1, u2} C _inst_1 J X S T) S
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (T : forall (I : CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S), CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J (CategoryTheory.GrothendieckTopology.Cover.Arrow.Y.{u1, u2} C _inst_1 X J S I)), Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) (CategoryTheory.GrothendieckTopology.Cover.bind.{u1, u2} C _inst_1 J X S T) S
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.bind_to_base CategoryTheory.GrothendieckTopology.Cover.bindToBaseₓ'. -/
 /-- The canonical moprhism from `S.bind T` to `T`. -/
 def bindToBase {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : S.bind T ⟶ S :=
   homOfLE <| by rintro Y f ⟨Z, e1, e2, h1, h2, h3⟩; rw [← h3]; apply sieve.downward_closed; exact h1
@@ -849,12 +723,6 @@ abbrev multifork {D : Type w} [Category.{max v u} D] (S : J.cover X) (P : Cᵒ
 #align category_theory.grothendieck_topology.cover.multifork CategoryTheory.GrothendieckTopology.Cover.multifork
 -/
 
-/- warning: category_theory.grothendieck_topology.cover.to_multiequalizer -> CategoryTheory.GrothendieckTopology.Cover.toMultiequalizer is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (P : CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) [_inst_3 : CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)], Quiver.Hom.{succ (max u2 u3), u1} D (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, u1} D (CategoryTheory.Category.toCategoryStruct.{max u2 u3, u1} D _inst_2)) (CategoryTheory.Functor.obj.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2 P (Opposite.op.{succ u3} C X)) (CategoryTheory.Limits.multiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P) _inst_3)
-but is expected to have type
-  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) [_inst_3 : CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)], Quiver.Hom.{max (succ u3) (succ u2), u1} D (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, u1} D (CategoryTheory.Category.toCategoryStruct.{max u3 u2, u1} D _inst_2)) (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, 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))) D (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, u1} D (CategoryTheory.Category.toCategoryStruct.{max u3 u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2 P) (Opposite.op.{succ u3} C X)) (CategoryTheory.Limits.multiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P) _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.to_multiequalizer CategoryTheory.GrothendieckTopology.Cover.toMultiequalizerₓ'. -/
 /-- The canonical map from `P.obj (op X)` to the multiequalizer associated to a covering sieve,
 assuming such a multiequalizer exists. This will be used in `sheaf.lean` to provide an equivalent
 sheaf condition in terms of multiequalizers. -/
@@ -870,12 +738,6 @@ noncomputable abbrev toMultiequalizer {D : Type w} [Category.{max v u} D] (S : J
 
 end Cover
 
-/- warning: category_theory.grothendieck_topology.pullback -> CategoryTheory.GrothendieckTopology.pullback is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) -> (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Y)))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) -> (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Y)))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.pullback CategoryTheory.GrothendieckTopology.pullbackₓ'. -/
 /-- Pull back a cover along a morphism. -/
 @[simps obj]
 def pullback (f : Y ⟶ X) : J.cover X ⥤ J.cover Y
@@ -884,23 +746,11 @@ def pullback (f : Y ⟶ X) : J.cover X ⥤ J.cover Y
   map S T f := (Sieve.pullback_monotone _ f.le).Hom
 #align category_theory.grothendieck_topology.pullback CategoryTheory.GrothendieckTopology.pullback
 
-/- warning: category_theory.grothendieck_topology.pullback_id -> CategoryTheory.GrothendieckTopology.pullbackId is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 X X J (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) (CategoryTheory.Functor.id.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 X X J (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) (CategoryTheory.Functor.id.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.pullback_id CategoryTheory.GrothendieckTopology.pullbackIdₓ'. -/
 /-- Pulling back along the identity is naturally isomorphic to the identity functor. -/
 def pullbackId (X : C) : J.pullback (𝟙 X) ≅ 𝟭 _ :=
   (NatIso.ofComponents fun S => S.pullback_id) <| by tidy
 #align category_theory.grothendieck_topology.pullback_id CategoryTheory.GrothendieckTopology.pullbackId
 
-/- warning: category_theory.grothendieck_topology.pullback_comp -> CategoryTheory.GrothendieckTopology.pullbackComp is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z X J (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Y)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z Y J g) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Y X J f))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z X J (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Y)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z Y J g) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Y X J f))
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.pullback_comp CategoryTheory.GrothendieckTopology.pullbackCompₓ'. -/
 /-- Pulling back along a composition is naturally isomorphic to
 the composition of the pullbacks. -/
 def pullbackComp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) :
Diff
@@ -103,11 +103,7 @@ the projection `.sieves`.
 -/
 @[ext]
 theorem ext {J₁ J₂ : GrothendieckTopology C} (h : (J₁ : ∀ X : C, Set (Sieve X)) = J₂) : J₁ = J₂ :=
-  by
-  cases J₁
-  cases J₂
-  congr
-  apply h
+  by cases J₁; cases J₂; congr ; apply h
 #align category_theory.grothendieck_topology.ext CategoryTheory.GrothendieckTopology.ext
 -/
 
@@ -362,8 +358,7 @@ Case conversion may be inaccurate. Consider using '#align category_theory.grothe
 theorem isGLB_sInf (s : Set (GrothendieckTopology C)) : IsGLB s (sInf s) :=
   by
   refine' @IsGLB.of_image _ _ _ _ sieves _ _ _ _
-  · intros
-    rfl
+  · intros ; rfl
   · exact isGLB_sInf _
 #align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_sInf
 
@@ -752,11 +747,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.bind_to_base CategoryTheory.GrothendieckTopology.Cover.bindToBaseₓ'. -/
 /-- The canonical moprhism from `S.bind T` to `T`. -/
 def bindToBase {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : S.bind T ⟶ S :=
-  homOfLE <| by
-    rintro Y f ⟨Z, e1, e2, h1, h2, h3⟩
-    rw [← h3]
-    apply sieve.downward_closed
-    exact h1
+  homOfLE <| by rintro Y f ⟨Z, e1, e2, h1, h2, h3⟩; rw [← h3]; apply sieve.downward_closed; exact h1
 #align category_theory.grothendieck_topology.cover.bind_to_base CategoryTheory.GrothendieckTopology.Cover.bindToBase
 
 #print CategoryTheory.GrothendieckTopology.Cover.Arrow.middle /-
Diff
@@ -154,7 +154,7 @@ theorem covering_of_eq_top : S = ⊤ → S ∈ J X := fun h => h.symm ▸ J.top_
 
 /- warning: category_theory.grothendieck_topology.superset_covering -> CategoryTheory.GrothendieckTopology.superset_covering 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (LE.le.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Preorder.toLE.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) S R) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (LE.le.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Preorder.toHasLe.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) S R) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (LE.le.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Preorder.toLE.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))))) S R) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X))
 Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.superset_covering CategoryTheory.GrothendieckTopology.superset_coveringₓ'. -/
Diff
@@ -339,8 +339,8 @@ instance : PartialOrder (GrothendieckTopology C) :=
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
 instance : InfSet (GrothendieckTopology C)
-    where infₛ T :=
-    { sieves := infₛ (sieves '' T)
+    where sInf T :=
+    { sieves := sInf (sieves '' T)
       top_mem' := by
         rintro X S ⟨⟨_, J, hJ, rfl⟩, rfl⟩
         simp
@@ -352,29 +352,29 @@ instance : InfSet (GrothendieckTopology C)
         apply
           J.transitive (hS _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩) _ fun Y f hf => h hf _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩ }
 
-/- warning: category_theory.grothendieck_topology.is_glb_Inf -> CategoryTheory.GrothendieckTopology.isGLB_infₛ is a dubious translation:
+/- warning: category_theory.grothendieck_topology.is_glb_Inf -> CategoryTheory.GrothendieckTopology.isGLB_sInf is a dubious translation:
 lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.partialOrder.{u1, u2} C _inst_1)) s (InfSet.infₛ.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.hasInf.{u1, u2} C _inst_1) s)
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.partialOrder.{u1, u2} C _inst_1)) s (InfSet.sInf.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.hasInf.{u1, u2} C _inst_1) s)
 but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instPartialOrderGrothendieckTopology.{u1, u2} C _inst_1)) s (InfSet.infₛ.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instInfSetGrothendieckTopology.{u1, u2} C _inst_1) s)
-Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_infₛₓ'. -/
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instPartialOrderGrothendieckTopology.{u1, u2} C _inst_1)) s (InfSet.sInf.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instInfSetGrothendieckTopology.{u1, u2} C _inst_1) s)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_sInfₓ'. -/
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
-theorem isGLB_infₛ (s : Set (GrothendieckTopology C)) : IsGLB s (infₛ s) :=
+theorem isGLB_sInf (s : Set (GrothendieckTopology C)) : IsGLB s (sInf s) :=
   by
   refine' @IsGLB.of_image _ _ _ _ sieves _ _ _ _
   · intros
     rfl
-  · exact isGLB_infₛ _
-#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_infₛ
+  · exact isGLB_sInf _
+#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_sInf
 
 /-- Construct a complete lattice from the `Inf`, but make the trivial and discrete topologies
 definitionally equal to the bottom and top respectively.
 -/
 instance : CompleteLattice (GrothendieckTopology C) :=
-  CompleteLattice.copy (completeLatticeOfInf _ isGLB_infₛ) _ rfl (discrete C)
+  CompleteLattice.copy (completeLatticeOfInf _ isGLB_sInf) _ rfl (discrete C)
     (by
       apply le_antisymm
-      · exact @CompleteLattice.le_top _ (completeLatticeOfInf _ isGLB_infₛ) (discrete C)
+      · exact @CompleteLattice.le_top _ (completeLatticeOfInf _ isGLB_sInf) (discrete C)
       · intro X S hS
         apply Set.mem_univ)
     (trivial C)
@@ -383,8 +383,8 @@ instance : CompleteLattice (GrothendieckTopology C) :=
       · intro X S hS
         rw [trivial_covering] at hS
         apply covering_of_eq_top _ hS
-      · refine' @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_infₛ) (trivial C))
-    _ rfl _ rfl _ rfl infₛ rfl
+      · refine' @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_sInf) (trivial C))
+    _ rfl _ rfl _ rfl sInf rfl
 
 instance : Inhabited (GrothendieckTopology C) :=
   ⟨⊤⟩
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Bhavik Mehta, E. W. Ayers
 
 ! This file was ported from Lean 3 source module category_theory.sites.grothendieck
-! leanprover-community/mathlib commit 14b69e9f3c16630440a2cbd46f1ddad0d561dee7
+! leanprover-community/mathlib commit cb3ceec8485239a61ed51d944cb9a95b68c6bafc
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -17,6 +17,9 @@ import Mathbin.Order.Copy
 /-!
 # Grothendieck topologies
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 Definition and lemmas about Grothendieck topologies.
 A Grothendieck topology for a category `C` is a set of sieves on each object `X` satisfying
 certain closure conditions.
Diff
@@ -61,6 +61,7 @@ open CategoryTheory Category
 
 variable (C : Type u) [Category.{v} C]
 
+#print CategoryTheory.GrothendieckTopology /-
 /-- The definition of a Grothendieck topology: a set of sieves `J X` on each object `X` satisfying
 three axioms:
 1. For every object `X`, the maximal sieve is in `J X`.
@@ -81,6 +82,7 @@ structure GrothendieckTopology where
     ∀ ⦃X⦄ ⦃S : Sieve X⦄ (hS : S ∈ sieves X) (R : Sieve X),
       (∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄, S f → R.pullback f ∈ sieves Y) → R ∈ sieves X
 #align category_theory.grothendieck_topology CategoryTheory.GrothendieckTopology
+-/
 
 namespace GrothendieckTopology
 
@@ -91,6 +93,7 @@ variable {C} {X Y : C} {S R : Sieve X}
 
 variable (J : GrothendieckTopology C)
 
+#print CategoryTheory.GrothendieckTopology.ext /-
 /-- An extensionality lemma in terms of the coercion to a pi-type.
 We prove this explicitly rather than deriving it so that it is in terms of the coercion rather than
 the projection `.sieves`.
@@ -103,32 +106,55 @@ theorem ext {J₁ J₂ : GrothendieckTopology C} (h : (J₁ : ∀ X : C, Set (Si
   congr
   apply h
 #align category_theory.grothendieck_topology.ext CategoryTheory.GrothendieckTopology.ext
+-/
 
 @[simp]
 theorem mem_sieves_iff_coe : S ∈ J.sieves X ↔ S ∈ J X :=
   Iff.rfl
 #align category_theory.grothendieck_topology.mem_sieves_iff_coe CategoryTheory.GrothendieckTopology.mem_sieves_iff_coe
 
+/- warning: category_theory.grothendieck_topology.top_mem -> CategoryTheory.GrothendieckTopology.top_mem is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))) (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.top_mem CategoryTheory.GrothendieckTopology.top_memₓ'. -/
 -- Also known as the maximality axiom.
 @[simp]
 theorem top_mem (X : C) : ⊤ ∈ J X :=
   J.top_mem' X
 #align category_theory.grothendieck_topology.top_mem CategoryTheory.GrothendieckTopology.top_mem
 
+#print CategoryTheory.GrothendieckTopology.pullback_stable /-
 -- Also known as the stability axiom.
 @[simp]
 theorem pullback_stable (f : Y ⟶ X) (hS : S ∈ J X) : S.pullback f ∈ J Y :=
   J.pullback_stable' f hS
 #align category_theory.grothendieck_topology.pullback_stable CategoryTheory.GrothendieckTopology.pullback_stable
+-/
 
+#print CategoryTheory.GrothendieckTopology.transitive /-
 theorem transitive (hS : S ∈ J X) (R : Sieve X) (h : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄, S f → R.pullback f ∈ J Y) :
     R ∈ J X :=
   J.transitive' hS R h
 #align category_theory.grothendieck_topology.transitive CategoryTheory.GrothendieckTopology.transitive
+-/
 
+/- warning: category_theory.grothendieck_topology.covering_of_eq_top -> CategoryTheory.GrothendieckTopology.covering_of_eq_top 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} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X)))) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
+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} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.covering_of_eq_top CategoryTheory.GrothendieckTopology.covering_of_eq_topₓ'. -/
 theorem covering_of_eq_top : S = ⊤ → S ∈ J X := fun h => h.symm ▸ J.top_mem X
 #align category_theory.grothendieck_topology.covering_of_eq_top CategoryTheory.GrothendieckTopology.covering_of_eq_top
 
+/- warning: category_theory.grothendieck_topology.superset_covering -> CategoryTheory.GrothendieckTopology.superset_covering 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (LE.le.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Preorder.toLE.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) S R) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
+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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (LE.le.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Preorder.toLE.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))))) S R) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.superset_covering CategoryTheory.GrothendieckTopology.superset_coveringₓ'. -/
 /-- If `S` is a subset of `R`, and `S` is covering, then `R` is covering as well.
 
 See <https://stacks.math.columbia.edu/tag/00Z5> (2), or discussion after [MM92] Chapter III,
@@ -142,6 +168,12 @@ theorem superset_covering (Hss : S ≤ R) (sjx : S ∈ J X) : R ∈ J X :=
   apply sieve.pullback_monotone _ Hss
 #align category_theory.grothendieck_topology.superset_covering CategoryTheory.GrothendieckTopology.superset_covering
 
+/- warning: category_theory.grothendieck_topology.intersection_covering -> CategoryTheory.GrothendieckTopology.intersection_covering 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) R S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X))
+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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) R S) (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.intersection_covering CategoryTheory.GrothendieckTopology.intersection_coveringₓ'. -/
 /-- The intersection of two covering sieves is covering.
 
 See <https://stacks.math.columbia.edu/tag/00Z5> (1), or [MM92] Chapter III,
@@ -154,45 +186,64 @@ theorem intersection_covering (rj : R ∈ J X) (sj : S ∈ J X) : R ⊓ S ∈ J
   simp [sj]
 #align category_theory.grothendieck_topology.intersection_covering CategoryTheory.GrothendieckTopology.intersection_covering
 
+/- warning: category_theory.grothendieck_topology.intersection_covering_iff -> CategoryTheory.GrothendieckTopology.intersection_covering_iff 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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), Iff (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) R S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) (And (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)) (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) J X)))
+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} {R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), Iff (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) R S) (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) (And (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) R (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)) (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 J X)))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.intersection_covering_iff CategoryTheory.GrothendieckTopology.intersection_covering_iffₓ'. -/
 @[simp]
 theorem intersection_covering_iff : R ⊓ S ∈ J X ↔ R ∈ J X ∧ S ∈ J X :=
   ⟨fun h => ⟨J.superset_covering inf_le_left h, J.superset_covering inf_le_right h⟩, fun t =>
     intersection_covering _ t.1 t.2⟩
 #align category_theory.grothendieck_topology.intersection_covering_iff CategoryTheory.GrothendieckTopology.intersection_covering_iff
 
+#print CategoryTheory.GrothendieckTopology.bind_covering /-
 theorem bind_covering {S : Sieve X} {R : ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄, S f → Sieve Y} (hS : S ∈ J X)
     (hR : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (H : S f), R H ∈ J Y) : Sieve.bind S R ∈ J X :=
   J.Transitive hS _ fun Y f hf => superset_covering J (Sieve.le_pullback_bind S R f hf) (hR hf)
 #align category_theory.grothendieck_topology.bind_covering CategoryTheory.GrothendieckTopology.bind_covering
+-/
 
+#print CategoryTheory.GrothendieckTopology.Covers /-
 /-- The sieve `S` on `X` `J`-covers an arrow `f` to `X` if `S.pullback f ∈ J Y`.
 This definition is an alternate way of presenting a Grothendieck topology.
 -/
 def Covers (S : Sieve X) (f : Y ⟶ X) : Prop :=
   S.pullback f ∈ J Y
 #align category_theory.grothendieck_topology.covers CategoryTheory.GrothendieckTopology.Covers
+-/
 
+#print CategoryTheory.GrothendieckTopology.covers_iff /-
 theorem covers_iff (S : Sieve X) (f : Y ⟶ X) : J.Covers S f ↔ S.pullback f ∈ J Y :=
   Iff.rfl
 #align category_theory.grothendieck_topology.covers_iff CategoryTheory.GrothendieckTopology.covers_iff
+-/
 
+#print CategoryTheory.GrothendieckTopology.covering_iff_covers_id /-
 theorem covering_iff_covers_id (S : Sieve X) : S ∈ J X ↔ J.Covers S (𝟙 X) := by simp [covers_iff]
 #align category_theory.grothendieck_topology.covering_iff_covers_id CategoryTheory.GrothendieckTopology.covering_iff_covers_id
+-/
 
+#print CategoryTheory.GrothendieckTopology.arrow_max /-
 /-- The maximality axiom in 'arrow' form: Any arrow `f` in `S` is covered by `S`. -/
 theorem arrow_max (f : Y ⟶ X) (S : Sieve X) (hf : S f) : J.Covers S f :=
   by
   rw [covers, (sieve.pullback_eq_top_iff_mem f).1 hf]
   apply J.top_mem
 #align category_theory.grothendieck_topology.arrow_max CategoryTheory.GrothendieckTopology.arrow_max
+-/
 
+#print CategoryTheory.GrothendieckTopology.arrow_stable /-
 /-- The stability axiom in 'arrow' form: If `S` covers `f` then `S` covers `g ≫ f` for any `g`. -/
 theorem arrow_stable (f : Y ⟶ X) (S : Sieve X) (h : J.Covers S f) {Z : C} (g : Z ⟶ Y) :
     J.Covers S (g ≫ f) := by
   rw [covers_iff] at h⊢
   simp [h, sieve.pullback_comp]
 #align category_theory.grothendieck_topology.arrow_stable CategoryTheory.GrothendieckTopology.arrow_stable
+-/
 
+#print CategoryTheory.GrothendieckTopology.arrow_trans /-
 /-- The transitivity axiom in 'arrow' form: If `S` covers `f` and every arrow in `S` is covered by
 `R`, then `R` covers `f`.
 -/
@@ -205,13 +256,21 @@ theorem arrow_trans (f : Y ⟶ X) (S R : Sieve X) (h : J.Covers S f) :
   rw [← sieve.pullback_comp]
   apply k (g ≫ f) hg
 #align category_theory.grothendieck_topology.arrow_trans CategoryTheory.GrothendieckTopology.arrow_trans
+-/
 
+/- warning: category_theory.grothendieck_topology.arrow_intersect -> CategoryTheory.GrothendieckTopology.arrow_intersect is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J S f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J R f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))) S R) f)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (R : CategoryTheory.Sieve.{u1, u2} C _inst_1 X), (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J S f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J R f) -> (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y J (Inf.inf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Lattice.toInf.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (ConditionallyCompleteLattice.toLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X)))) S R) f)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.arrow_intersect CategoryTheory.GrothendieckTopology.arrow_intersectₓ'. -/
 theorem arrow_intersect (f : Y ⟶ X) (S R : Sieve X) (hS : J.Covers S f) (hR : J.Covers R f) :
     J.Covers (S ⊓ R) f := by simpa [covers_iff] using And.intro hS hR
 #align category_theory.grothendieck_topology.arrow_intersect CategoryTheory.GrothendieckTopology.arrow_intersect
 
 variable (C)
 
+#print CategoryTheory.GrothendieckTopology.trivial /-
 /-- The trivial Grothendieck topology, in which only the maximal sieve is covering. This topology is
 also known as the indiscrete, coarse, or chaotic topology.
 
@@ -229,7 +288,9 @@ def trivial : GrothendieckTopology C where
     rw [Set.mem_singleton_iff, ← sieve.id_mem_iff_eq_top] at hS
     simpa using hR hS
 #align category_theory.grothendieck_topology.trivial CategoryTheory.GrothendieckTopology.trivial
+-/
 
+#print CategoryTheory.GrothendieckTopology.discrete /-
 /-- The discrete Grothendieck topology, in which every sieve is covering.
 
 See https://en.wikipedia.org/wiki/Grothendieck_topology#The_discrete_and_indiscrete_topologies.
@@ -241,9 +302,16 @@ def discrete : GrothendieckTopology C
   pullback_stable' X Y f := by simp
   transitive' := by simp
 #align category_theory.grothendieck_topology.discrete CategoryTheory.GrothendieckTopology.discrete
+-/
 
 variable {C}
 
+/- warning: category_theory.grothendieck_topology.trivial_covering -> CategoryTheory.GrothendieckTopology.trivial_covering 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}, Iff (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))
+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}, Iff (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.trivial_covering CategoryTheory.GrothendieckTopology.trivial_coveringₓ'. -/
 theorem trivial_covering : S ∈ trivial C X ↔ S = ⊤ :=
   Set.mem_singleton_iff
 #align category_theory.grothendieck_topology.trivial_covering CategoryTheory.GrothendieckTopology.trivial_covering
@@ -252,9 +320,11 @@ theorem trivial_covering : S ∈ trivial C X ↔ S = ⊤ :=
 instance : LE (GrothendieckTopology C)
     where le J₁ J₂ := (J₁ : ∀ X : C, Set (Sieve X)) ≤ (J₂ : ∀ X : C, Set (Sieve X))
 
+#print CategoryTheory.GrothendieckTopology.le_def /-
 theorem le_def {J₁ J₂ : GrothendieckTopology C} : J₁ ≤ J₂ ↔ (J₁ : ∀ X : C, Set (Sieve X)) ≤ J₂ :=
   Iff.rfl
 #align category_theory.grothendieck_topology.le_def CategoryTheory.GrothendieckTopology.le_def
+-/
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z6> -/
 instance : PartialOrder (GrothendieckTopology C) :=
@@ -279,6 +349,12 @@ instance : InfSet (GrothendieckTopology C)
         apply
           J.transitive (hS _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩) _ fun Y f hf => h hf _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩ }
 
+/- warning: category_theory.grothendieck_topology.is_glb_Inf -> CategoryTheory.GrothendieckTopology.isGLB_infₛ is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.partialOrder.{u1, u2} C _inst_1)) s (InfSet.infₛ.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.hasInf.{u1, u2} C _inst_1) s)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (s : Set.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1)), IsGLB.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instPartialOrderGrothendieckTopology.{u1, u2} C _inst_1)) s (InfSet.infₛ.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instInfSetGrothendieckTopology.{u1, u2} C _inst_1) s)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_infₛₓ'. -/
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
 theorem isGLB_infₛ (s : Set (GrothendieckTopology C)) : IsGLB s (infₛ s) :=
   by
@@ -310,35 +386,72 @@ instance : CompleteLattice (GrothendieckTopology C) :=
 instance : Inhabited (GrothendieckTopology C) :=
   ⟨⊤⟩
 
+/- warning: category_theory.grothendieck_topology.trivial_eq_bot -> CategoryTheory.GrothendieckTopology.trivial_eq_bot is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1)))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.trivial.{u1, u2} C _inst_1) (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1)))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.trivial_eq_bot CategoryTheory.GrothendieckTopology.trivial_eq_botₓ'. -/
 @[simp]
 theorem trivial_eq_bot : trivial C = ⊥ :=
   rfl
 #align category_theory.grothendieck_topology.trivial_eq_bot CategoryTheory.GrothendieckTopology.trivial_eq_bot
 
+/- warning: category_theory.grothendieck_topology.discrete_eq_top -> CategoryTheory.GrothendieckTopology.discrete_eq_top is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.discrete.{u1, u2} C _inst_1) (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1)))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C], Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.discrete.{u1, u2} C _inst_1) (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1)))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.discrete_eq_top CategoryTheory.GrothendieckTopology.discrete_eq_topₓ'. -/
 @[simp]
 theorem discrete_eq_top : discrete C = ⊤ :=
   rfl
 #align category_theory.grothendieck_topology.discrete_eq_top CategoryTheory.GrothendieckTopology.discrete_eq_top
 
+/- warning: category_theory.grothendieck_topology.bot_covering -> CategoryTheory.GrothendieckTopology.bot_covering 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}, Iff (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.completeLattice.{u1, u2} C _inst_1 X))))
+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}, Iff (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) X)) (Eq.{max (succ u2) (succ u1)} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) S (Top.top.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (CategoryTheory.Sieve.instCompleteLatticeSieve.{u1, u2} C _inst_1 X))))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.bot_covering CategoryTheory.GrothendieckTopology.bot_coveringₓ'. -/
 @[simp]
 theorem bot_covering : S ∈ (⊥ : GrothendieckTopology C) X ↔ S = ⊤ :=
   trivial_covering
 #align category_theory.grothendieck_topology.bot_covering CategoryTheory.GrothendieckTopology.bot_covering
 
+/- warning: category_theory.grothendieck_topology.top_covering -> CategoryTheory.GrothendieckTopology.top_covering 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}, Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.hasMem.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ (max u2 u1))} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (fun (_x : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) => forall (X : C), Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (CategoryTheory.GrothendieckTopology.hasCoeToFun.{u1, u2} C _inst_1) (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) X)
+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}, Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (Set.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Sieve.{u1, u2} C _inst_1 X)) S (CategoryTheory.GrothendieckTopology.sieves.{u1, u2} C _inst_1 (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) X)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.top_covering CategoryTheory.GrothendieckTopology.top_coveringₓ'. -/
 @[simp]
 theorem top_covering : S ∈ (⊤ : GrothendieckTopology C) X :=
   ⟨⟩
 #align category_theory.grothendieck_topology.top_covering CategoryTheory.GrothendieckTopology.top_covering
 
+/- warning: category_theory.grothendieck_topology.bot_covers -> CategoryTheory.GrothendieckTopology.bot_covers is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), Iff (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) S f) (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 Y f)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), Iff (CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Bot.bot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toBot.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) S f) (CategoryTheory.Sieve.arrows.{u1, u2} C _inst_1 X S Y f)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.bot_covers CategoryTheory.GrothendieckTopology.bot_coversₓ'. -/
 theorem bot_covers (S : Sieve X) (f : Y ⟶ X) : (⊥ : GrothendieckTopology C).Covers S f ↔ S f := by
   rw [covers_iff, bot_covering, ← sieve.pullback_eq_top_iff_mem]
 #align category_theory.grothendieck_topology.bot_covers CategoryTheory.GrothendieckTopology.bot_covers
 
+/- warning: category_theory.grothendieck_topology.top_covers -> CategoryTheory.GrothendieckTopology.top_covers is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toHasTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.completeLattice.{u1, u2} C _inst_1))) S f
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (S : CategoryTheory.Sieve.{u1, u2} C _inst_1 X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.GrothendieckTopology.Covers.{u1, u2} C _inst_1 X Y (Top.top.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CompleteLattice.toTop.{max u2 u1} (CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (CategoryTheory.GrothendieckTopology.instCompleteLatticeGrothendieckTopology.{u1, u2} C _inst_1))) S f
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.top_covers CategoryTheory.GrothendieckTopology.top_coversₓ'. -/
 @[simp]
 theorem top_covers (S : Sieve X) (f : Y ⟶ X) : (⊤ : GrothendieckTopology C).Covers S f := by
   simp [covers_iff]
 #align category_theory.grothendieck_topology.top_covers CategoryTheory.GrothendieckTopology.top_covers
 
+#print CategoryTheory.GrothendieckTopology.dense /-
 /-- The dense Grothendieck topology.
 
 See https://ncatlab.org/nlab/show/dense+topology, or [MM92] Chapter III, Section 2, example (e).
@@ -357,11 +470,15 @@ def dense : GrothendieckTopology C
     rcases H₂ H₃ (𝟙 Z) with ⟨W, h, H₄⟩
     exact ⟨W, h ≫ g, by simpa using H₄⟩
 #align category_theory.grothendieck_topology.dense CategoryTheory.GrothendieckTopology.dense
+-/
 
+#print CategoryTheory.GrothendieckTopology.dense_covering /-
 theorem dense_covering : S ∈ dense X ↔ ∀ {Y} (f : Y ⟶ X), ∃ (Z : _)(g : Z ⟶ Y), S (g ≫ f) :=
   Iff.rfl
 #align category_theory.grothendieck_topology.dense_covering CategoryTheory.GrothendieckTopology.dense_covering
+-/
 
+#print CategoryTheory.GrothendieckTopology.RightOreCondition /-
 /--
 A category satisfies the right Ore condition if any span can be completed to a commutative square.
 NB. Any category with pullbacks obviously satisfies the right Ore condition, see
@@ -370,11 +487,15 @@ NB. Any category with pullbacks obviously satisfies the right Ore condition, see
 def RightOreCondition (C : Type u) [Category.{v} C] : Prop :=
   ∀ {X Y Z : C} (yx : Y ⟶ X) (zx : Z ⟶ X), ∃ (W : _)(wy : W ⟶ Y)(wz : W ⟶ Z), wy ≫ yx = wz ≫ zx
 #align category_theory.grothendieck_topology.right_ore_condition CategoryTheory.GrothendieckTopology.RightOreCondition
+-/
 
+#print CategoryTheory.GrothendieckTopology.right_ore_of_pullbacks /-
 theorem right_ore_of_pullbacks [Limits.HasPullbacks C] : RightOreCondition C := fun X Y Z yx zx =>
   ⟨_, _, _, Limits.pullback.condition⟩
 #align category_theory.grothendieck_topology.right_ore_of_pullbacks CategoryTheory.GrothendieckTopology.right_ore_of_pullbacks
+-/
 
+#print CategoryTheory.GrothendieckTopology.atomic /-
 /-- The atomic Grothendieck topology: a sieve is covering iff it is nonempty.
 For the pullback stability condition, we need the right Ore condition to hold.
 
@@ -394,12 +515,15 @@ def atomic (hro : RightOreCondition C) : GrothendieckTopology C
     rcases h hf with ⟨Z, g, hg⟩
     exact ⟨_, _, hg⟩
 #align category_theory.grothendieck_topology.atomic CategoryTheory.GrothendieckTopology.atomic
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover /-
 /-- `J.cover X` denotes the poset of covers of `X` with respect to the
 Grothendieck topology `J`. -/
 def Cover (X : C) :=
   { S : Sieve X // S ∈ J X }deriving Preorder
 #align category_theory.grothendieck_topology.cover CategoryTheory.GrothendieckTopology.Cover
+-/
 
 namespace Cover
 
@@ -416,14 +540,18 @@ theorem coe_fun_coe (S : J.cover X) (f : Y ⟶ X) : (S : Sieve X) f = S f :=
   rfl
 #align category_theory.grothendieck_topology.cover.coe_fun_coe CategoryTheory.GrothendieckTopology.Cover.coe_fun_coe
 
+#print CategoryTheory.GrothendieckTopology.Cover.condition /-
 theorem condition (S : J.cover X) : (S : Sieve X) ∈ J X :=
   S.2
 #align category_theory.grothendieck_topology.cover.condition CategoryTheory.GrothendieckTopology.Cover.condition
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.ext /-
 @[ext]
 theorem ext (S T : J.cover X) (h : ∀ ⦃Y⦄ (f : Y ⟶ X), S f ↔ T f) : S = T :=
   Subtype.ext <| Sieve.ext h
 #align category_theory.grothendieck_topology.cover.ext CategoryTheory.GrothendieckTopology.Cover.ext
+-/
 
 instance : OrderTop (J.cover X) :=
   { (inferInstance : Preorder _) with
@@ -444,6 +572,7 @@ instance : SemilatticeInf (J.cover X) :=
 instance : Inhabited (J.cover X) :=
   ⟨⊤⟩
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow /-
 /-- An auxiliary structure, used to define `S.index` in `plus.lean`. -/
 @[nolint has_nonempty_instance, ext]
 structure Arrow (S : J.cover X) where
@@ -451,7 +580,9 @@ structure Arrow (S : J.cover X) where
   f : Y ⟶ X
   hf : S f
 #align category_theory.grothendieck_topology.cover.arrow CategoryTheory.GrothendieckTopology.Cover.Arrow
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation /-
 /-- An auxiliary structure, used to define `S.index` in `plus.lean`. -/
 @[nolint has_nonempty_instance, ext]
 structure Relation (S : J.cover X) where
@@ -464,97 +595,158 @@ structure Relation (S : J.cover X) where
   h₂ : S f₂
   w : g₁ ≫ f₁ = g₂ ≫ f₂
 #align category_theory.grothendieck_topology.cover.relation CategoryTheory.GrothendieckTopology.Cover.Relation
+-/
 
+/- warning: category_theory.grothendieck_topology.cover.arrow.map -> CategoryTheory.GrothendieckTopology.Cover.Arrow.map is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.arrow.map CategoryTheory.GrothendieckTopology.Cover.Arrow.mapₓ'. -/
 /-- Map a `arrow` along a refinement `S ⟶ T`. -/
 @[simps]
 def Arrow.map {S T : J.cover X} (I : S.arrow) (f : S ⟶ T) : T.arrow :=
   ⟨I.y, I.f, f.le _ I.hf⟩
 #align category_theory.grothendieck_topology.cover.arrow.map CategoryTheory.GrothendieckTopology.Cover.Arrow.map
 
+/- warning: category_theory.grothendieck_topology.cover.relation.map -> CategoryTheory.GrothendieckTopology.Cover.Relation.map is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J T)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X}, (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) -> (Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T) -> (CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J T)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.relation.map CategoryTheory.GrothendieckTopology.Cover.Relation.mapₓ'. -/
 /-- Map a `relation` along a refinement `S ⟶ T`. -/
 @[simps]
 def Relation.map {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) : T.Relation :=
   ⟨_, _, _, I.g₁, I.g₂, I.f₁, I.f₂, f.le _ I.h₁, f.le _ I.h₂, I.w⟩
 #align category_theory.grothendieck_topology.cover.relation.map CategoryTheory.GrothendieckTopology.Cover.Relation.map
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.fst /-
 /-- The first `arrow` associated to a `relation`.
 Used in defining `index` in `plus.lean`. -/
 @[simps]
 def Relation.fst {S : J.cover X} (I : S.Relation) : S.arrow :=
   ⟨I.y₁, I.f₁, I.h₁⟩
 #align category_theory.grothendieck_topology.cover.relation.fst CategoryTheory.GrothendieckTopology.Cover.Relation.fst
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.snd /-
 /-- The second `arrow` associated to a `relation`.
 Used in defining `index` in `plus.lean`. -/
 @[simps]
 def Relation.snd {S : J.cover X} (I : S.Relation) : S.arrow :=
   ⟨I.y₂, I.f₂, I.h₂⟩
 #align category_theory.grothendieck_topology.cover.relation.snd CategoryTheory.GrothendieckTopology.Cover.Relation.snd
+-/
 
+/- warning: category_theory.grothendieck_topology.cover.relation.map_fst -> CategoryTheory.GrothendieckTopology.Cover.Relation.map_fst is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.fst.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.relation.map_fst CategoryTheory.GrothendieckTopology.Cover.Relation.map_fstₓ'. -/
 @[simp]
 theorem Relation.map_fst {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) :
     I.fst.map f = (I.map f).fst :=
   rfl
 #align category_theory.grothendieck_topology.cover.relation.map_fst CategoryTheory.GrothendieckTopology.Cover.Relation.map_fst
 
+/- warning: category_theory.grothendieck_topology.cover.relation.map_snd -> CategoryTheory.GrothendieckTopology.Cover.Relation.map_snd is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} {T : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X} (I : CategoryTheory.GrothendieckTopology.Cover.Relation.{u1, u2} C _inst_1 X J S) (f : Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) S T), Eq.{max (succ u2) (succ u1)} (CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J T) (CategoryTheory.GrothendieckTopology.Cover.Arrow.map.{u1, u2} C _inst_1 X J S T (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J S I) f) (CategoryTheory.GrothendieckTopology.Cover.Relation.snd.{u1, u2} C _inst_1 X J T (CategoryTheory.GrothendieckTopology.Cover.Relation.map.{u1, u2} C _inst_1 X J S T I f))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.relation.map_snd CategoryTheory.GrothendieckTopology.Cover.Relation.map_sndₓ'. -/
 @[simp]
 theorem Relation.map_snd {S T : J.cover X} (I : S.Relation) (f : S ⟶ T) :
     I.snd.map f = (I.map f).snd :=
   rfl
 #align category_theory.grothendieck_topology.cover.relation.map_snd CategoryTheory.GrothendieckTopology.Cover.Relation.map_snd
 
+#print CategoryTheory.GrothendieckTopology.Cover.pullback /-
 /-- Pull back a cover along a morphism. -/
 def pullback (S : J.cover X) (f : Y ⟶ X) : J.cover Y :=
   ⟨Sieve.pullback f S, J.pullback_stable _ S.condition⟩
 #align category_theory.grothendieck_topology.cover.pullback CategoryTheory.GrothendieckTopology.Cover.pullback
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.base /-
 /-- An arrow of `S.pullback f` gives rise to an arrow of `S`. -/
 @[simps]
 def Arrow.base {f : Y ⟶ X} {S : J.cover X} (I : (S.pullback f).arrow) : S.arrow :=
   ⟨I.y, I.f ≫ f, I.hf⟩
 #align category_theory.grothendieck_topology.cover.arrow.base CategoryTheory.GrothendieckTopology.Cover.Arrow.base
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.base /-
 /-- A relation of `S.pullback f` gives rise to a relation of `S`. -/
 @[simps]
 def Relation.base {f : Y ⟶ X} {S : J.cover X} (I : (S.pullback f).Relation) : S.Relation :=
   ⟨_, _, _, I.g₁, I.g₂, I.f₁ ≫ f, I.f₂ ≫ f, I.h₁, I.h₂, by simp [reassoc_of I.w]⟩
 #align category_theory.grothendieck_topology.cover.relation.base CategoryTheory.GrothendieckTopology.Cover.Relation.base
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.base_fst /-
 @[simp]
 theorem Relation.base_fst {f : Y ⟶ X} {S : J.cover X} (I : (S.pullback f).Relation) :
     I.fst.base = I.base.fst :=
   rfl
 #align category_theory.grothendieck_topology.cover.relation.base_fst CategoryTheory.GrothendieckTopology.Cover.Relation.base_fst
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Relation.base_snd /-
 @[simp]
 theorem Relation.base_snd {f : Y ⟶ X} {S : J.cover X} (I : (S.pullback f).Relation) :
     I.snd.base = I.base.snd :=
   rfl
 #align category_theory.grothendieck_topology.cover.relation.base_snd CategoryTheory.GrothendieckTopology.Cover.Relation.base_snd
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.coe_pullback /-
 @[simp]
 theorem coe_pullback {Z : C} (f : Y ⟶ X) (g : Z ⟶ Y) (S : J.cover X) :
     (S.pullback f) g ↔ S (g ≫ f) :=
   Iff.rfl
 #align category_theory.grothendieck_topology.cover.coe_pullback CategoryTheory.GrothendieckTopology.Cover.coe_pullback
+-/
 
+/- warning: category_theory.grothendieck_topology.cover.pullback_id -> CategoryTheory.GrothendieckTopology.Cover.pullbackId is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X X J S (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) S
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X X J S (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) S
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.pullback_id CategoryTheory.GrothendieckTopology.Cover.pullbackIdₓ'. -/
 /-- The isomorphism between `S` and the pullback of `S` w.r.t. the identity. -/
 def pullbackId (S : J.cover X) : S.pullback (𝟙 X) ≅ S :=
   eqToIso <| Cover.ext _ _ fun Y f => by simp
 #align category_theory.grothendieck_topology.cover.pullback_id CategoryTheory.GrothendieckTopology.Cover.pullbackId
 
+/- warning: category_theory.grothendieck_topology.cover.pullback_comp -> CategoryTheory.GrothendieckTopology.Cover.pullbackComp is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} {Y : C} {Z : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Z J S (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) Z Y X f g)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 Y Z J (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Y J S g) f)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} {Y : C} {Z : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Z J S (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) Z Y X f g)) (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 Y Z J (CategoryTheory.GrothendieckTopology.Cover.pullback.{u1, u2} C _inst_1 X Y J S g) f)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.pullback_comp CategoryTheory.GrothendieckTopology.Cover.pullbackCompₓ'. -/
 /-- Pulling back with respect to a composition is the composition of the pullbacks. -/
 def pullbackComp {X Y Z : C} (S : J.cover X) (f : Z ⟶ Y) (g : Y ⟶ X) :
     S.pullback (f ≫ g) ≅ (S.pullback g).pullback f :=
   eqToIso <| Cover.ext _ _ fun Y f => by simp
 #align category_theory.grothendieck_topology.cover.pullback_comp CategoryTheory.GrothendieckTopology.Cover.pullbackComp
 
+#print CategoryTheory.GrothendieckTopology.Cover.bind /-
 /-- Combine a family of covers over a cover. -/
 def bind {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : J.cover X :=
   ⟨Sieve.bind S fun Y f hf => T ⟨Y, f, hf⟩,
     J.bind_covering S.condition fun _ _ _ => (T _).condition⟩
 #align category_theory.grothendieck_topology.cover.bind CategoryTheory.GrothendieckTopology.Cover.bind
+-/
 
+/- warning: category_theory.grothendieck_topology.cover.bind_to_base -> CategoryTheory.GrothendieckTopology.Cover.bindToBase is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (T : forall (I : CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S), CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J (CategoryTheory.GrothendieckTopology.Cover.Arrow.y.{u1, u2} C _inst_1 X J S I)), Quiver.Hom.{succ (max u2 u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))) (CategoryTheory.GrothendieckTopology.Cover.bind.{u1, u2} C _inst_1 J X S T) S
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1} {X : C} (S : CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (T : forall (I : CategoryTheory.GrothendieckTopology.Cover.Arrow.{u1, u2} C _inst_1 X J S), CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J (CategoryTheory.GrothendieckTopology.Cover.Arrow.Y.{u1, u2} C _inst_1 X J S I)), Quiver.Hom.{max (succ u2) (succ u1), max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))) (CategoryTheory.GrothendieckTopology.Cover.bind.{u1, u2} C _inst_1 J X S T) S
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.bind_to_base CategoryTheory.GrothendieckTopology.Cover.bindToBaseₓ'. -/
 /-- The canonical moprhism from `S.bind T` to `T`. -/
 def bindToBase {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : S.bind T ⟶ S :=
   homOfLE <| by
@@ -564,56 +756,73 @@ def bindToBase {X : C} (S : J.cover X) (T : ∀ I : S.arrow, J.cover I.y) : S.bi
     exact h1
 #align category_theory.grothendieck_topology.cover.bind_to_base CategoryTheory.GrothendieckTopology.Cover.bindToBase
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.middle /-
 /-- An arrow in bind has the form `A ⟶ B ⟶ X` where `A ⟶ B` is an arrow in `T I` for some `I`.
  and `B ⟶ X` is an arrow of `S`. This is the object `B`. -/
 noncomputable def Arrow.middle {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : C :=
   I.hf.some
 #align category_theory.grothendieck_topology.cover.arrow.middle CategoryTheory.GrothendieckTopology.Cover.Arrow.middle
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.toMiddleHom /-
 /-- An arrow in bind has the form `A ⟶ B ⟶ X` where `A ⟶ B` is an arrow in `T I` for some `I`.
  and `B ⟶ X` is an arrow of `S`. This is the hom `A ⟶ B`. -/
 noncomputable def Arrow.toMiddleHom {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : I.y ⟶ I.middle :=
   I.hf.choose_spec.some
 #align category_theory.grothendieck_topology.cover.arrow.to_middle_hom CategoryTheory.GrothendieckTopology.Cover.Arrow.toMiddleHom
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.fromMiddleHom /-
 /-- An arrow in bind has the form `A ⟶ B ⟶ X` where `A ⟶ B` is an arrow in `T I` for some `I`.
  and `B ⟶ X` is an arrow of `S`. This is the hom `B ⟶ X`. -/
 noncomputable def Arrow.fromMiddleHom {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : I.middle ⟶ X :=
   I.hf.choose_spec.choose_spec.some
 #align category_theory.grothendieck_topology.cover.arrow.from_middle_hom CategoryTheory.GrothendieckTopology.Cover.Arrow.fromMiddleHom
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.from_middle_condition /-
 theorem Arrow.from_middle_condition {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : S I.fromMiddleHom :=
   I.hf.choose_spec.choose_spec.choose_spec.some
 #align category_theory.grothendieck_topology.cover.arrow.from_middle_condition CategoryTheory.GrothendieckTopology.Cover.Arrow.from_middle_condition
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.fromMiddle /-
 /-- An arrow in bind has the form `A ⟶ B ⟶ X` where `A ⟶ B` is an arrow in `T I` for some `I`.
  and `B ⟶ X` is an arrow of `S`. This is the hom `B ⟶ X`, as an arrow. -/
 noncomputable def Arrow.fromMiddle {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : S.arrow :=
   ⟨_, I.fromMiddleHom, I.from_middle_condition⟩
 #align category_theory.grothendieck_topology.cover.arrow.from_middle CategoryTheory.GrothendieckTopology.Cover.Arrow.fromMiddle
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.to_middle_condition /-
 theorem Arrow.to_middle_condition {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : (T I.fromMiddle) I.toMiddleHom :=
   I.hf.choose_spec.choose_spec.choose_spec.choose_spec.1
 #align category_theory.grothendieck_topology.cover.arrow.to_middle_condition CategoryTheory.GrothendieckTopology.Cover.Arrow.to_middle_condition
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.toMiddle /-
 /-- An arrow in bind has the form `A ⟶ B ⟶ X` where `A ⟶ B` is an arrow in `T I` for some `I`.
  and `B ⟶ X` is an arrow of `S`. This is the hom `A ⟶ B`, as an arrow. -/
 noncomputable def Arrow.toMiddle {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : (T I.fromMiddle).arrow :=
   ⟨_, I.toMiddleHom, I.to_middle_condition⟩
 #align category_theory.grothendieck_topology.cover.arrow.to_middle CategoryTheory.GrothendieckTopology.Cover.Arrow.toMiddle
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.Arrow.middle_spec /-
 theorem Arrow.middle_spec {X : C} {S : J.cover X} {T : ∀ I : S.arrow, J.cover I.y}
     (I : (S.bind T).arrow) : I.toMiddleHom ≫ I.fromMiddleHom = I.f :=
   I.hf.choose_spec.choose_spec.choose_spec.choose_spec.2
 #align category_theory.grothendieck_topology.cover.arrow.middle_spec CategoryTheory.GrothendieckTopology.Cover.Arrow.middle_spec
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.index /-
 -- This is used extensively in `plus.lean`, etc.
 -- We place this definition here as it will be used in `sheaf.lean` as well.
 /-- To every `S : J.cover X` and presheaf `P`, associate a `multicospan_index`. -/
@@ -628,7 +837,9 @@ def index {D : Type w} [Category.{max v u} D] (S : J.cover X) (P : Cᵒᵖ ⥤ D
   fst I := P.map I.g₁.op
   snd I := P.map I.g₂.op
 #align category_theory.grothendieck_topology.cover.index CategoryTheory.GrothendieckTopology.Cover.index
+-/
 
+#print CategoryTheory.GrothendieckTopology.Cover.multifork /-
 /-- The natural multifork associated to `S : J.cover X` for a presheaf `P`.
 Saying that this multifork is a limit is essentially equivalent to the sheaf condition at the
 given object for the given covering sieve. See `sheaf.lean` for an equivalent sheaf condition
@@ -642,7 +853,14 @@ abbrev multifork {D : Type w} [Category.{max v u} D] (S : J.cover X) (P : Cᵒ
       dsimp [index]
       simp only [← P.map_comp, ← op_comp, I.w])
 #align category_theory.grothendieck_topology.cover.multifork CategoryTheory.GrothendieckTopology.Cover.multifork
+-/
 
+/- warning: category_theory.grothendieck_topology.cover.to_multiequalizer -> CategoryTheory.GrothendieckTopology.Cover.toMultiequalizer is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (P : CategoryTheory.Functor.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) [_inst_3 : CategoryTheory.Limits.HasMultiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)], Quiver.Hom.{succ (max u2 u3), u1} D (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, u1} D (CategoryTheory.Category.toCategoryStruct.{max u2 u3, u1} D _inst_2)) (CategoryTheory.Functor.obj.{u2, max u2 u3, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2 P (Opposite.op.{succ u3} C X)) (CategoryTheory.Limits.multiequalizer.{max u2 u3, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P) _inst_3)
+but is expected to have type
+  forall {C : Type.{u3}} [_inst_1 : CategoryTheory.Category.{u2, u3} C] {X : C} {J : CategoryTheory.GrothendieckTopology.{u2, u3} C _inst_1} {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{max u2 u3, u1} D] (S : CategoryTheory.GrothendieckTopology.Cover.{u2, u3} C _inst_1 J X) (P : CategoryTheory.Functor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2) [_inst_3 : CategoryTheory.Limits.HasMultiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P)], Quiver.Hom.{max (succ u3) (succ u2), u1} D (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, u1} D (CategoryTheory.Category.toCategoryStruct.{max u3 u2, u1} D _inst_2)) (Prefunctor.obj.{succ u2, max (succ u3) (succ u2), u3, 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))) D (CategoryTheory.CategoryStruct.toQuiver.{max u3 u2, u1} D (CategoryTheory.Category.toCategoryStruct.{max u3 u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u2, max u3 u2, u3, u1} (Opposite.{succ u3} C) (CategoryTheory.Category.opposite.{u2, u3} C _inst_1) D _inst_2 P) (Opposite.op.{succ u3} C X)) (CategoryTheory.Limits.multiequalizer.{max u3 u2, u1, max u3 u2} D _inst_2 (CategoryTheory.GrothendieckTopology.Cover.index.{u1, u2, u3} C _inst_1 X J D _inst_2 S P) _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.cover.to_multiequalizer CategoryTheory.GrothendieckTopology.Cover.toMultiequalizerₓ'. -/
 /-- The canonical map from `P.obj (op X)` to the multiequalizer associated to a covering sieve,
 assuming such a multiequalizer exists. This will be used in `sheaf.lean` to provide an equivalent
 sheaf condition in terms of multiequalizers. -/
@@ -658,6 +876,12 @@ noncomputable abbrev toMultiequalizer {D : Type w} [Category.{max v u} D] (S : J
 
 end Cover
 
+/- warning: category_theory.grothendieck_topology.pullback -> CategoryTheory.GrothendieckTopology.pullback is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) -> (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Y)))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {X : C} {Y : C} (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1), (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y X) -> (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Y)))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.pullback CategoryTheory.GrothendieckTopology.pullbackₓ'. -/
 /-- Pull back a cover along a morphism. -/
 @[simps obj]
 def pullback (f : Y ⟶ X) : J.cover X ⥤ J.cover Y
@@ -666,11 +890,23 @@ def pullback (f : Y ⟶ X) : J.cover X ⥤ J.cover Y
   map S T f := (Sieve.pullback_monotone _ f.le).Hom
 #align category_theory.grothendieck_topology.pullback CategoryTheory.GrothendieckTopology.pullback
 
+/- warning: category_theory.grothendieck_topology.pullback_id -> CategoryTheory.GrothendieckTopology.pullbackId is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 X X J (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) (CategoryTheory.Functor.id.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) (X : C), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 X X J (CategoryTheory.CategoryStruct.id.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X)) (CategoryTheory.Functor.id.{max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.pullback_id CategoryTheory.GrothendieckTopology.pullbackIdₓ'. -/
 /-- Pulling back along the identity is naturally isomorphic to the identity functor. -/
 def pullbackId (X : C) : J.pullback (𝟙 X) ≅ 𝟭 _ :=
   (NatIso.ofComponents fun S => S.pullback_id) <| by tidy
 #align category_theory.grothendieck_topology.pullback_id CategoryTheory.GrothendieckTopology.pullbackId
 
+/- warning: category_theory.grothendieck_topology.pullback_comp -> CategoryTheory.GrothendieckTopology.pullbackComp is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z X J (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J Y)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.Cover.preorder.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z Y J g) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Y X J f))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (J : CategoryTheory.GrothendieckTopology.{u1, u2} C _inst_1) {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), CategoryTheory.Iso.{max u2 u1, max u2 u1} (CategoryTheory.Functor.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.Functor.category.{max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X))) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z X J (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g)) (CategoryTheory.Functor.comp.{max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1, max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Z) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Z)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J Y) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J Y)) (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.GrothendieckTopology.Cover.{u1, u2} C _inst_1 J X) (CategoryTheory.GrothendieckTopology.instPreorderCover.{u1, u2} C _inst_1 J X)) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Z Y J g) (CategoryTheory.GrothendieckTopology.pullback.{u1, u2} C _inst_1 Y X J f))
+Case conversion may be inaccurate. Consider using '#align category_theory.grothendieck_topology.pullback_comp CategoryTheory.GrothendieckTopology.pullbackCompₓ'. -/
 /-- Pulling back along a composition is naturally isomorphic to
 the composition of the pullbacks. -/
 def pullbackComp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) :
Diff
@@ -649,7 +649,7 @@ sheaf condition in terms of multiequalizers. -/
 noncomputable abbrev toMultiequalizer {D : Type w} [Category.{max v u} D] (S : J.cover X)
     (P : Cᵒᵖ ⥤ D) [Limits.HasMultiequalizer (S.index P)] :
     P.obj (Opposite.op X) ⟶ Limits.multiequalizer (S.index P) :=
-  Limits.multiequalizer.lift _ _ (fun I => P.map I.f.op)
+  Limits.Multiequalizer.lift _ _ (fun I => P.map I.f.op)
     (by
       intro I
       dsimp only [index, relation.fst, relation.snd]

Changes in mathlib4

mathlib3
mathlib4
chore: split Subsingleton,Nontrivial off of Data.Set.Basic (#11832)

Moves definition of and lemmas related to Set.Subsingleton and Set.Nontrivial to a new file, so that Basic can be shorter.

Diff
@@ -8,7 +8,7 @@ import Mathlib.CategoryTheory.Limits.Shapes.Pullbacks
 import Mathlib.CategoryTheory.Limits.Shapes.Multiequalizer
 import Mathlib.CategoryTheory.Category.Preorder
 import Mathlib.Order.Copy
-import Mathlib.Data.Set.Basic
+import Mathlib.Data.Set.Subsingleton
 
 #align_import category_theory.sites.grothendieck from "leanprover-community/mathlib"@"14b69e9f3c16630440a2cbd46f1ddad0d561dee7"
 
chore: classify porting notes referring to missing linters (#12098)

Reference the newly created issues #12094 and #12096, as well as the pre-existing #5171. Change all references to #10927 to #5171. Some of these changes were not labelled as "porting note"; change this for good measure.

Diff
@@ -478,7 +478,8 @@ instance : Inhabited (J.Cover X) :=
   ⟨⊤⟩
 
 /-- An auxiliary structure, used to define `S.index`. -/
---@[nolint has_nonempty_instance, ext]
+-- Porting note(#5171): this linter isn't ported yet.
+-- @[nolint has_nonempty_instance]
 @[ext]
 structure Arrow (S : J.Cover X) where
   /-- The source of the arrow. -/
@@ -490,7 +491,8 @@ structure Arrow (S : J.Cover X) where
 #align category_theory.grothendieck_topology.cover.arrow CategoryTheory.GrothendieckTopology.Cover.Arrow
 
 /-- An auxiliary structure, used to define `S.index`. -/
---@[nolint has_nonempty_instance, ext]
+-- Porting note(#5171): this linter isn't ported yet.
+-- @[nolint has_nonempty_instance, ext]
 @[ext]
 structure Relation (S : J.Cover X) where
   /-- The source of the first arrow. -/
style: replace '.-/' by '. -/' (#11938)

Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.

Diff
@@ -426,7 +426,7 @@ instance : Coe (J.Cover X) (Sieve X) :=
 /-
 Porting note (#11445): Added this def as a replacement for the "dangerous" `Coe` above.
 -/
-/-- The sieve associated to a term of `J.Cover X`.-/
+/-- The sieve associated to a term of `J.Cover X`. -/
 def sieve (S : J.Cover X) : Sieve X := S.1
 
 /-
chore: classify new definition porting notes (#11512)

Classifies by adding issue number #11446 to porting notes claiming "added definition".

Diff
@@ -424,7 +424,7 @@ instance : Coe (J.Cover X) (Sieve X) :=
 -/
 
 /-
-Porting note: Added this def as a replacement for the "dangerous" `Coe` above.
+Porting note (#11445): Added this def as a replacement for the "dangerous" `Coe` above.
 -/
 /-- The sieve associated to a term of `J.Cover X`.-/
 def sieve (S : J.Cover X) : Sieve X := S.1
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
@@ -95,7 +95,6 @@ instance : CoeFun (GrothendieckTopology C) fun _ => ∀ X : C, Set (Sieve X) :=
 
 variable {C}
 variable {X Y : C} {S R : Sieve X}
-
 variable (J : GrothendieckTopology C)
 
 /-- An extensionality lemma in terms of the coercion to a pi-type.
style: reduce spacing variation in "porting note" comments (#10886)

In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.

Diff
@@ -402,7 +402,7 @@ def atomic (hro : RightOreCondition C) : GrothendieckTopology C
 
 /-- `J.Cover X` denotes the poset of covers of `X` with respect to the
 Grothendieck topology `J`. -/
--- porting note : Lean 3 inferred `Type max u v`, Lean 4 by default gives `Type (max 0 u v)`
+-- Porting note: Lean 3 inferred `Type max u v`, Lean 4 by default gives `Type (max 0 u v)`
 def Cover (X : C) : Type max u v :=
   { S : Sieve X // S ∈ J X } -- deriving Preorder
 #align category_theory.grothendieck_topology.cover CategoryTheory.GrothendieckTopology.Cover
chore: tidy various files (#10362)
Diff
@@ -26,8 +26,9 @@ Two explicit examples of Grothendieck topologies are given:
 as well as the complete lattice structure on Grothendieck topologies (which gives two additional
 explicit topologies: the discrete and trivial topologies.)
 
-A pretopology, or a basis for a topology is defined in `Pretopology.lean`. The topology associated
-to a topological space is defined in `Spaces.lean`.
+A pretopology, or a basis for a topology is defined in
+`Mathlib/CategoryTheory/Sites/Pretopology.lean`. The topology associated
+to a topological space is defined in `Mathlib/CategoryTheory/Sites/Spaces.lean`.
 
 ## Tags
 
chore(*): shake imports (#10199)
  • Remove Data.Set.Basic from scripts/noshake.json.
  • Remove an exception that was used by examples only, move these examples to a new test file.
  • Drop an exception for Order.Filter.Basic dependency on Control.Traversable.Instances, as the relevant parts were moved to Order.Filter.ListTraverse.
  • Run lake exe shake --fix.
Diff
@@ -8,6 +8,7 @@ import Mathlib.CategoryTheory.Limits.Shapes.Pullbacks
 import Mathlib.CategoryTheory.Limits.Shapes.Multiequalizer
 import Mathlib.CategoryTheory.Category.Preorder
 import Mathlib.Order.Copy
+import Mathlib.Data.Set.Basic
 
 #align_import category_theory.sites.grothendieck from "leanprover-community/mathlib"@"14b69e9f3c16630440a2cbd46f1ddad0d561dee7"
 
doc: fix typos (#10100)

Fix minor typos in the following files:

  • Mathlib/GroupTheory/GroupAction/Opposite.lean
  • Mathlib/Init/Control/Lawful.lean
  • Mathlib/ModelTheory/ElementarySubstructures.lean
  • Mathlib/Algebra/Group/Defs.lean
  • Mathlib/Algebra/Group/WithOne/Basic.lean
  • Mathlib/Data/Int/Cast/Defs.lean
  • Mathlib/LinearAlgebra/Dimension/Basic.lean
  • Mathlib/NumberTheory/NumberField/CanonicalEmbedding.lean
  • Mathlib/Algebra/Star/StarAlgHom.lean
  • Mathlib/AlgebraicTopology/SimplexCategory.lean
  • Mathlib/CategoryTheory/Abelian/Homology.lean
  • Mathlib/CategoryTheory/Sites/Grothendieck.lean
  • Mathlib/RingTheory/IsTensorProduct.lean
  • Mathlib/AlgebraicTopology/DoldKan/Homotopies.lean
  • Mathlib/AlgebraicTopology/ExtraDegeneracy.lean
  • Mathlib/AlgebraicTopology/Nerve.lean
  • Mathlib/AlgebraicTopology/SplitSimplicialObject.lean
  • Mathlib/Analysis/ConstantSpeed.lean
  • Mathlib/Analysis/Convolution.lean
Diff
@@ -606,7 +606,7 @@ def bind {X : C} (S : J.Cover X) (T : ∀ I : S.Arrow, J.Cover I.Y) : J.Cover X
     J.bind_covering S.condition fun _ _ _ => (T _).condition⟩
 #align category_theory.grothendieck_topology.cover.bind CategoryTheory.GrothendieckTopology.Cover.bind
 
-/-- The canonical moprhism from `S.bind T` to `T`. -/
+/-- The canonical morphism from `S.bind T` to `T`. -/
 def bindToBase {X : C} (S : J.Cover X) (T : ∀ I : S.Arrow, J.Cover I.Y) : S.bind T ⟶ S :=
   homOfLE <| by
     rintro Y f ⟨Z, e1, e2, h1, _, h3⟩
feat: switch to weaker UnivLE (#8556)

Switch from the strong version of UnivLE ∀ α : Type max u v, Small.{v} α to the weaker version ∀ α : Type u, Small.{v} α.

Transfer Has/Preserves/Reflects(Co)limitsOfSize from a larger size (higher universe) to a smaller size.

In a few places it's now necessary to make the type explicit (for Lean to infer the Small instance, I think).

Also prove a characterization of UnivLE and the totality of the UnivLE relation.

A pared down version of #7695.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -306,7 +306,7 @@ instance : CompleteLattice (GrothendieckTopology C) :=
       · intro X S hS
         rw [trivial_covering] at hS
         apply covering_of_eq_top _ hS
-      · refine' @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_sInf) (trivial C))
+      · exact @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_sInf) (trivial C))
     _ rfl _ rfl _ rfl sInf rfl
 
 instance : Inhabited (GrothendieckTopology C) :=
doc: convert comments to docstrings and doc-comments (#7951)
Diff
@@ -116,13 +116,13 @@ theorem mem_sieves_iff_coe : S ∈ J.sieves X ↔ S ∈ J X :=
 #align category_theory.grothendieck_topology.mem_sieves_iff_coe CategoryTheory.GrothendieckTopology.mem_sieves_iff_coe
 -/
 
--- Also known as the maximality axiom.
+/-- Also known as the maximality axiom. -/
 @[simp]
 theorem top_mem (X : C) : ⊤ ∈ J X :=
   J.top_mem' X
 #align category_theory.grothendieck_topology.top_mem CategoryTheory.GrothendieckTopology.top_mem
 
--- Also known as the stability axiom.
+/-- Also known as the stability axiom. -/
 @[simp]
 theorem pullback_stable (f : Y ⟶ X) (hS : S ∈ J X) : S.pullback f ∈ J Y :=
   J.pullback_stable' f hS
style: fix wrapping of where (#7149)
Diff
@@ -253,8 +253,8 @@ theorem trivial_covering : S ∈ trivial C X ↔ S = ⊤ :=
 #align category_theory.grothendieck_topology.trivial_covering CategoryTheory.GrothendieckTopology.trivial_covering
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z6> -/
-instance instLEGrothendieckTopology : LE (GrothendieckTopology C)
-    where le J₁ J₂ := (J₁ : ∀ X : C, Set (Sieve X)) ≤ (J₂ : ∀ X : C, Set (Sieve X))
+instance instLEGrothendieckTopology : LE (GrothendieckTopology C) where
+  le J₁ J₂ := (J₁ : ∀ X : C, Set (Sieve X)) ≤ (J₂ : ∀ X : C, Set (Sieve X))
 
 theorem le_def {J₁ J₂ : GrothendieckTopology C} : J₁ ≤ J₂ ↔ (J₁ : ∀ X : C, Set (Sieve X)) ≤ J₂ :=
   Iff.rfl
@@ -268,8 +268,8 @@ instance : PartialOrder (GrothendieckTopology C) :=
     le_antisymm := fun J₁ J₂ h₁₂ h₂₁ => GrothendieckTopology.ext (le_antisymm h₁₂ h₂₁) }
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
-instance : InfSet (GrothendieckTopology C)
-    where sInf T :=
+instance : InfSet (GrothendieckTopology C) where
+  sInf T :=
     { sieves := sInf (sieves '' T)
       top_mem' := by
         rintro X S ⟨⟨_, J, hJ, rfl⟩, rfl⟩
chore: ensure all instances referred to directly have explicit names (#6423)

Per https://github.com/leanprover/lean4/issues/2343, we are going to need to change the automatic generation of instance names, as they become too long.

This PR ensures that everywhere in Mathlib that refers to an instance by name, that name is given explicitly, rather than being automatically generated.

There are four exceptions, which are now commented, with links to https://github.com/leanprover/lean4/issues/2343.

This was implemented by running Mathlib against a modified Lean that appended _ᾰ to all automatically generated names, and fixing everything.

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

Diff
@@ -253,7 +253,7 @@ theorem trivial_covering : S ∈ trivial C X ↔ S = ⊤ :=
 #align category_theory.grothendieck_topology.trivial_covering CategoryTheory.GrothendieckTopology.trivial_covering
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z6> -/
-instance : LE (GrothendieckTopology C)
+instance instLEGrothendieckTopology : LE (GrothendieckTopology C)
     where le J₁ J₂ := (J₁ : ∀ X : C, Set (Sieve X)) ≤ (J₂ : ∀ X : C, Set (Sieve X))
 
 theorem le_def {J₁ J₂ : GrothendieckTopology C} : J₁ ≤ J₂ ↔ (J₁ : ∀ X : C, Set (Sieve X)) ≤ J₂ :=
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,11 +2,6 @@
 Copyright (c) 2020 Bhavik Mehta, E. W. Ayers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Bhavik Mehta, E. W. Ayers
-
-! This file was ported from Lean 3 source module category_theory.sites.grothendieck
-! leanprover-community/mathlib commit 14b69e9f3c16630440a2cbd46f1ddad0d561dee7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Sites.Sieves
 import Mathlib.CategoryTheory.Limits.Shapes.Pullbacks
@@ -14,6 +9,8 @@ import Mathlib.CategoryTheory.Limits.Shapes.Multiequalizer
 import Mathlib.CategoryTheory.Category.Preorder
 import Mathlib.Order.Copy
 
+#align_import category_theory.sites.grothendieck from "leanprover-community/mathlib"@"14b69e9f3c16630440a2cbd46f1ddad0d561dee7"
+
 /-!
 # Grothendieck topologies
 
chore: generalise universes in some theorems (#5626)
Diff
@@ -53,7 +53,7 @@ between Grothendieck topoi and left exact reflective subcategories of presheaf t
 -/
 
 
-universe w v u
+universe v₁ u₁ v u
 
 namespace CategoryTheory
 
@@ -671,7 +671,7 @@ theorem Arrow.middle_spec {X : C} {S : J.Cover X} {T : ∀ I : S.Arrow, J.Cover
 -- This is used extensively in `Plus.lean`, etc.
 -- We place this definition here as it will be used in `Sheaf.lean` as well.
 /-- To every `S : J.Cover X` and presheaf `P`, associate a `MulticospanIndex`. -/
-def index {D : Type w} [Category.{max v u} D] (S : J.Cover X) (P : Cᵒᵖ ⥤ D) :
+def index {D : Type u₁} [Category.{v₁} D] (S : J.Cover X) (P : Cᵒᵖ ⥤ D) :
     Limits.MulticospanIndex D where
   L := S.Arrow
   R := S.Relation
@@ -688,7 +688,7 @@ Saying that this multifork is a limit is essentially equivalent to the sheaf con
 given object for the given covering sieve. See `Sheaf.lean` for an equivalent sheaf condition
 using this.
 -/
-abbrev multifork {D : Type w} [Category.{max v u} D] (S : J.Cover X) (P : Cᵒᵖ ⥤ D) :
+abbrev multifork {D : Type u₁} [Category.{v₁} D] (S : J.Cover X) (P : Cᵒᵖ ⥤ D) :
     Limits.Multifork (S.index P) :=
   Limits.Multifork.ofι _ (P.obj (Opposite.op X)) (fun I => P.map I.f.op)
     (by
@@ -700,7 +700,7 @@ abbrev multifork {D : Type w} [Category.{max v u} D] (S : J.Cover X) (P : Cᵒ
 /-- The canonical map from `P.obj (op X)` to the multiequalizer associated to a covering sieve,
 assuming such a multiequalizer exists. This will be used in `Sheaf.lean` to provide an equivalent
 sheaf condition in terms of multiequalizers. -/
-noncomputable abbrev toMultiequalizer {D : Type w} [Category.{max v u} D] (S : J.Cover X)
+noncomputable abbrev toMultiequalizer {D : Type u₁} [Category.{v₁} D] (S : J.Cover X)
     (P : Cᵒᵖ ⥤ D) [Limits.HasMultiequalizer (S.index P)] :
     P.obj (Opposite.op X) ⟶ Limits.multiequalizer (S.index P) :=
   Limits.Multiequalizer.lift _ _ (fun I => P.map I.f.op)
fix: better universe for Cover (#5625)

It had type Type (max 0 u v) before.

Diff
@@ -403,7 +403,8 @@ def atomic (hro : RightOreCondition C) : GrothendieckTopology C
 
 /-- `J.Cover X` denotes the poset of covers of `X` with respect to the
 Grothendieck topology `J`. -/
-def Cover (X : C) :=
+-- porting note : Lean 3 inferred `Type max u v`, Lean 4 by default gives `Type (max 0 u v)`
+def Cover (X : C) : Type max u v :=
   { S : Sieve X // S ∈ J X } -- deriving Preorder
 #align category_theory.grothendieck_topology.cover CategoryTheory.GrothendieckTopology.Cover
 
chore: clean up spacing around at and goals (#5387)

Changes are of the form

  • some_tactic at h⊢ -> some_tactic at h ⊢
  • some_tactic at h -> some_tactic at h
Diff
@@ -198,7 +198,7 @@ theorem arrow_max (f : Y ⟶ X) (S : Sieve X) (hf : S f) : J.Covers S f := by
 /-- The stability axiom in 'arrow' form: If `S` covers `f` then `S` covers `g ≫ f` for any `g`. -/
 theorem arrow_stable (f : Y ⟶ X) (S : Sieve X) (h : J.Covers S f) {Z : C} (g : Z ⟶ Y) :
     J.Covers S (g ≫ f) := by
-  rw [covers_iff] at h⊢
+  rw [covers_iff] at h ⊢
   simp [h, Sieve.pullback_comp]
 #align category_theory.grothendieck_topology.arrow_stable CategoryTheory.GrothendieckTopology.arrow_stable
 
@@ -230,7 +230,7 @@ def trivial : GrothendieckTopology C where
   sieves X := {⊤}
   top_mem' X := rfl
   pullback_stable' X Y S f hf := by
-    rw [Set.mem_singleton_iff] at hf⊢
+    rw [Set.mem_singleton_iff] at hf ⊢
     simp [hf]
   transitive' X S hS R hR := by
     rw [Set.mem_singleton_iff, ← Sieve.id_mem_iff_eq_top] at hS
chore: fix grammar 2/3 (#5002)

Part 2 of #5001

Diff
@@ -518,7 +518,7 @@ structure Relation (S : J.Cover X) where
 
 attribute [reassoc] Relation.w
 
-/-- Map a `Arrow` along a refinement `S ⟶ T`. -/
+/-- Map an `Arrow` along a refinement `S ⟶ T`. -/
 @[simps]
 def Arrow.map {S T : J.Cover X} (I : S.Arrow) (f : S ⟶ T) : T.Arrow :=
   ⟨I.Y, I.f, f.le _ I.hf⟩
chore: formatting issues (#4947)

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

Diff
@@ -363,7 +363,7 @@ def dense : GrothendieckTopology C
     exact ⟨W, h ≫ g, by simpa using H₄⟩
 #align category_theory.grothendieck_topology.dense CategoryTheory.GrothendieckTopology.dense
 
-theorem dense_covering : S ∈ dense X ↔ ∀ {Y} (f : Y ⟶ X), ∃ (Z : _)(g : Z ⟶ Y), S (g ≫ f) :=
+theorem dense_covering : S ∈ dense X ↔ ∀ {Y} (f : Y ⟶ X), ∃ (Z : _) (g : Z ⟶ Y), S (g ≫ f) :=
   Iff.rfl
 #align category_theory.grothendieck_topology.dense_covering CategoryTheory.GrothendieckTopology.dense_covering
 
@@ -373,7 +373,7 @@ NB. Any category with pullbacks obviously satisfies the right Ore condition, see
 `right_ore_of_pullbacks`.
 -/
 def RightOreCondition (C : Type u) [Category.{v} C] : Prop :=
-  ∀ {X Y Z : C} (yx : Y ⟶ X) (zx : Z ⟶ X), ∃ (W : _)(wy : W ⟶ Y)(wz : W ⟶ Z), wy ≫ yx = wz ≫ zx
+  ∀ {X Y Z : C} (yx : Y ⟶ X) (zx : Z ⟶ X), ∃ (W : _) (wy : W ⟶ Y) (wz : W ⟶ Z), wy ≫ yx = wz ≫ zx
 #align category_theory.grothendieck_topology.right_ore_condition CategoryTheory.GrothendieckTopology.RightOreCondition
 
 theorem right_ore_of_pullbacks [Limits.HasPullbacks C] : RightOreCondition C := fun _ _ =>
@@ -387,7 +387,7 @@ See https://ncatlab.org/nlab/show/atomic+site, or [MM92] Chapter III, Section 2,
 -/
 def atomic (hro : RightOreCondition C) : GrothendieckTopology C
     where
-  sieves X S := ∃ (Y : _)(f : Y ⟶ X), S f
+  sieves X S := ∃ (Y : _) (f : Y ⟶ X), S f
   top_mem' X := ⟨_, 𝟙 _, ⟨⟩⟩
   pullback_stable' := by
     rintro X Y S h ⟨Z, f, hf⟩
chore: review of automation in category theory (#4793)

Clean up of automation in the category theory library. Leaving out unnecessary proof steps, or fields done by aesop_cat, and making more use of available autoparameters.

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

Diff
@@ -716,20 +716,19 @@ end Cover
 def pullback (f : Y ⟶ X) : J.Cover X ⥤ J.Cover Y
     where
   obj S := S.pullback f
-  -- Porting note: `(Sieve.pullback_monotone _ f.le).hom` causes issues...
-  map f := homOfLE (Sieve.pullback_monotone _ f.le)
+  map f := (Sieve.pullback_monotone _ f.le).hom
 #align category_theory.grothendieck_topology.pullback CategoryTheory.GrothendieckTopology.pullback
 
 /-- Pulling back along the identity is naturally isomorphic to the identity functor. -/
 def pullbackId (X : C) : J.pullback (𝟙 X) ≅ 𝟭 _ :=
-  (NatIso.ofComponents fun S => S.pullbackId) <| by aesop_cat
+  NatIso.ofComponents fun S => S.pullbackId
 #align category_theory.grothendieck_topology.pullback_id CategoryTheory.GrothendieckTopology.pullbackId
 
 /-- Pulling back along a composition is naturally isomorphic to
 the composition of the pullbacks. -/
 def pullbackComp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) :
     J.pullback (f ≫ g) ≅ J.pullback g ⋙ J.pullback f :=
-  (NatIso.ofComponents fun S => S.pullbackComp f g) <| by aesop_cat
+  NatIso.ofComponents fun S => S.pullbackComp f g
 #align category_theory.grothendieck_topology.pullback_comp CategoryTheory.GrothendieckTopology.pullbackComp
 
 end GrothendieckTopology
chore: Rename to sSup/iSup (#3938)

As discussed on Zulip

Renames

  • supₛsSup
  • infₛsInf
  • supᵢiSup
  • infᵢiInf
  • bsupₛbsSup
  • binfₛbsInf
  • bsupᵢbiSup
  • binfᵢbiInf
  • csupₛcsSup
  • cinfₛcsInf
  • csupᵢciSup
  • cinfᵢciInf
  • unionₛsUnion
  • interₛsInter
  • unionᵢiUnion
  • interᵢiInter
  • bunionₛbsUnion
  • binterₛbsInter
  • bunionᵢbiUnion
  • binterᵢbiInter

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -272,8 +272,8 @@ instance : PartialOrder (GrothendieckTopology C) :=
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
 instance : InfSet (GrothendieckTopology C)
-    where infₛ T :=
-    { sieves := infₛ (sieves '' T)
+    where sInf T :=
+    { sieves := sInf (sieves '' T)
       top_mem' := by
         rintro X S ⟨⟨_, J, hJ, rfl⟩, rfl⟩
         simp
@@ -286,21 +286,21 @@ instance : InfSet (GrothendieckTopology C)
           J.transitive (hS _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩) _ fun Y f hf => h hf _ ⟨⟨_, _, hJ, rfl⟩, rfl⟩ }
 
 /-- See <https://stacks.math.columbia.edu/tag/00Z7> -/
-theorem isGLB_infₛ (s : Set (GrothendieckTopology C)) : IsGLB s (infₛ s) := by
+theorem isGLB_sInf (s : Set (GrothendieckTopology C)) : IsGLB s (sInf s) := by
   refine' @IsGLB.of_image _ _ _ _ sieves _ _ _ _
   · intros
     rfl
-  · exact _root_.isGLB_infₛ _
-#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_infₛ
+  · exact _root_.isGLB_sInf _
+#align category_theory.grothendieck_topology.is_glb_Inf CategoryTheory.GrothendieckTopology.isGLB_sInf
 
 /-- Construct a complete lattice from the `Inf`, but make the trivial and discrete topologies
 definitionally equal to the bottom and top respectively.
 -/
 instance : CompleteLattice (GrothendieckTopology C) :=
-  CompleteLattice.copy (completeLatticeOfInf _ isGLB_infₛ) _ rfl (discrete C)
+  CompleteLattice.copy (completeLatticeOfInf _ isGLB_sInf) _ rfl (discrete C)
     (by
       apply le_antisymm
-      · exact @CompleteLattice.le_top _ (completeLatticeOfInf _ isGLB_infₛ) (discrete C)
+      · exact @CompleteLattice.le_top _ (completeLatticeOfInf _ isGLB_sInf) (discrete C)
       · intro X S _
         apply Set.mem_univ)
     (trivial C)
@@ -309,8 +309,8 @@ instance : CompleteLattice (GrothendieckTopology C) :=
       · intro X S hS
         rw [trivial_covering] at hS
         apply covering_of_eq_top _ hS
-      · refine' @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_infₛ) (trivial C))
-    _ rfl _ rfl _ rfl infₛ rfl
+      · refine' @CompleteLattice.bot_le _ (completeLatticeOfInf _ isGLB_sInf) (trivial C))
+    _ rfl _ rfl _ rfl sInf rfl
 
 instance : Inhabited (GrothendieckTopology C) :=
   ⟨⊤⟩
chore: bye-bye, solo bys! (#3825)

This PR puts, with one exception, every single remaining by that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh. The exception is when the by begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.

Essentially this is s/\n *by$/ by/g, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated bys".

Diff
@@ -104,11 +104,11 @@ We prove this explicitly rather than deriving it so that it is in terms of the c
 the projection `.sieves`.
 -/
 @[ext]
-theorem ext {J₁ J₂ : GrothendieckTopology C} (h : (J₁ : ∀ X : C, Set (Sieve X)) = J₂) : J₁ = J₂ :=
-  by
-    cases J₁
-    cases J₂
-    congr
+theorem ext {J₁ J₂ : GrothendieckTopology C} (h : (J₁ : ∀ X : C, Set (Sieve X)) = J₂) :
+    J₁ = J₂ := by
+  cases J₁
+  cases J₂
+  congr
 #align category_theory.grothendieck_topology.ext CategoryTheory.GrothendieckTopology.ext
 
 /-
@@ -232,8 +232,7 @@ def trivial : GrothendieckTopology C where
   pullback_stable' X Y S f hf := by
     rw [Set.mem_singleton_iff] at hf⊢
     simp [hf]
-  transitive' X S hS R hR :=
-    by
+  transitive' X S hS R hR := by
     rw [Set.mem_singleton_iff, ← Sieve.id_mem_iff_eq_top] at hS
     simpa using hR hS
 #align category_theory.grothendieck_topology.trivial CategoryTheory.GrothendieckTopology.trivial
feat: port CategoryTheory.Sites.Sheafification (#3387)

Co-authored-by: Jeremy Tan Jie Rui <e0191785@u.nus.edu> Co-authored-by: Pol_tta <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: EmilieUthaiwat <emiliepathum@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Gabriel Ebner <gebner@gebner.org> Co-authored-by: Violeta Hernández <vi.hdz.p@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>

Diff
@@ -517,6 +517,8 @@ structure Relation (S : J.Cover X) where
   w : g₁ ≫ f₁ = g₂ ≫ f₂
 #align category_theory.grothendieck_topology.cover.relation CategoryTheory.GrothendieckTopology.Cover.Relation
 
+attribute [reassoc] Relation.w
+
 /-- Map a `Arrow` along a refinement `S ⟶ T`. -/
 @[simps]
 def Arrow.map {S T : J.Cover X} (I : S.Arrow) (f : S ⟶ T) : T.Arrow :=
feat: Port CategoryTheory.Sites.Grothendieck (#2795)

Co-authored-by: adamtopaz <github@adamtopaz.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Moritz Firsching <firsching@google.com>

Dependencies 136

137 files ported (100.0%)
59639 lines ported (100.0%)

All dependencies are ported!