category_theory.adhesiveMathlib.CategoryTheory.Adhesive

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -70,7 +70,7 @@ def IsPushout.IsVanKampen (H : IsPushout f g h i) : Prop :=
 theorem IsPushout.IsVanKampen.flip {H : IsPushout f g h i} (H' : H.IsVanKampen) :
     H.flip.IsVanKampen := by
   introv W' hf hg hh hi w
-  simpa only [is_pushout.flip_iff, is_pullback.flip_iff, and_comm'] using
+  simpa only [is_pushout.flip_iff, is_pullback.flip_iff, and_comm] using
     H' g' f' i' h' αW αY αX αZ hg hf hi hh w.flip
 #align category_theory.is_pushout.is_van_kampen.flip CategoryTheory.IsPushout.IsVanKampen.flip
 -/
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
-import CategoryTheory.Extensive
+import CategoryTheory.Limits.VanKampen
 import CategoryTheory.Limits.Shapes.KernelPair
 
 #align_import category_theory.adhesive from "leanprover-community/mathlib"@"5c1efce12ba86d4901463f61019832f6a4b1a0d0"
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
-import Mathbin.CategoryTheory.Extensive
-import Mathbin.CategoryTheory.Limits.Shapes.KernelPair
+import CategoryTheory.Extensive
+import CategoryTheory.Limits.Shapes.KernelPair
 
 #align_import category_theory.adhesive from "leanprover-community/mathlib"@"5c1efce12ba86d4901463f61019832f6a4b1a0d0"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module category_theory.adhesive
-! leanprover-community/mathlib commit 5c1efce12ba86d4901463f61019832f6a4b1a0d0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Extensive
 import Mathbin.CategoryTheory.Limits.Shapes.KernelPair
 
+#align_import category_theory.adhesive from "leanprover-community/mathlib"@"5c1efce12ba86d4901463f61019832f6a4b1a0d0"
+
 /-!
 
 # Adhesive categories
Diff
@@ -131,6 +131,7 @@ theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
 #align category_theory.is_pushout.is_van_kampen_iff CategoryTheory.IsPushout.isVanKampen_iff
 -/
 
+#print CategoryTheory.is_coprod_iff_isPushout /-
 theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsColimit c) {f : X ⟶ Y}
     {iY : Y ⟶ YE} {fE : c.pt ⟶ YE} (H : CommSq f c.inl iY fE) :
     Nonempty (IsColimit (BinaryCofan.mk (c.inr ≫ fE) iY)) ↔ IsPushout f c.inl iY fE :=
@@ -166,7 +167,9 @@ theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsCol
         · dsimp; erw [hc.fac, ← H.w_assoc, e₂]; rfl
         · refine' ((category.assoc _ _ _).symm.trans e₁).trans _; symm; exact hc.fac _ _
 #align category_theory.is_coprod_iff_is_pushout CategoryTheory.is_coprod_iff_isPushout
+-/
 
+#print CategoryTheory.IsPushout.isVanKampen_inl /-
 theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryExtensive C]
     [HasPullbacks C] (hc : IsColimit c) (f : W ⟶ X) (h : X ⟶ Z) (i : c.pt ⟶ Z)
     (H : IsPushout f c.inl h i) : H.IsVanKampen :=
@@ -212,6 +215,7 @@ theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryE
   · rintro ⟨hc₃, hc₄⟩
     exact ⟨(is_pullback.of_has_pullback αY c.inr).paste_horiz hc₄, hc₃⟩
 #align category_theory.is_pushout.is_van_kampen_inl CategoryTheory.IsPushout.isVanKampen_inl
+-/
 
 #print CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_left /-
 theorem IsPushout.IsVanKampen.isPullback_of_mono_left [Mono f] {H : IsPushout f g h i}
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 
 ! This file was ported from Lean 3 source module category_theory.adhesive
-! leanprover-community/mathlib commit afff1f24a6b68d0077c9d63782a1d093e337758c
+! leanprover-community/mathlib commit 5c1efce12ba86d4901463f61019832f6a4b1a0d0
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -15,6 +15,9 @@ import Mathbin.CategoryTheory.Limits.Shapes.KernelPair
 
 # Adhesive categories
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 ## Main definitions
 - `category_theory.is_pushout.is_van_kampen`: A convenience formulation for a pushout being
   a van Kampen colimit.
@@ -53,6 +56,7 @@ variable {J : Type v'} [Category.{u'} J] {C : Type u} [Category.{v} C]
 
 variable {W X Y Z : C} {f : W ⟶ X} {g : W ⟶ Y} {h : X ⟶ Z} {i : Y ⟶ Z}
 
+#print CategoryTheory.IsPushout.IsVanKampen /-
 -- This only makes sense when the original diagram is a pushout.
 /-- A convenience formulation for a pushout being a van Kampen colimit.
 See `is_pushout.is_van_kampen_iff` below. -/
@@ -63,14 +67,18 @@ def IsPushout.IsVanKampen (H : IsPushout f g h i) : Prop :=
     (hg : IsPullback g' αW αY g) (hh : CommSq h' αX αZ h) (hi : CommSq i' αY αZ i)
     (w : CommSq f' g' h' i'), IsPushout f' g' h' i' ↔ IsPullback h' αX αZ h ∧ IsPullback i' αY αZ i
 #align category_theory.is_pushout.is_van_kampen CategoryTheory.IsPushout.IsVanKampen
+-/
 
+#print CategoryTheory.IsPushout.IsVanKampen.flip /-
 theorem IsPushout.IsVanKampen.flip {H : IsPushout f g h i} (H' : H.IsVanKampen) :
     H.flip.IsVanKampen := by
   introv W' hf hg hh hi w
   simpa only [is_pushout.flip_iff, is_pullback.flip_iff, and_comm'] using
     H' g' f' i' h' αW αY αX αZ hg hf hi hh w.flip
 #align category_theory.is_pushout.is_van_kampen.flip CategoryTheory.IsPushout.IsVanKampen.flip
+-/
 
+#print CategoryTheory.IsPushout.isVanKampen_iff /-
 theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
     H.IsVanKampen ↔ IsVanKampenColimit (PushoutCocone.mk h i H.w) :=
   by
@@ -121,6 +129,7 @@ theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
         exacts [h₁, h₂]
     · exact ⟨fun h => h.2, fun h => ⟨_, h⟩⟩
 #align category_theory.is_pushout.is_van_kampen_iff CategoryTheory.IsPushout.isVanKampen_iff
+-/
 
 theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsColimit c) {f : X ⟶ Y}
     {iY : Y ⟶ YE} {fE : c.pt ⟶ YE} (H : CommSq f c.inl iY fE) :
@@ -204,20 +213,25 @@ theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryE
     exact ⟨(is_pullback.of_has_pullback αY c.inr).paste_horiz hc₄, hc₃⟩
 #align category_theory.is_pushout.is_van_kampen_inl CategoryTheory.IsPushout.isVanKampen_inl
 
+#print CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_left /-
 theorem IsPushout.IsVanKampen.isPullback_of_mono_left [Mono f] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : IsPullback f g h i :=
   ((H' (𝟙 _) g g (𝟙 Y) (𝟙 _) f (𝟙 _) i (IsKernelPair.id_of_mono f)
             (IsPullback.of_vert_isIso ⟨by simp⟩) H.1.flip ⟨rfl⟩ ⟨by simp⟩).mp
         (IsPushout.of_horiz_isIso ⟨by simp⟩)).1.flip
 #align category_theory.is_pushout.is_van_kampen.is_pullback_of_mono_left CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_left
+-/
 
+#print CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_right /-
 theorem IsPushout.IsVanKampen.isPullback_of_mono_right [Mono g] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : IsPullback f g h i :=
   ((H' f (𝟙 _) (𝟙 _) f (𝟙 _) (𝟙 _) g h (IsPullback.of_vert_isIso ⟨by simp⟩)
           (IsKernelPair.id_of_mono g) ⟨rfl⟩ H.1 ⟨by simp⟩).mp
       (IsPushout.of_vert_isIso ⟨by simp⟩)).2
 #align category_theory.is_pushout.is_van_kampen.is_pullback_of_mono_right CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_right
+-/
 
+#print CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_left /-
 theorem IsPushout.IsVanKampen.mono_of_mono_left [Mono f] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : Mono i :=
   IsKernelPair.mono_of_isIso_fst
@@ -225,7 +239,9 @@ theorem IsPushout.IsVanKampen.mono_of_mono_left [Mono f] {H : IsPushout f g h i}
             (IsPullback.of_vert_isIso ⟨by simp⟩) H.1.flip ⟨rfl⟩ ⟨by simp⟩).mp
         (IsPushout.of_horiz_isIso ⟨by simp⟩)).2
 #align category_theory.is_pushout.is_van_kampen.mono_of_mono_left CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_left
+-/
 
+#print CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_right /-
 theorem IsPushout.IsVanKampen.mono_of_mono_right [Mono g] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : Mono h :=
   IsKernelPair.mono_of_isIso_fst
@@ -233,50 +249,66 @@ theorem IsPushout.IsVanKampen.mono_of_mono_right [Mono g] {H : IsPushout f g h i
             (IsKernelPair.id_of_mono g) ⟨rfl⟩ H.1 ⟨by simp⟩).mp
         (IsPushout.of_vert_isIso ⟨by simp⟩)).1
 #align category_theory.is_pushout.is_van_kampen.mono_of_mono_right CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_right
+-/
 
+#print CategoryTheory.Adhesive /-
 /-- A category is adhesive if it has pushouts and pullbacks along monomorphisms,
 and such pushouts are van Kampen. -/
 class Adhesive (C : Type u) [Category.{v} C] : Prop where
   [hasPullback_of_mono_left : ∀ {X Y S : C} (f : X ⟶ S) (g : Y ⟶ S) [Mono f], HasPullback f g]
   [hasPushout_of_mono_left : ∀ {X Y S : C} (f : S ⟶ X) (g : S ⟶ Y) [Mono f], HasPushout f g]
-  van_kampen :
+  vanKampen :
     ∀ {W X Y Z : C} {f : W ⟶ X} {g : W ⟶ Y} {h : X ⟶ Z} {i : Y ⟶ Z} [Mono f]
       (H : IsPushout f g h i), H.IsVanKampen
 #align category_theory.adhesive CategoryTheory.Adhesive
+-/
 
 attribute [instance] adhesive.has_pullback_of_mono_left adhesive.has_pushout_of_mono_left
 
+#print CategoryTheory.Adhesive.van_kampen' /-
 theorem Adhesive.van_kampen' [Adhesive C] [Mono g] (H : IsPushout f g h i) : H.IsVanKampen :=
   (Adhesive.van_kampen H.flip).flip
 #align category_theory.adhesive.van_kampen' CategoryTheory.Adhesive.van_kampen'
+-/
 
+#print CategoryTheory.Adhesive.isPullback_of_isPushout_of_mono_left /-
 theorem Adhesive.isPullback_of_isPushout_of_mono_left [Adhesive C] (H : IsPushout f g h i)
     [Mono f] : IsPullback f g h i :=
   (Adhesive.van_kampen H).isPullback_of_mono_left
 #align category_theory.adhesive.is_pullback_of_is_pushout_of_mono_left CategoryTheory.Adhesive.isPullback_of_isPushout_of_mono_left
+-/
 
+#print CategoryTheory.Adhesive.isPullback_of_isPushout_of_mono_right /-
 theorem Adhesive.isPullback_of_isPushout_of_mono_right [Adhesive C] (H : IsPushout f g h i)
     [Mono g] : IsPullback f g h i :=
   (Adhesive.van_kampen' H).isPullback_of_mono_right
 #align category_theory.adhesive.is_pullback_of_is_pushout_of_mono_right CategoryTheory.Adhesive.isPullback_of_isPushout_of_mono_right
+-/
 
+#print CategoryTheory.Adhesive.mono_of_isPushout_of_mono_left /-
 theorem Adhesive.mono_of_isPushout_of_mono_left [Adhesive C] (H : IsPushout f g h i) [Mono f] :
     Mono i :=
   (Adhesive.van_kampen H).mono_of_mono_left
 #align category_theory.adhesive.mono_of_is_pushout_of_mono_left CategoryTheory.Adhesive.mono_of_isPushout_of_mono_left
+-/
 
+#print CategoryTheory.Adhesive.mono_of_isPushout_of_mono_right /-
 theorem Adhesive.mono_of_isPushout_of_mono_right [Adhesive C] (H : IsPushout f g h i) [Mono g] :
     Mono h :=
   (Adhesive.van_kampen' H).mono_of_mono_right
 #align category_theory.adhesive.mono_of_is_pushout_of_mono_right CategoryTheory.Adhesive.mono_of_isPushout_of_mono_right
+-/
 
+#print CategoryTheory.Type.adhesive /-
 instance Type.adhesive : Adhesive (Type u) :=
   by
   constructor
   intros
   exact (is_pushout.is_van_kampen_inl _ (types.is_coprod_of_mono f) _ _ _ H.flip).flip
 #align category_theory.type.adhesive CategoryTheory.Type.adhesive
+-/
 
+#print CategoryTheory.Adhesive.toRegularMonoCategory /-
 noncomputable instance (priority := 100) Adhesive.toRegularMonoCategory [Adhesive C] :
     RegularMonoCategory C :=
   ⟨fun X Y f hf =>
@@ -288,6 +320,7 @@ noncomputable instance (priority := 100) Adhesive.toRegularMonoCategory [Adhesiv
         (adhesive.is_pullback_of_is_pushout_of_mono_left
             (is_pushout.of_has_pushout f f)).isLimitFork }⟩
 #align category_theory.adhesive.to_regular_mono_category CategoryTheory.Adhesive.toRegularMonoCategory
+-/
 
 -- This then implies that adhesive categories are balanced
 example [Adhesive C] : Balanced C :=
Diff
@@ -98,26 +98,27 @@ theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
     constructor
     · rintro ⟨h₁, h₂⟩ (_ | _ | _)
       · rw [← c'.w walking_span.hom.fst]; exact (hα walking_span.hom.fst).paste_horiz h₁
-      exacts[h₁, h₂]
+      exacts [h₁, h₂]
     · intro h; exact ⟨h _, h _⟩
   · introv H W' hf hg hh hi w
-    refine' Iff.trans _ ((H w.cocone ⟨by rintro (_ | _ | _); exacts[αW, αX, αY], _⟩ αZ _ _).trans _)
+    refine'
+      Iff.trans _ ((H w.cocone ⟨by rintro (_ | _ | _); exacts [αW, αX, αY], _⟩ αZ _ _).trans _)
     rotate_left
     · rintro i _ (_ | _ | _)
       · dsimp; simp only [Functor.map_id, category.comp_id, category.id_comp]
-      exacts[hf.w, hg.w]
+      exacts [hf.w, hg.w]
     · ext (_ | _ | _)
       · dsimp; rw [pushout_cocone.condition_zero]; erw [category.assoc, hh.w, hf.w_assoc]
-      exacts[hh.w.symm, hi.w.symm]
+      exacts [hh.w.symm, hi.w.symm]
     · rintro i _ (_ | _ | _)
       · dsimp; simp_rw [Functor.map_id]
         exact is_pullback.of_horiz_is_iso ⟨by rw [category.comp_id, category.id_comp]⟩
-      exacts[hf, hg]
+      exacts [hf, hg]
     · constructor
       · intro h; exact ⟨h walking_cospan.left, h walking_cospan.right⟩
       · rintro ⟨h₁, h₂⟩ (_ | _ | _)
         · dsimp; rw [pushout_cocone.condition_zero]; exact hf.paste_horiz h₁
-        exacts[h₁, h₂]
+        exacts [h₁, h₂]
     · exact ⟨fun h => h.2, fun h => ⟨_, h⟩⟩
 #align category_theory.is_pushout.is_van_kampen_iff CategoryTheory.IsPushout.isVanKampen_iff
 
@@ -191,7 +192,7 @@ theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryE
       have : cmp = (hc₂.cocone_point_unique_up_to_iso hc₄).Hom :=
         by
         apply binary_cofan.is_colimit.hom_ext hc₂
-        exacts[(hc₂.comp_cocone_point_unique_up_to_iso_hom hc₄ ⟨walking_pair.left⟩).symm,
+        exacts [(hc₂.comp_cocone_point_unique_up_to_iso_hom hc₄ ⟨walking_pair.left⟩).symm,
           (hc₂.comp_cocone_point_unique_up_to_iso_hom hc₄ ⟨walking_pair.right⟩).symm]
       rw [this]
       exact is_pullback.of_vert_is_iso ⟨by rw [← this, category.comp_id, pullback.lift_fst]⟩
Diff
@@ -89,7 +89,7 @@ theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
       rw [(is_colimit.equiv_of_nat_iso_of_iso (diagram_iso_span F') c' (pushout_cocone.mk _ _ this)
             _).nonempty_congr]
       · exact ⟨fun h => ⟨⟨this⟩, h⟩, fun h => h.2⟩
-      · refine' cocones.ext (iso.refl c'.X) _
+      · refine' cocones.ext (iso.refl c'.X) _;
         rintro (_ | _ | _) <;> dsimp <;>
           simp only [c'.w, category.assoc, category.id_comp, category.comp_id]
     · exact ⟨nat_trans.congr_app eα.symm _⟩
@@ -97,42 +97,26 @@ theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
     · exact ⟨by simp⟩
     constructor
     · rintro ⟨h₁, h₂⟩ (_ | _ | _)
-      · rw [← c'.w walking_span.hom.fst]
-        exact (hα walking_span.hom.fst).paste_horiz h₁
+      · rw [← c'.w walking_span.hom.fst]; exact (hα walking_span.hom.fst).paste_horiz h₁
       exacts[h₁, h₂]
-    · intro h
-      exact ⟨h _, h _⟩
+    · intro h; exact ⟨h _, h _⟩
   · introv H W' hf hg hh hi w
-    refine'
-      Iff.trans _
-        ((H w.cocone
-              ⟨by
-                rintro (_ | _ | _)
-                exacts[αW, αX, αY], _⟩
-              αZ _ _).trans
-          _)
+    refine' Iff.trans _ ((H w.cocone ⟨by rintro (_ | _ | _); exacts[αW, αX, αY], _⟩ αZ _ _).trans _)
     rotate_left
     · rintro i _ (_ | _ | _)
-      · dsimp
-        simp only [Functor.map_id, category.comp_id, category.id_comp]
+      · dsimp; simp only [Functor.map_id, category.comp_id, category.id_comp]
       exacts[hf.w, hg.w]
     · ext (_ | _ | _)
-      · dsimp
-        rw [pushout_cocone.condition_zero]
-        erw [category.assoc, hh.w, hf.w_assoc]
+      · dsimp; rw [pushout_cocone.condition_zero]; erw [category.assoc, hh.w, hf.w_assoc]
       exacts[hh.w.symm, hi.w.symm]
     · rintro i _ (_ | _ | _)
-      · dsimp
-        simp_rw [Functor.map_id]
+      · dsimp; simp_rw [Functor.map_id]
         exact is_pullback.of_horiz_is_iso ⟨by rw [category.comp_id, category.id_comp]⟩
       exacts[hf, hg]
     · constructor
-      · intro h
-        exact ⟨h walking_cospan.left, h walking_cospan.right⟩
+      · intro h; exact ⟨h walking_cospan.left, h walking_cospan.right⟩
       · rintro ⟨h₁, h₂⟩ (_ | _ | _)
-        · dsimp
-          rw [pushout_cocone.condition_zero]
-          exact hf.paste_horiz h₁
+        · dsimp; rw [pushout_cocone.condition_zero]; exact hf.paste_horiz h₁
         exacts[h₁, h₂]
     · exact ⟨fun h => h.2, fun h => ⟨_, h⟩⟩
 #align category_theory.is_pushout.is_van_kampen_iff CategoryTheory.IsPushout.isVanKampen_iff
@@ -148,18 +132,12 @@ theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsCol
     dsimp
     refine' ⟨h.desc (binary_cofan.mk (c.inr ≫ s.inr) s.inl), h.fac _ ⟨walking_pair.right⟩, _, _⟩
     · apply binary_cofan.is_colimit.hom_ext hc
-      · rw [← H.w_assoc]
-        erw [h.fac _ ⟨walking_pair.right⟩]
-        exact s.condition
-      · rw [← category.assoc]
-        exact h.fac _ ⟨walking_pair.left⟩
+      · rw [← H.w_assoc]; erw [h.fac _ ⟨walking_pair.right⟩]; exact s.condition
+      · rw [← category.assoc]; exact h.fac _ ⟨walking_pair.left⟩
     · intro m e₁ e₂
       apply binary_cofan.is_colimit.hom_ext h
-      · dsimp
-        rw [category.assoc, e₂, eq_comm]
-        exact h.fac _ ⟨walking_pair.left⟩
-      · refine' e₁.trans (Eq.symm _)
-        exact h.fac _ _
+      · dsimp; rw [category.assoc, e₂, eq_comm]; exact h.fac _ ⟨walking_pair.left⟩
+      · refine' e₁.trans (Eq.symm _); exact h.fac _ _
   · refine' fun H => ⟨_⟩
     fapply limits.binary_cofan.is_colimit_mk
     ·
@@ -168,22 +146,15 @@ theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsCol
           (pushout_cocone.mk s.inr _ <|
             (hc.fac (binary_cofan.mk (f ≫ s.inr) s.inl) ⟨walking_pair.left⟩).symm)
     · intro s
-      erw [category.assoc, H.is_colimit.fac _ walking_span.right, hc.fac]
-      rfl
-    · intro s
-      exact H.is_colimit.fac _ walking_span.left
+      erw [category.assoc, H.is_colimit.fac _ walking_span.right, hc.fac]; rfl
+    · intro s; exact H.is_colimit.fac _ walking_span.left
     · intro s m e₁ e₂
       apply pushout_cocone.is_colimit.hom_ext H.is_colimit
-      · symm
-        exact (H.is_colimit.fac _ walking_span.left).trans e₂.symm
+      · symm; exact (H.is_colimit.fac _ walking_span.left).trans e₂.symm
       · erw [H.is_colimit.fac _ walking_span.right]
         apply binary_cofan.is_colimit.hom_ext hc
-        · dsimp
-          erw [hc.fac, ← H.w_assoc, e₂]
-          rfl
-        · refine' ((category.assoc _ _ _).symm.trans e₁).trans _
-          symm
-          exact hc.fac _ _
+        · dsimp; erw [hc.fac, ← H.w_assoc, e₂]; rfl
+        · refine' ((category.assoc _ _ _).symm.trans e₁).trans _; symm; exact hc.fac _ _
 #align category_theory.is_coprod_iff_is_pushout CategoryTheory.is_coprod_iff_isPushout
 
 theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryExtensive C]
@@ -201,8 +172,7 @@ theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryE
     ((binary_cofan.is_van_kampen_iff _).mp (finitary_extensive.van_kampen _ hc₁)
           (binary_cofan.mk _ _) pullback.snd _ _ _ hh.w.symm).trans
       _
-  · dsimp
-    rw [← pullback.condition_assoc, category.assoc, hi.w]
+  · dsimp; rw [← pullback.condition_assoc, category.assoc, hi.w]
   constructor
   · rintro ⟨hc₃, hc₄⟩
     refine' ⟨hc₄, _⟩
@@ -226,11 +196,9 @@ theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryE
       rw [this]
       exact is_pullback.of_vert_is_iso ⟨by rw [← this, category.comp_id, pullback.lift_fst]⟩
     · apply is_pullback.of_right _ e₁ (is_pullback.of_has_pullback _ _)
-      rw [category.assoc, pullback.lift_fst, ← H.w, ← w.w]
-      exact hf.paste_horiz hc₄
+      rw [category.assoc, pullback.lift_fst, ← H.w, ← w.w]; exact hf.paste_horiz hc₄
     · apply is_pullback.of_right _ e₂ (is_pullback.of_has_pullback _ _)
-      rw [category.assoc, pullback.lift_fst]
-      exact hc₃
+      rw [category.assoc, pullback.lift_fst]; exact hc₃
   · rintro ⟨hc₃, hc₄⟩
     exact ⟨(is_pullback.of_has_pullback αY c.inr).paste_horiz hc₄, hc₃⟩
 #align category_theory.is_pushout.is_van_kampen_inl CategoryTheory.IsPushout.isVanKampen_inl
Diff
@@ -138,7 +138,7 @@ theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
 #align category_theory.is_pushout.is_van_kampen_iff CategoryTheory.IsPushout.isVanKampen_iff
 
 theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsColimit c) {f : X ⟶ Y}
-    {iY : Y ⟶ YE} {fE : c.x ⟶ YE} (H : CommSq f c.inl iY fE) :
+    {iY : Y ⟶ YE} {fE : c.pt ⟶ YE} (H : CommSq f c.inl iY fE) :
     Nonempty (IsColimit (BinaryCofan.mk (c.inr ≫ fE) iY)) ↔ IsPushout f c.inl iY fE :=
   by
   constructor
@@ -187,7 +187,7 @@ theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsCol
 #align category_theory.is_coprod_iff_is_pushout CategoryTheory.is_coprod_iff_isPushout
 
 theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryExtensive C]
-    [HasPullbacks C] (hc : IsColimit c) (f : W ⟶ X) (h : X ⟶ Z) (i : c.x ⟶ Z)
+    [HasPullbacks C] (hc : IsColimit c) (f : W ⟶ X) (h : X ⟶ Z) (i : c.pt ⟶ Z)
     (H : IsPushout f c.inl h i) : H.IsVanKampen :=
   by
   obtain ⟨hc₁⟩ := (is_coprod_iff_is_pushout c hc H.1).mpr H
Diff
@@ -98,7 +98,7 @@ theorem IsPushout.isVanKampen_iff (H : IsPushout f g h i) :
     constructor
     · rintro ⟨h₁, h₂⟩ (_ | _ | _)
       · rw [← c'.w walking_span.hom.fst]
-        exact (hα walking_span.hom.fst).pasteHoriz h₁
+        exact (hα walking_span.hom.fst).paste_horiz h₁
       exacts[h₁, h₂]
     · intro h
       exact ⟨h _, h _⟩
@@ -186,7 +186,7 @@ theorem is_coprod_iff_isPushout {X E Y YE : C} (c : BinaryCofan X E) (hc : IsCol
           exact hc.fac _ _
 #align category_theory.is_coprod_iff_is_pushout CategoryTheory.is_coprod_iff_isPushout
 
-theorem IsPushout.isVanKampenInl {W E X Z : C} (c : BinaryCofan W E) [FinitaryExtensive C]
+theorem IsPushout.isVanKampen_inl {W E X Z : C} (c : BinaryCofan W E) [FinitaryExtensive C]
     [HasPullbacks C] (hc : IsColimit c) (f : W ⟶ X) (h : X ⟶ Z) (i : c.x ⟶ Z)
     (H : IsPushout f c.inl h i) : H.IsVanKampen :=
   by
@@ -232,37 +232,37 @@ theorem IsPushout.isVanKampenInl {W E X Z : C} (c : BinaryCofan W E) [FinitaryEx
       rw [category.assoc, pullback.lift_fst]
       exact hc₃
   · rintro ⟨hc₃, hc₄⟩
-    exact ⟨(is_pullback.of_has_pullback αY c.inr).pasteHoriz hc₄, hc₃⟩
-#align category_theory.is_pushout.is_van_kampen_inl CategoryTheory.IsPushout.isVanKampenInl
+    exact ⟨(is_pullback.of_has_pullback αY c.inr).paste_horiz hc₄, hc₃⟩
+#align category_theory.is_pushout.is_van_kampen_inl CategoryTheory.IsPushout.isVanKampen_inl
 
-theorem IsPushout.IsVanKampen.isPullbackOfMonoLeft [Mono f] {H : IsPushout f g h i}
+theorem IsPushout.IsVanKampen.isPullback_of_mono_left [Mono f] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : IsPullback f g h i :=
   ((H' (𝟙 _) g g (𝟙 Y) (𝟙 _) f (𝟙 _) i (IsKernelPair.id_of_mono f)
-            (IsPullback.ofVertIsIso ⟨by simp⟩) H.1.flip ⟨rfl⟩ ⟨by simp⟩).mp
-        (IsPushout.ofHorizIsIso ⟨by simp⟩)).1.flip
-#align category_theory.is_pushout.is_van_kampen.is_pullback_of_mono_left CategoryTheory.IsPushout.IsVanKampen.isPullbackOfMonoLeft
+            (IsPullback.of_vert_isIso ⟨by simp⟩) H.1.flip ⟨rfl⟩ ⟨by simp⟩).mp
+        (IsPushout.of_horiz_isIso ⟨by simp⟩)).1.flip
+#align category_theory.is_pushout.is_van_kampen.is_pullback_of_mono_left CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_left
 
-theorem IsPushout.IsVanKampen.isPullbackOfMonoRight [Mono g] {H : IsPushout f g h i}
+theorem IsPushout.IsVanKampen.isPullback_of_mono_right [Mono g] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : IsPullback f g h i :=
-  ((H' f (𝟙 _) (𝟙 _) f (𝟙 _) (𝟙 _) g h (IsPullback.ofVertIsIso ⟨by simp⟩)
+  ((H' f (𝟙 _) (𝟙 _) f (𝟙 _) (𝟙 _) g h (IsPullback.of_vert_isIso ⟨by simp⟩)
           (IsKernelPair.id_of_mono g) ⟨rfl⟩ H.1 ⟨by simp⟩).mp
-      (IsPushout.ofVertIsIso ⟨by simp⟩)).2
-#align category_theory.is_pushout.is_van_kampen.is_pullback_of_mono_right CategoryTheory.IsPushout.IsVanKampen.isPullbackOfMonoRight
+      (IsPushout.of_vert_isIso ⟨by simp⟩)).2
+#align category_theory.is_pushout.is_van_kampen.is_pullback_of_mono_right CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_right
 
 theorem IsPushout.IsVanKampen.mono_of_mono_left [Mono f] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : Mono i :=
   IsKernelPair.mono_of_isIso_fst
     ((H' (𝟙 _) g g (𝟙 Y) (𝟙 _) f (𝟙 _) i (IsKernelPair.id_of_mono f)
-            (IsPullback.ofVertIsIso ⟨by simp⟩) H.1.flip ⟨rfl⟩ ⟨by simp⟩).mp
-        (IsPushout.ofHorizIsIso ⟨by simp⟩)).2
+            (IsPullback.of_vert_isIso ⟨by simp⟩) H.1.flip ⟨rfl⟩ ⟨by simp⟩).mp
+        (IsPushout.of_horiz_isIso ⟨by simp⟩)).2
 #align category_theory.is_pushout.is_van_kampen.mono_of_mono_left CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_left
 
 theorem IsPushout.IsVanKampen.mono_of_mono_right [Mono g] {H : IsPushout f g h i}
     (H' : H.IsVanKampen) : Mono h :=
   IsKernelPair.mono_of_isIso_fst
-    ((H' f (𝟙 _) (𝟙 _) f (𝟙 _) (𝟙 _) g h (IsPullback.ofVertIsIso ⟨by simp⟩)
+    ((H' f (𝟙 _) (𝟙 _) f (𝟙 _) (𝟙 _) g h (IsPullback.of_vert_isIso ⟨by simp⟩)
             (IsKernelPair.id_of_mono g) ⟨rfl⟩ H.1 ⟨by simp⟩).mp
-        (IsPushout.ofVertIsIso ⟨by simp⟩)).1
+        (IsPushout.of_vert_isIso ⟨by simp⟩)).1
 #align category_theory.is_pushout.is_van_kampen.mono_of_mono_right CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_right
 
 /-- A category is adhesive if it has pushouts and pullbacks along monomorphisms,
@@ -277,28 +277,28 @@ class Adhesive (C : Type u) [Category.{v} C] : Prop where
 
 attribute [instance] adhesive.has_pullback_of_mono_left adhesive.has_pushout_of_mono_left
 
-theorem Adhesive.vanKampen' [Adhesive C] [Mono g] (H : IsPushout f g h i) : H.IsVanKampen :=
-  (Adhesive.vanKampen H.flip).flip
-#align category_theory.adhesive.van_kampen' CategoryTheory.Adhesive.vanKampen'
+theorem Adhesive.van_kampen' [Adhesive C] [Mono g] (H : IsPushout f g h i) : H.IsVanKampen :=
+  (Adhesive.van_kampen H.flip).flip
+#align category_theory.adhesive.van_kampen' CategoryTheory.Adhesive.van_kampen'
 
-theorem Adhesive.isPullbackOfIsPushoutOfMonoLeft [Adhesive C] (H : IsPushout f g h i) [Mono f] :
-    IsPullback f g h i :=
-  (Adhesive.vanKampen H).isPullbackOfMonoLeft
-#align category_theory.adhesive.is_pullback_of_is_pushout_of_mono_left CategoryTheory.Adhesive.isPullbackOfIsPushoutOfMonoLeft
+theorem Adhesive.isPullback_of_isPushout_of_mono_left [Adhesive C] (H : IsPushout f g h i)
+    [Mono f] : IsPullback f g h i :=
+  (Adhesive.van_kampen H).isPullback_of_mono_left
+#align category_theory.adhesive.is_pullback_of_is_pushout_of_mono_left CategoryTheory.Adhesive.isPullback_of_isPushout_of_mono_left
 
-theorem Adhesive.isPullbackOfIsPushoutOfMonoRight [Adhesive C] (H : IsPushout f g h i) [Mono g] :
-    IsPullback f g h i :=
-  (Adhesive.vanKampen' H).isPullbackOfMonoRight
-#align category_theory.adhesive.is_pullback_of_is_pushout_of_mono_right CategoryTheory.Adhesive.isPullbackOfIsPushoutOfMonoRight
+theorem Adhesive.isPullback_of_isPushout_of_mono_right [Adhesive C] (H : IsPushout f g h i)
+    [Mono g] : IsPullback f g h i :=
+  (Adhesive.van_kampen' H).isPullback_of_mono_right
+#align category_theory.adhesive.is_pullback_of_is_pushout_of_mono_right CategoryTheory.Adhesive.isPullback_of_isPushout_of_mono_right
 
 theorem Adhesive.mono_of_isPushout_of_mono_left [Adhesive C] (H : IsPushout f g h i) [Mono f] :
     Mono i :=
-  (Adhesive.vanKampen H).mono_of_mono_left
+  (Adhesive.van_kampen H).mono_of_mono_left
 #align category_theory.adhesive.mono_of_is_pushout_of_mono_left CategoryTheory.Adhesive.mono_of_isPushout_of_mono_left
 
 theorem Adhesive.mono_of_isPushout_of_mono_right [Adhesive C] (H : IsPushout f g h i) [Mono g] :
     Mono h :=
-  (Adhesive.vanKampen' H).mono_of_mono_right
+  (Adhesive.van_kampen' H).mono_of_mono_right
 #align category_theory.adhesive.mono_of_is_pushout_of_mono_right CategoryTheory.Adhesive.mono_of_isPushout_of_mono_right
 
 instance Type.adhesive : Adhesive (Type u) :=

Changes in mathlib4

mathlib3
mathlib4
chore(CategoryTheory): move Full, Faithful, EssSurj, IsEquivalence and ReflectsIsomorphisms to the Functor namespace (#11985)

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

Diff
@@ -307,7 +307,7 @@ theorem adhesive_of_preserves_and_reflects_isomorphism (F : C ⥤ D)
     [Adhesive D] [HasPullbacks C] [HasPushouts C]
     [PreservesLimitsOfShape WalkingCospan F]
     [PreservesColimitsOfShape WalkingSpan F]
-    [ReflectsIsomorphisms F] :
+    [F.ReflectsIsomorphisms] :
     Adhesive C := by
   haveI : ReflectsLimitsOfShape WalkingCospan F :=
     reflectsLimitsOfShapeOfReflectsIsomorphisms
@@ -317,7 +317,7 @@ theorem adhesive_of_preserves_and_reflects_isomorphism (F : C ⥤ D)
 
 theorem adhesive_of_reflective [HasPullbacks D] [Adhesive C] [HasPullbacks C] [HasPushouts C]
     [H₂ : ∀ {X Y S : D} (f : S ⟶ X) (g : S ⟶ Y) [Mono f], HasPushout f g]
-    {Gl : C ⥤ D} {Gr : D ⥤ C} (adj : Gl ⊣ Gr) [Full Gr] [Faithful Gr]
+    {Gl : C ⥤ D} {Gr : D ⥤ C} (adj : Gl ⊣ Gr) [Gr.Full] [Gr.Faithful]
     [PreservesLimitsOfShape WalkingCospan Gl] :
     Adhesive D := by
   have := adj.leftAdjointPreservesColimits
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
@@ -43,7 +43,6 @@ open Limits
 universe v' u' v u
 
 variable {J : Type v'} [Category.{u'} J] {C : Type u} [Category.{v} C]
-
 variable {W X Y Z : C} {f : W ⟶ X} {g : W ⟶ Y} {h : X ⟶ Z} {i : Y ⟶ Z}
 
 -- This only makes sense when the original diagram is a pushout.
chore(*): replace $ with <| (#9319)

See Zulip thread for the discussion.

Diff
@@ -331,7 +331,7 @@ theorem adhesive_of_reflective [HasPullbacks D] [Adhesive C] [HasPullbacks C] [H
     (isoWhiskerLeft _ (asIso adj.counit) ≪≫ Functor.rightUnitor _).hom).mp ?_
   refine ((this.precompose_isIso (spanCompIso _ _ _).hom).map_reflective adj).of_iso
     (IsColimit.uniqueUpToIso ?_ ?_)
-  · exact isColimitOfPreserves Gl ((IsColimit.precomposeHomEquiv _ _).symm $ pushoutIsPushout _ _)
+  · exact isColimitOfPreserves Gl ((IsColimit.precomposeHomEquiv _ _).symm <| pushoutIsPushout _ _)
   · exact (IsColimit.precomposeHomEquiv _ _).symm H.isColimit
 
 end functor
feat(CategoryTheory/Adhesive): Sheaf toposes are finitary extensive and adhesive (#7721)

Port of https://github.com/leanprover-community/mathlib/pull/17637

Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>

Diff
@@ -26,12 +26,8 @@ import Mathlib.CategoryTheory.Limits.Shapes.KernelPair
   monomorphisms are stable under pushouts.
 - `CategoryTheory.Adhesive.toRegularMonoCategory`: Monomorphisms in adhesive categories are
   regular (this implies that adhesive categories are balanced).
-
-## TODO
-
-Show that the following are adhesive:
-- functor categories into adhesive categories
-- the categories of sheaves over a site
+- `CategoryTHeory.adhesive_functor`: The category `C ⥤ D` is adhesive if `D`
+  has all pullbacks and all pushouts and is adhesive
 
 ## References
 - https://ncatlab.org/nlab/show/adhesive+category
@@ -273,4 +269,71 @@ noncomputable instance (priority := 100) Adhesive.toRegularMonoCategory [Adhesiv
 example [Adhesive C] : Balanced C :=
   inferInstance
 
+section functor
+
+universe v'' u''
+
+variable {D : Type u''} [Category.{v''} D]
+
+instance adhesive_functor [Adhesive C] [HasPullbacks C] [HasPushouts C] :
+    Adhesive (D ⥤ C) := by
+  constructor
+  intros W X Y Z f g h i hf H
+  rw [IsPushout.isVanKampen_iff]
+  apply isVanKampenColimit_of_evaluation
+  intro x
+  refine (IsVanKampenColimit.precompose_isIso_iff (diagramIsoSpan _).inv).mp ?_
+  refine IsVanKampenColimit.of_iso ?_ (PushoutCocone.isoMk _).symm
+  refine (IsPushout.isVanKampen_iff (H.map ((evaluation _ _).obj x))).mp ?_
+  apply Adhesive.van_kampen
+
+theorem adhesive_of_preserves_and_reflects (F : C ⥤ D) [Adhesive D]
+    [H₁ : ∀ {X Y S : C} (f : X ⟶ S) (g : Y ⟶ S) [Mono f], HasPullback f g]
+    [H₂ : ∀ {X Y S : C} (f : S ⟶ X) (g : S ⟶ Y) [Mono f], HasPushout f g]
+    [PreservesLimitsOfShape WalkingCospan F]
+    [ReflectsLimitsOfShape WalkingCospan F]
+    [PreservesColimitsOfShape WalkingSpan F]
+    [ReflectsColimitsOfShape WalkingSpan F] :
+    Adhesive C := by
+  apply Adhesive.mk (hasPullback_of_mono_left := H₁) (hasPushout_of_mono_left := H₂)
+  intros W X Y Z f g h i hf H
+  rw [IsPushout.isVanKampen_iff]
+  refine IsVanKampenColimit.of_mapCocone F ?_
+  refine (IsVanKampenColimit.precompose_isIso_iff (diagramIsoSpan _).inv).mp ?_
+  refine IsVanKampenColimit.of_iso ?_ (PushoutCocone.isoMk _).symm
+  refine (IsPushout.isVanKampen_iff (H.map F)).mp ?_
+  apply Adhesive.van_kampen
+
+theorem adhesive_of_preserves_and_reflects_isomorphism (F : C ⥤ D)
+    [Adhesive D] [HasPullbacks C] [HasPushouts C]
+    [PreservesLimitsOfShape WalkingCospan F]
+    [PreservesColimitsOfShape WalkingSpan F]
+    [ReflectsIsomorphisms F] :
+    Adhesive C := by
+  haveI : ReflectsLimitsOfShape WalkingCospan F :=
+    reflectsLimitsOfShapeOfReflectsIsomorphisms
+  haveI : ReflectsColimitsOfShape WalkingSpan F :=
+    reflectsColimitsOfShapeOfReflectsIsomorphisms
+  exact adhesive_of_preserves_and_reflects F
+
+theorem adhesive_of_reflective [HasPullbacks D] [Adhesive C] [HasPullbacks C] [HasPushouts C]
+    [H₂ : ∀ {X Y S : D} (f : S ⟶ X) (g : S ⟶ Y) [Mono f], HasPushout f g]
+    {Gl : C ⥤ D} {Gr : D ⥤ C} (adj : Gl ⊣ Gr) [Full Gr] [Faithful Gr]
+    [PreservesLimitsOfShape WalkingCospan Gl] :
+    Adhesive D := by
+  have := adj.leftAdjointPreservesColimits
+  have := adj.rightAdjointPreservesLimits
+  apply Adhesive.mk (hasPushout_of_mono_left := H₂)
+  intro W X Y Z f g h i _ H
+  have := Adhesive.van_kampen (IsPushout.of_hasPushout (Gr.map f) (Gr.map g))
+  rw [IsPushout.isVanKampen_iff] at this ⊢
+  refine (IsVanKampenColimit.precompose_isIso_iff
+    (isoWhiskerLeft _ (asIso adj.counit) ≪≫ Functor.rightUnitor _).hom).mp ?_
+  refine ((this.precompose_isIso (spanCompIso _ _ _).hom).map_reflective adj).of_iso
+    (IsColimit.uniqueUpToIso ?_ ?_)
+  · exact isColimitOfPreserves Gl ((IsColimit.precomposeHomEquiv _ _).symm $ pushoutIsPushout _ _)
+  · exact (IsColimit.precomposeHomEquiv _ _).symm H.isColimit
+
+end functor
+
 end CategoryTheory
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module category_theory.adhesive
-! leanprover-community/mathlib commit afff1f24a6b68d0077c9d63782a1d093e337758c
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Extensive
 import Mathlib.CategoryTheory.Limits.Shapes.KernelPair
 
+#align_import category_theory.adhesive from "leanprover-community/mathlib"@"afff1f24a6b68d0077c9d63782a1d093e337758c"
+
 /-!
 
 # Adhesive categories
feat: port CategoryTheory.Adhesive (#4622)

Dependencies 8 + 418

419 files ported (98.1%)
171000 lines ported (97.2%)
Show graph

The unported dependencies are