category_theory.morphism_propertyMathlib.CategoryTheory.MorphismProperty

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
 import CategoryTheory.Limits.Shapes.Diagonal
-import CategoryTheory.Arrow
+import CategoryTheory.Comma.Arrow
 import CategoryTheory.Limits.Shapes.CommSq
 import CategoryTheory.ConcreteCategory.Basic
 
Diff
@@ -682,13 +682,13 @@ theorem universally_respectsIso (P : MorphismProperty C) : P.universally.Respect
       is_pullback.of_horiz_is_iso
         ⟨by rw [category.id_comp, category.assoc, e.hom_inv_id, category.comp_id]⟩
     replace this := this.paste_horiz H
-    rw [iso.inv_hom_id_assoc, category.id_comp] at this 
+    rw [iso.inv_hom_id_assoc, category.id_comp] at this
     exact hf _ _ _ this
   · intro X Y Z e f hf X' Z' i₁ i₂ f' H
     have : is_pullback (𝟙 _) i₂ (i₂ ≫ e.inv) e.inv :=
       is_pullback.of_horiz_is_iso ⟨category.id_comp _⟩
     replace this := H.paste_horiz this
-    rw [category.assoc, iso.hom_inv_id, category.comp_id, category.comp_id] at this 
+    rw [category.assoc, iso.hom_inv_id, category.comp_id, category.comp_id] at this
     exact hf _ _ _ this
 #align category_theory.morphism_property.universally_respects_iso CategoryTheory.MorphismProperty.universally_respectsIso
 -/
Diff
@@ -3,10 +3,10 @@ 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.Limits.Shapes.Diagonal
-import Mathbin.CategoryTheory.Arrow
-import Mathbin.CategoryTheory.Limits.Shapes.CommSq
-import Mathbin.CategoryTheory.ConcreteCategory.Basic
+import CategoryTheory.Limits.Shapes.Diagonal
+import CategoryTheory.Arrow
+import CategoryTheory.Limits.Shapes.CommSq
+import CategoryTheory.ConcreteCategory.Basic
 
 #align_import category_theory.morphism_property from "leanprover-community/mathlib"@"cb3ceec8485239a61ed51d944cb9a95b68c6bafc"
 
Diff
@@ -2,17 +2,14 @@
 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.morphism_property
-! 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.Limits.Shapes.Diagonal
 import Mathbin.CategoryTheory.Arrow
 import Mathbin.CategoryTheory.Limits.Shapes.CommSq
 import Mathbin.CategoryTheory.ConcreteCategory.Basic
 
+#align_import category_theory.morphism_property from "leanprover-community/mathlib"@"cb3ceec8485239a61ed51d944cb9a95b68c6bafc"
+
 /-!
 # Properties of morphisms
 
Diff
@@ -196,10 +196,12 @@ theorem RespectsIso.cancel_right_isIso {P : MorphismProperty C} (hP : RespectsIs
 #align category_theory.morphism_property.respects_iso.cancel_right_is_iso CategoryTheory.MorphismProperty.RespectsIso.cancel_right_isIso
 -/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iff /-
 theorem RespectsIso.arrow_iso_iff {P : MorphismProperty C} (hP : RespectsIso P) {f g : Arrow C}
     (e : f ≅ g) : P f.Hom ↔ P g.Hom := by
   rw [← arrow.inv_left_hom_right e.hom, hP.cancel_left_is_iso, hP.cancel_right_is_iso]; rfl
 #align category_theory.morphism_property.respects_iso.arrow_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iff
+-/
 
 #print CategoryTheory.MorphismProperty.RespectsIso.arrow_mk_iso_iff /-
 theorem RespectsIso.arrow_mk_iso_iff {P : MorphismProperty C} (hP : RespectsIso P) {W X Y Z : C}
@@ -208,6 +210,7 @@ theorem RespectsIso.arrow_mk_iso_iff {P : MorphismProperty C} (hP : RespectsIso
 #align category_theory.morphism_property.respects_iso.arrow_mk_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_mk_iso_iff
 -/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_iso /-
 theorem RespectsIso.of_respects_arrow_iso (P : MorphismProperty C)
     (hP : ∀ (f g : Arrow C) (e : f ≅ g) (hf : P f.Hom), P g.Hom) : RespectsIso P :=
   by
@@ -221,6 +224,7 @@ theorem RespectsIso.of_respects_arrow_iso (P : MorphismProperty C)
     dsimp
     simp only [category.id_comp]
 #align category_theory.morphism_property.respects_iso.of_respects_arrow_iso CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_iso
+-/
 
 #print CategoryTheory.MorphismProperty.StableUnderBaseChange.mk /-
 theorem StableUnderBaseChange.mk {P : MorphismProperty C} [HasPullbacks C] (hP₁ : RespectsIso P)
@@ -258,12 +262,15 @@ theorem StableUnderBaseChange.snd {P : MorphismProperty C} (hP : StableUnderBase
 #align category_theory.morphism_property.stable_under_base_change.snd CategoryTheory.MorphismProperty.StableUnderBaseChange.snd
 -/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj /-
 theorem StableUnderBaseChange.baseChange_obj [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) (X : Over S) (H : P X.Hom) :
     P ((baseChange f).obj X).Hom :=
   hP.snd X.Hom f H
 #align category_theory.morphism_property.stable_under_base_change.base_change_obj CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map /-
 theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) {X Y : Over S} (g : X ⟶ Y)
     (H : P g.left) : P ((baseChange f).map g).left :=
@@ -276,6 +283,7 @@ theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismPrope
   rw [← this, hP.respects_iso.cancel_left_is_iso]
   exact hP.snd _ _ H
 #align category_theory.morphism_property.stable_under_base_change.base_change_map CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map
+-/
 
 #print CategoryTheory.MorphismProperty.StableUnderBaseChange.pullback_map /-
 theorem StableUnderBaseChange.pullback_map [HasPullbacks C] {P : MorphismProperty C}
@@ -370,29 +378,40 @@ def IsInvertedBy (P : MorphismProperty C) (F : C ⥤ D) : Prop :=
 
 namespace IsInvertedBy
 
+#print CategoryTheory.MorphismProperty.IsInvertedBy.of_comp /-
 theorem of_comp {C₁ C₂ C₃ : Type _} [Category C₁] [Category C₂] [Category C₃]
     (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (hF : W.IsInvertedBy F) (G : C₂ ⥤ C₃) :
     W.IsInvertedBy (F ⋙ G) := fun X Y f hf => by haveI := hF f hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.of_comp CategoryTheory.MorphismProperty.IsInvertedBy.of_comp
+-/
 
+#print CategoryTheory.MorphismProperty.IsInvertedBy.op /-
 theorem op {W : MorphismProperty C} {L : C ⥤ D} (h : W.IsInvertedBy L) : W.op.IsInvertedBy L.op :=
   fun X Y f hf => by haveI := h f.unop hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.op CategoryTheory.MorphismProperty.IsInvertedBy.op
+-/
 
+#print CategoryTheory.MorphismProperty.IsInvertedBy.rightOp /-
 theorem rightOp {W : MorphismProperty C} {L : Cᵒᵖ ⥤ D} (h : W.op.IsInvertedBy L) :
     W.IsInvertedBy L.rightOp := fun X Y f hf => by haveI := h f.op hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.right_op CategoryTheory.MorphismProperty.IsInvertedBy.rightOp
+-/
 
+#print CategoryTheory.MorphismProperty.IsInvertedBy.leftOp /-
 theorem leftOp {W : MorphismProperty C} {L : C ⥤ Dᵒᵖ} (h : W.IsInvertedBy L) :
     W.op.IsInvertedBy L.leftOp := fun X Y f hf => by haveI := h f.unop hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.left_op CategoryTheory.MorphismProperty.IsInvertedBy.leftOp
+-/
 
+#print CategoryTheory.MorphismProperty.IsInvertedBy.unop /-
 theorem unop {W : MorphismProperty C} {L : Cᵒᵖ ⥤ Dᵒᵖ} (h : W.op.IsInvertedBy L) :
     W.IsInvertedBy L.unop := fun X Y f hf => by haveI := h f.op hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.unop CategoryTheory.MorphismProperty.IsInvertedBy.unop
+-/
 
 end IsInvertedBy
 
+#print CategoryTheory.MorphismProperty.naturalityProperty /-
 /-- Given `app : Π X, F₁.obj X ⟶ F₂.obj X` where `F₁` and `F₂` are two functors,
 this is the `morphism_property C` satisfied by the morphisms in `C` with respect
 to whom `app` is natural. -/
@@ -400,9 +419,11 @@ to whom `app` is natural. -/
 def naturalityProperty {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) : MorphismProperty C :=
   fun X Y f => F₁.map f ≫ app Y = app X ≫ F₂.map f
 #align category_theory.morphism_property.naturality_property CategoryTheory.MorphismProperty.naturalityProperty
+-/
 
 namespace NaturalityProperty
 
+#print CategoryTheory.MorphismProperty.naturalityProperty.stableUnderComposition /-
 theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderComposition := fun X Y Z f g hf hg =>
   by
@@ -411,7 +432,9 @@ theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X 
   slice_lhs 1 2 => rw [hf]
   rw [category.assoc]
 #align category_theory.morphism_property.naturality_property.is_stable_under_composition CategoryTheory.MorphismProperty.naturalityProperty.stableUnderComposition
+-/
 
+#print CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverse /-
 theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderInverse := fun X Y e he =>
   by
@@ -421,9 +444,11 @@ theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F
   simp only [category.assoc, ← F₁.map_comp_assoc, ← F₂.map_comp, e.hom_inv_id, Functor.map_id,
     category.id_comp, category.comp_id]
 #align category_theory.morphism_property.naturality_property.is_stable_under_inverse CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverse
+-/
 
 end NaturalityProperty
 
+#print CategoryTheory.MorphismProperty.RespectsIso.inverseImage /-
 theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F : C ⥤ D) :
     RespectsIso (P.inverseImage F) := by
   constructor
@@ -433,11 +458,14 @@ theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F
     rw [F.map_comp]
   exacts [h.1 (F.map_iso e) (F.map f) hf, h.2 (F.map_iso e) (F.map f) hf]
 #align category_theory.morphism_property.respects_iso.inverse_image CategoryTheory.MorphismProperty.RespectsIso.inverseImage
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.inverseImage /-
 theorem StableUnderComposition.inverseImage {P : MorphismProperty D} (h : StableUnderComposition P)
     (F : C ⥤ D) : StableUnderComposition (P.inverseImage F) := fun X Y Z f g hf hg => by
   simpa only [← F.map_comp] using h (F.map f) (F.map g) hf hg
 #align category_theory.morphism_property.stable_under_composition.inverse_image CategoryTheory.MorphismProperty.StableUnderComposition.inverseImage
+-/
 
 variable (C)
 
@@ -568,6 +596,7 @@ def FunctorsInverting.mk {W : MorphismProperty C} {D : Type _} [Category D] (F :
 #align category_theory.morphism_property.functors_inverting.mk CategoryTheory.MorphismProperty.FunctorsInverting.mk
 -/
 
+#print CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_iso /-
 theorem IsInvertedBy.iff_of_iso (W : MorphismProperty C) {F₁ F₂ : C ⥤ D} (e : F₁ ≅ F₂) :
     W.IsInvertedBy F₁ ↔ W.IsInvertedBy F₂ :=
   by
@@ -579,6 +608,7 @@ theorem IsInvertedBy.iff_of_iso (W : MorphismProperty C) {F₁ F₂ : C ⥤ D} (
   intro X Y f
   exact (respects_iso.isomorphisms D).arrow_mk_iso_iff (arrow.iso_mk (e.app X) (e.app Y) (by simp))
 #align category_theory.morphism_property.is_inverted_by.iff_of_iso CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_iso
+-/
 
 section Diagonal
 
@@ -736,38 +766,52 @@ protected def bijective : MorphismProperty C := fun X Y f => Bijective f
 #align category_theory.morphism_property.bijective CategoryTheory.MorphismProperty.bijective
 -/
 
+#print CategoryTheory.MorphismProperty.bijective_eq_sup /-
 theorem bijective_eq_sup :
     MorphismProperty.bijective C = MorphismProperty.injective C ⊓ MorphismProperty.surjective C :=
   rfl
 #align category_theory.morphism_property.bijective_eq_sup CategoryTheory.MorphismProperty.bijective_eq_sup
+-/
 
+#print CategoryTheory.MorphismProperty.injective_stableUnderComposition /-
 theorem injective_stableUnderComposition : (MorphismProperty.injective C).StableUnderComposition :=
   fun X Y Z f g hf hg => by delta morphism_property.injective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.injective_stable_under_composition CategoryTheory.MorphismProperty.injective_stableUnderComposition
+-/
 
+#print CategoryTheory.MorphismProperty.surjective_stableUnderComposition /-
 theorem surjective_stableUnderComposition :
     (MorphismProperty.surjective C).StableUnderComposition := fun X Y Z f g hf hg => by
   delta morphism_property.surjective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.surjective_stable_under_composition CategoryTheory.MorphismProperty.surjective_stableUnderComposition
+-/
 
+#print CategoryTheory.MorphismProperty.bijective_stableUnderComposition /-
 theorem bijective_stableUnderComposition : (MorphismProperty.bijective C).StableUnderComposition :=
   fun X Y Z f g hf hg => by delta morphism_property.bijective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.bijective_stable_under_composition CategoryTheory.MorphismProperty.bijective_stableUnderComposition
+-/
 
+#print CategoryTheory.MorphismProperty.injective_respectsIso /-
 theorem injective_respectsIso : (MorphismProperty.injective C).RespectsIso :=
   (injective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Injective
 #align category_theory.morphism_property.injective_respects_iso CategoryTheory.MorphismProperty.injective_respectsIso
+-/
 
+#print CategoryTheory.MorphismProperty.surjective_respectsIso /-
 theorem surjective_respectsIso : (MorphismProperty.surjective C).RespectsIso :=
   (surjective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Surjective
 #align category_theory.morphism_property.surjective_respects_iso CategoryTheory.MorphismProperty.surjective_respectsIso
+-/
 
+#print CategoryTheory.MorphismProperty.bijective_respectsIso /-
 theorem bijective_respectsIso : (MorphismProperty.bijective C).RespectsIso :=
   (bijective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Bijective
 #align category_theory.morphism_property.bijective_respects_iso CategoryTheory.MorphismProperty.bijective_respectsIso
+-/
 
 end Bijective
 
Diff
@@ -46,7 +46,8 @@ variable (C : Type u) [Category.{v} C] {D : Type _} [Category D]
 #print CategoryTheory.MorphismProperty /-
 /-- A `morphism_property C` is a class of morphisms between objects in `C`. -/
 def MorphismProperty :=
-  ∀ ⦃X Y : C⦄ (f : X ⟶ Y), Prop deriving CompleteLattice
+  ∀ ⦃X Y : C⦄ (f : X ⟶ Y), Prop
+deriving CompleteLattice
 #align category_theory.morphism_property CategoryTheory.MorphismProperty
 -/
 
@@ -295,7 +296,7 @@ theorem StableUnderBaseChange.pullback_map [HasPullbacks C] {P : MorphismPropert
     by apply pullback.hom_ext <;> dsimp <;> simp
   rw [this]
   apply hP' <;> rw [hP.respects_iso.cancel_left_is_iso]
-  exacts[hP.base_change_map _ (over.hom_mk _ e₂.symm : over.mk g ⟶ over.mk g') h₂,
+  exacts [hP.base_change_map _ (over.hom_mk _ e₂.symm : over.mk g ⟶ over.mk g') h₂,
     hP.base_change_map _ (over.hom_mk _ e₁.symm : over.mk f ⟶ over.mk f') h₁]
 #align category_theory.morphism_property.stable_under_base_change.pullback_map CategoryTheory.MorphismProperty.StableUnderBaseChange.pullback_map
 -/
@@ -405,7 +406,7 @@ namespace NaturalityProperty
 theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderComposition := fun X Y Z f g hf hg =>
   by
-  simp only [naturality_property] at hf hg⊢
+  simp only [naturality_property] at hf hg ⊢
   simp only [functor.map_comp, category.assoc, hg]
   slice_lhs 1 2 => rw [hf]
   rw [category.assoc]
@@ -414,7 +415,7 @@ theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X 
 theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderInverse := fun X Y e he =>
   by
-  simp only [naturality_property] at he⊢
+  simp only [naturality_property] at he ⊢
   rw [← cancel_epi (F₁.map e.hom)]
   slice_rhs 1 2 => rw [he]
   simp only [category.assoc, ← F₁.map_comp_assoc, ← F₂.map_comp, e.hom_inv_id, Functor.map_id,
@@ -430,7 +431,7 @@ theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F
     intro X Y Z e f hf
     dsimp [inverse_image]
     rw [F.map_comp]
-  exacts[h.1 (F.map_iso e) (F.map f) hf, h.2 (F.map_iso e) (F.map f) hf]
+  exacts [h.1 (F.map_iso e) (F.map f) hf, h.2 (F.map_iso e) (F.map f) hf]
 #align category_theory.morphism_property.respects_iso.inverse_image CategoryTheory.MorphismProperty.RespectsIso.inverseImage
 
 theorem StableUnderComposition.inverseImage {P : MorphismProperty D} (h : StableUnderComposition P)
@@ -502,26 +503,26 @@ end
 
 #print CategoryTheory.MorphismProperty.RespectsIso.monomorphisms /-
 theorem RespectsIso.monomorphisms : RespectsIso (monomorphisms C) := by
-  constructor <;> · intro X Y Z e f; simp only [monomorphisms.iff]; intro ; apply mono_comp
+  constructor <;> · intro X Y Z e f; simp only [monomorphisms.iff]; intro; apply mono_comp
 #align category_theory.morphism_property.respects_iso.monomorphisms CategoryTheory.MorphismProperty.RespectsIso.monomorphisms
 -/
 
 #print CategoryTheory.MorphismProperty.RespectsIso.epimorphisms /-
 theorem RespectsIso.epimorphisms : RespectsIso (epimorphisms C) := by
-  constructor <;> · intro X Y Z e f; simp only [epimorphisms.iff]; intro ; apply epi_comp
+  constructor <;> · intro X Y Z e f; simp only [epimorphisms.iff]; intro; apply epi_comp
 #align category_theory.morphism_property.respects_iso.epimorphisms CategoryTheory.MorphismProperty.RespectsIso.epimorphisms
 -/
 
 #print CategoryTheory.MorphismProperty.RespectsIso.isomorphisms /-
 theorem RespectsIso.isomorphisms : RespectsIso (isomorphisms C) := by
-  constructor <;> · intro X Y Z e f; simp only [isomorphisms.iff]; intro ; infer_instance
+  constructor <;> · intro X Y Z e f; simp only [isomorphisms.iff]; intro; infer_instance
 #align category_theory.morphism_property.respects_iso.isomorphisms CategoryTheory.MorphismProperty.RespectsIso.isomorphisms
 -/
 
 #print CategoryTheory.MorphismProperty.StableUnderComposition.isomorphisms /-
 theorem StableUnderComposition.isomorphisms : StableUnderComposition (isomorphisms C) :=
   fun X Y Z f g hf hg => by
-  rw [isomorphisms.iff] at hf hg⊢
+  rw [isomorphisms.iff] at hf hg ⊢
   haveI := hf
   haveI := hg
   infer_instance
@@ -531,7 +532,7 @@ theorem StableUnderComposition.isomorphisms : StableUnderComposition (isomorphis
 #print CategoryTheory.MorphismProperty.StableUnderComposition.monomorphisms /-
 theorem StableUnderComposition.monomorphisms : StableUnderComposition (monomorphisms C) :=
   fun X Y Z f g hf hg => by
-  rw [monomorphisms.iff] at hf hg⊢
+  rw [monomorphisms.iff] at hf hg ⊢
   haveI := hf
   haveI := hg
   apply mono_comp
@@ -541,7 +542,7 @@ theorem StableUnderComposition.monomorphisms : StableUnderComposition (monomorph
 #print CategoryTheory.MorphismProperty.StableUnderComposition.epimorphisms /-
 theorem StableUnderComposition.epimorphisms : StableUnderComposition (epimorphisms C) :=
   fun X Y Z f g hf hg => by
-  rw [epimorphisms.iff] at hf hg⊢
+  rw [epimorphisms.iff] at hf hg ⊢
   haveI := hf
   haveI := hg
   apply epi_comp
@@ -554,7 +555,8 @@ variable {C}
 /-- The full subcategory of `C ⥤ D` consisting of functors inverting morphisms in `W` -/
 @[nolint has_nonempty_instance]
 def FunctorsInverting (W : MorphismProperty C) (D : Type _) [Category D] :=
-  FullSubcategory fun F : C ⥤ D => W.IsInvertedBy F deriving Category
+  FullSubcategory fun F : C ⥤ D => W.IsInvertedBy F
+deriving Category
 #align category_theory.morphism_property.functors_inverting CategoryTheory.MorphismProperty.FunctorsInverting
 -/
 
@@ -653,13 +655,13 @@ theorem universally_respectsIso (P : MorphismProperty C) : P.universally.Respect
       is_pullback.of_horiz_is_iso
         ⟨by rw [category.id_comp, category.assoc, e.hom_inv_id, category.comp_id]⟩
     replace this := this.paste_horiz H
-    rw [iso.inv_hom_id_assoc, category.id_comp] at this
+    rw [iso.inv_hom_id_assoc, category.id_comp] at this 
     exact hf _ _ _ this
   · intro X Y Z e f hf X' Z' i₁ i₂ f' H
     have : is_pullback (𝟙 _) i₂ (i₂ ≫ e.inv) e.inv :=
       is_pullback.of_horiz_is_iso ⟨category.id_comp _⟩
     replace this := H.paste_horiz this
-    rw [category.assoc, iso.hom_inv_id, category.comp_id, category.comp_id] at this
+    rw [category.assoc, iso.hom_inv_id, category.comp_id, category.comp_id] at this 
     exact hf _ _ _ this
 #align category_theory.morphism_property.universally_respects_iso CategoryTheory.MorphismProperty.universally_respectsIso
 -/
@@ -677,7 +679,7 @@ theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismPropert
   by
   intro X Y Z f g hf hg X' Z' i₁ i₂ f' H
   have := pullback.lift_fst _ _ (H.w.trans (category.assoc _ _ _).symm)
-  rw [← this] at H⊢
+  rw [← this] at H ⊢
   apply hP _ _ _ (hg _ _ _ <| is_pullback.of_has_pullback _ _)
   exact hf _ _ _ (H.of_right (pullback.lift_snd _ _ _) (is_pullback.of_has_pullback i₂ g))
 #align category_theory.morphism_property.stable_under_composition.universally CategoryTheory.MorphismProperty.StableUnderComposition.universally
Diff
@@ -683,11 +683,13 @@ theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismPropert
 #align category_theory.morphism_property.stable_under_composition.universally CategoryTheory.MorphismProperty.StableUnderComposition.universally
 -/
 
+#print CategoryTheory.MorphismProperty.universally_le /-
 theorem universally_le (P : MorphismProperty C) : P.universally ≤ P :=
   by
   intro X Y f hf
   exact hf (𝟙 _) (𝟙 _) _ (is_pullback.of_vert_is_iso ⟨by rw [category.comp_id, category.id_comp]⟩)
 #align category_theory.morphism_property.universally_le CategoryTheory.MorphismProperty.universally_le
+-/
 
 #print CategoryTheory.MorphismProperty.StableUnderBaseChange.universally_eq /-
 theorem StableUnderBaseChange.universally_eq {P : MorphismProperty C}
Diff
@@ -195,12 +195,6 @@ theorem RespectsIso.cancel_right_isIso {P : MorphismProperty C} (hP : RespectsIs
 #align category_theory.morphism_property.respects_iso.cancel_right_is_iso CategoryTheory.MorphismProperty.RespectsIso.cancel_right_isIso
 -/
 
-/- warning: category_theory.morphism_property.respects_iso.arrow_iso_iff -> CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iff is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P) -> (forall {f : CategoryTheory.Arrow.{u1, u2} C _inst_1} {g : CategoryTheory.Arrow.{u1, u2} C _inst_1}, (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.Arrow.category.{u1, u2} C _inst_1) f g) -> (Iff (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P) -> (forall {f : CategoryTheory.Arrow.{u1, u2} C _inst_1} {g : CategoryTheory.Arrow.{u1, u2} C _inst_1}, (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.instCategoryArrow.{u1, u2} C _inst_1) f g) -> (Iff (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.respects_iso.arrow_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iffₓ'. -/
 theorem RespectsIso.arrow_iso_iff {P : MorphismProperty C} (hP : RespectsIso P) {f g : Arrow C}
     (e : f ≅ g) : P f.Hom ↔ P g.Hom := by
   rw [← arrow.inv_left_hom_right e.hom, hP.cancel_left_is_iso, hP.cancel_right_is_iso]; rfl
@@ -213,12 +207,6 @@ theorem RespectsIso.arrow_mk_iso_iff {P : MorphismProperty C} (hP : RespectsIso
 #align category_theory.morphism_property.respects_iso.arrow_mk_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_mk_iso_iff
 -/
 
-/- warning: category_theory.morphism_property.respects_iso.of_respects_arrow_iso -> CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_iso is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), (forall (f : CategoryTheory.Arrow.{u1, u2} C _inst_1) (g : CategoryTheory.Arrow.{u1, u2} C _inst_1), (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.Arrow.category.{u1, u2} C _inst_1) f g) -> (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) -> (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))) -> (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), (forall (f : CategoryTheory.Arrow.{u1, u2} C _inst_1) (g : CategoryTheory.Arrow.{u1, u2} C _inst_1), (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.instCategoryArrow.{u1, u2} C _inst_1) f g) -> (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) -> (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))) -> (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.respects_iso.of_respects_arrow_iso CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_isoₓ'. -/
 theorem RespectsIso.of_respects_arrow_iso (P : MorphismProperty C)
     (hP : ∀ (f g : Arrow C) (e : f ≅ g) (hf : P f.Hom), P g.Hom) : RespectsIso P :=
   by
@@ -269,18 +257,12 @@ theorem StableUnderBaseChange.snd {P : MorphismProperty C} (hP : StableUnderBase
 #align category_theory.morphism_property.stable_under_base_change.snd CategoryTheory.MorphismProperty.StableUnderBaseChange.snd
 -/
 
-/- warning: category_theory.morphism_property.stable_under_base_change.base_change_obj -> CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_base_change.base_change_obj CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_objₓ'. -/
 theorem StableUnderBaseChange.baseChange_obj [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) (X : Over S) (H : P X.Hom) :
     P ((baseChange f).obj X).Hom :=
   hP.snd X.Hom f H
 #align category_theory.morphism_property.stable_under_base_change.base_change_obj CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj
 
-/- warning: category_theory.morphism_property.stable_under_base_change.base_change_map -> CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_base_change.base_change_map CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_mapₓ'. -/
 theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) {X Y : Over S} (g : X ⟶ Y)
     (H : P g.left) : P ((baseChange f).map g).left :=
@@ -387,65 +369,29 @@ def IsInvertedBy (P : MorphismProperty C) (F : C ⥤ D) : Prop :=
 
 namespace IsInvertedBy
 
-/- warning: category_theory.morphism_property.is_inverted_by.of_comp -> CategoryTheory.MorphismProperty.IsInvertedBy.of_comp is a dubious translation:
-lean 3 declaration is
-  forall {C₁ : Type.{u1}} {C₂ : Type.{u2}} {C₃ : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u4, u1} C₁] [_inst_4 : CategoryTheory.Category.{u5, u2} C₂] [_inst_5 : CategoryTheory.Category.{u6, u3} C₃] (W : CategoryTheory.MorphismProperty.{u4, u1} C₁ _inst_3) (F : CategoryTheory.Functor.{u4, u5, u1, u2} C₁ _inst_3 C₂ _inst_4), (CategoryTheory.MorphismProperty.IsInvertedBy.{u4, u1, u2, u5} C₁ _inst_3 C₂ _inst_4 W F) -> (forall (G : CategoryTheory.Functor.{u5, u6, u2, u3} C₂ _inst_4 C₃ _inst_5), CategoryTheory.MorphismProperty.IsInvertedBy.{u4, u1, u3, u6} C₁ _inst_3 C₃ _inst_5 W (CategoryTheory.Functor.comp.{u4, u5, u6, u1, u2, u3} C₁ _inst_3 C₂ _inst_4 C₃ _inst_5 F G))
-but is expected to have type
-  forall {C₁ : Type.{u6}} {C₂ : Type.{u5}} {C₃ : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u3, u6} C₁] [_inst_4 : CategoryTheory.Category.{u2, u5} C₂] [_inst_5 : CategoryTheory.Category.{u1, u4} C₃] (W : CategoryTheory.MorphismProperty.{u3, u6} C₁ _inst_3) (F : CategoryTheory.Functor.{u3, u2, u6, u5} C₁ _inst_3 C₂ _inst_4), (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u6, u5, u2} C₁ _inst_3 C₂ _inst_4 W F) -> (forall (G : CategoryTheory.Functor.{u2, u1, u5, u4} C₂ _inst_4 C₃ _inst_5), CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u6, u4, u1} C₁ _inst_3 C₃ _inst_5 W (CategoryTheory.Functor.comp.{u3, u2, u1, u6, u5, u4} C₁ _inst_3 C₂ _inst_4 C₃ _inst_5 F G))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.of_comp CategoryTheory.MorphismProperty.IsInvertedBy.of_compₓ'. -/
 theorem of_comp {C₁ C₂ C₃ : Type _} [Category C₁] [Category C₂] [Category C₃]
     (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (hF : W.IsInvertedBy F) (G : C₂ ⥤ C₃) :
     W.IsInvertedBy (F ⋙ G) := fun X Y f hf => by haveI := hF f hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.of_comp CategoryTheory.MorphismProperty.IsInvertedBy.of_comp
 
-/- warning: category_theory.morphism_property.is_inverted_by.op -> CategoryTheory.MorphismProperty.IsInvertedBy.op is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) (CategoryTheory.Functor.op.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) (CategoryTheory.Functor.op.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.op CategoryTheory.MorphismProperty.IsInvertedBy.opₓ'. -/
 theorem op {W : MorphismProperty C} {L : C ⥤ D} (h : W.IsInvertedBy L) : W.op.IsInvertedBy L.op :=
   fun X Y f hf => by haveI := h f.unop hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.op CategoryTheory.MorphismProperty.IsInvertedBy.op
 
-/- warning: category_theory.morphism_property.is_inverted_by.right_op -> CategoryTheory.MorphismProperty.IsInvertedBy.rightOp is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) W (CategoryTheory.Functor.rightOp.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) W (CategoryTheory.Functor.rightOp.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.right_op CategoryTheory.MorphismProperty.IsInvertedBy.rightOpₓ'. -/
 theorem rightOp {W : MorphismProperty C} {L : Cᵒᵖ ⥤ D} (h : W.op.IsInvertedBy L) :
     W.IsInvertedBy L.rightOp := fun X Y f hf => by haveI := h f.op hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.right_op CategoryTheory.MorphismProperty.IsInvertedBy.rightOp
 
-/- warning: category_theory.morphism_property.is_inverted_by.left_op -> CategoryTheory.MorphismProperty.IsInvertedBy.leftOp is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) (CategoryTheory.Functor.leftOp.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) (CategoryTheory.Functor.leftOp.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.left_op CategoryTheory.MorphismProperty.IsInvertedBy.leftOpₓ'. -/
 theorem leftOp {W : MorphismProperty C} {L : C ⥤ Dᵒᵖ} (h : W.IsInvertedBy L) :
     W.op.IsInvertedBy L.leftOp := fun X Y f hf => by haveI := h f.unop hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.left_op CategoryTheory.MorphismProperty.IsInvertedBy.leftOp
 
-/- warning: category_theory.morphism_property.is_inverted_by.unop -> CategoryTheory.MorphismProperty.IsInvertedBy.unop is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W (CategoryTheory.Functor.unop.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W (CategoryTheory.Functor.unop.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.unop CategoryTheory.MorphismProperty.IsInvertedBy.unopₓ'. -/
 theorem unop {W : MorphismProperty C} {L : Cᵒᵖ ⥤ Dᵒᵖ} (h : W.op.IsInvertedBy L) :
     W.IsInvertedBy L.unop := fun X Y f hf => by haveI := h f.op hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.unop CategoryTheory.MorphismProperty.IsInvertedBy.unop
 
 end IsInvertedBy
 
-/- warning: category_theory.morphism_property.naturality_property -> CategoryTheory.MorphismProperty.naturalityProperty is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁ X) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂ X)) -> (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u1, succ u4, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁) X) (Prefunctor.obj.{succ u1, succ u4, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂) X)) -> (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.naturality_property CategoryTheory.MorphismProperty.naturalityPropertyₓ'. -/
 /-- Given `app : Π X, F₁.obj X ⟶ F₂.obj X` where `F₁` and `F₂` are two functors,
 this is the `morphism_property C` satisfied by the morphisms in `C` with respect
 to whom `app` is natural. -/
@@ -456,12 +402,6 @@ def naturalityProperty {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.o
 
 namespace NaturalityProperty
 
-/- warning: category_theory.morphism_property.naturality_property.is_stable_under_composition -> CategoryTheory.MorphismProperty.naturalityProperty.stableUnderComposition is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁ X) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂ X)), CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u1, u2, u3, u4} C _inst_1 D _inst_2 F₁ F₂ app)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {F₁ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₁) X) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₂) X)), CategoryTheory.MorphismProperty.StableUnderComposition.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u3, u4, u1, u2} C _inst_1 D _inst_2 F₁ F₂ app)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.naturality_property.is_stable_under_composition CategoryTheory.MorphismProperty.naturalityProperty.stableUnderCompositionₓ'. -/
 theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderComposition := fun X Y Z f g hf hg =>
   by
@@ -471,12 +411,6 @@ theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X 
   rw [category.assoc]
 #align category_theory.morphism_property.naturality_property.is_stable_under_composition CategoryTheory.MorphismProperty.naturalityProperty.stableUnderComposition
 
-/- warning: category_theory.morphism_property.naturality_property.is_stable_under_inverse -> CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverse is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁ X) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂ X)), CategoryTheory.MorphismProperty.StableUnderInverse.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u1, u2, u3, u4} C _inst_1 D _inst_2 F₁ F₂ app)
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {F₁ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₁) X) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₂) X)), CategoryTheory.MorphismProperty.StableUnderInverse.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u3, u4, u1, u2} C _inst_1 D _inst_2 F₁ F₂ app)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.naturality_property.is_stable_under_inverse CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverseₓ'. -/
 theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderInverse := fun X Y e he =>
   by
@@ -489,12 +423,6 @@ theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F
 
 end NaturalityProperty
 
-/- warning: category_theory.morphism_property.respects_iso.inverse_image -> CategoryTheory.MorphismProperty.RespectsIso.inverseImage is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {P : CategoryTheory.MorphismProperty.{u4, u3} D _inst_2}, (CategoryTheory.MorphismProperty.RespectsIso.{u4, u3} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u1, u2, u3, u4} C _inst_1 D _inst_2 P F))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {P : CategoryTheory.MorphismProperty.{u2, u1} D _inst_2}, (CategoryTheory.MorphismProperty.RespectsIso.{u2, u1} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.RespectsIso.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u3, u4, u1, u2} C _inst_1 D _inst_2 P F))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.respects_iso.inverse_image CategoryTheory.MorphismProperty.RespectsIso.inverseImageₓ'. -/
 theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F : C ⥤ D) :
     RespectsIso (P.inverseImage F) := by
   constructor
@@ -505,12 +433,6 @@ theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F
   exacts[h.1 (F.map_iso e) (F.map f) hf, h.2 (F.map_iso e) (F.map f) hf]
 #align category_theory.morphism_property.respects_iso.inverse_image CategoryTheory.MorphismProperty.RespectsIso.inverseImage
 
-/- warning: category_theory.morphism_property.stable_under_composition.inverse_image -> CategoryTheory.MorphismProperty.StableUnderComposition.inverseImage is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {P : CategoryTheory.MorphismProperty.{u4, u3} D _inst_2}, (CategoryTheory.MorphismProperty.StableUnderComposition.{u4, u3} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u1, u2, u3, u4} C _inst_1 D _inst_2 P F))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {P : CategoryTheory.MorphismProperty.{u2, u1} D _inst_2}, (CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u1} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.StableUnderComposition.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u3, u4, u1, u2} C _inst_1 D _inst_2 P F))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_composition.inverse_image CategoryTheory.MorphismProperty.StableUnderComposition.inverseImageₓ'. -/
 theorem StableUnderComposition.inverseImage {P : MorphismProperty D} (h : StableUnderComposition P)
     (F : C ⥤ D) : StableUnderComposition (P.inverseImage F) := fun X Y Z f g hf hg => by
   simpa only [← F.map_comp] using h (F.map f) (F.map g) hf hg
@@ -644,12 +566,6 @@ def FunctorsInverting.mk {W : MorphismProperty C} {D : Type _} [Category D] (F :
 #align category_theory.morphism_property.functors_inverting.mk CategoryTheory.MorphismProperty.FunctorsInverting.mk
 -/
 
-/- warning: category_theory.morphism_property.is_inverted_by.iff_of_iso -> CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_iso is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (CategoryTheory.Iso.{max u2 u4, max u1 u4 u2 u3} (CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u4, u2, u3} C _inst_1 D _inst_2) F₁ F₂) -> (Iff (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W F₁) (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W F₂))
-but is expected to have type
-  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] (W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1) {F₁ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2}, (CategoryTheory.Iso.{max u4 u2, max (max (max u4 u3) u1) u2} (CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u3, u2, u4, u1} C _inst_1 D _inst_2) F₁ F₂) -> (Iff (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W F₁) (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W F₂))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.iff_of_iso CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_isoₓ'. -/
 theorem IsInvertedBy.iff_of_iso (W : MorphismProperty C) {F₁ F₂ : C ⥤ D} (e : F₁ ≅ F₂) :
     W.IsInvertedBy F₁ ↔ W.IsInvertedBy F₂ :=
   by
@@ -767,12 +683,6 @@ theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismPropert
 #align category_theory.morphism_property.stable_under_composition.universally CategoryTheory.MorphismProperty.StableUnderComposition.universally
 -/
 
-/- warning: category_theory.morphism_property.universally_le -> CategoryTheory.MorphismProperty.universally_le is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), LE.le.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (Preorder.toHasLe.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.MorphismProperty.completeLattice.{u1, u2} C _inst_1))))) (CategoryTheory.MorphismProperty.universally.{u1, u2} C _inst_1 P) P
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), LE.le.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (Preorder.toLE.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.instCompleteLatticeMorphismProperty.{u1, u2} C _inst_1))))) (CategoryTheory.MorphismProperty.universally.{u1, u2} C _inst_1 P) P
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.universally_le CategoryTheory.MorphismProperty.universally_leₓ'. -/
 theorem universally_le (P : MorphismProperty C) : P.universally ≤ P :=
   by
   intro X Y f hf
@@ -822,76 +732,34 @@ protected def bijective : MorphismProperty C := fun X Y f => Bijective f
 #align category_theory.morphism_property.bijective CategoryTheory.MorphismProperty.bijective
 -/
 
-/- warning: category_theory.morphism_property.bijective_eq_sup -> CategoryTheory.MorphismProperty.bijective_eq_sup is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], Eq.{max (succ u2) (succ u1)} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.MorphismProperty.bijective.{u1, u2, u3} C _inst_1 _inst_3) (Inf.inf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteLattice.toLattice.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.MorphismProperty.completeLattice.{u1, u2} C _inst_1)))) (CategoryTheory.MorphismProperty.injective.{u1, u2, u3} C _inst_1 _inst_3) (CategoryTheory.MorphismProperty.surjective.{u1, u2, u3} C _inst_1 _inst_3))
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], Eq.{max (succ u3) (succ u2)} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (CategoryTheory.MorphismProperty.bijective.{u2, u3, u1} C _inst_1 _inst_3) (Inf.inf.{max u3 u2} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (Lattice.toInf.{max u3 u2} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (CompleteLattice.toLattice.{max u3 u2} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (CategoryTheory.instCompleteLatticeMorphismProperty.{u2, u3} C _inst_1))) (CategoryTheory.MorphismProperty.injective.{u2, u3, u1} C _inst_1 _inst_3) (CategoryTheory.MorphismProperty.surjective.{u2, u3, u1} C _inst_1 _inst_3))
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.bijective_eq_sup CategoryTheory.MorphismProperty.bijective_eq_supₓ'. -/
 theorem bijective_eq_sup :
     MorphismProperty.bijective C = MorphismProperty.injective C ⊓ MorphismProperty.surjective C :=
   rfl
 #align category_theory.morphism_property.bijective_eq_sup CategoryTheory.MorphismProperty.bijective_eq_sup
 
-/- warning: category_theory.morphism_property.injective_stable_under_composition -> CategoryTheory.MorphismProperty.injective_stableUnderComposition is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u1, u2, u3} C _inst_1 _inst_3)
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u2, u3, u1} C _inst_1 _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.injective_stable_under_composition CategoryTheory.MorphismProperty.injective_stableUnderCompositionₓ'. -/
 theorem injective_stableUnderComposition : (MorphismProperty.injective C).StableUnderComposition :=
   fun X Y Z f g hf hg => by delta morphism_property.injective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.injective_stable_under_composition CategoryTheory.MorphismProperty.injective_stableUnderComposition
 
-/- warning: category_theory.morphism_property.surjective_stable_under_composition -> CategoryTheory.MorphismProperty.surjective_stableUnderComposition is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u1, u2, u3} C _inst_1 _inst_3)
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u2, u3, u1} C _inst_1 _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.surjective_stable_under_composition CategoryTheory.MorphismProperty.surjective_stableUnderCompositionₓ'. -/
 theorem surjective_stableUnderComposition :
     (MorphismProperty.surjective C).StableUnderComposition := fun X Y Z f g hf hg => by
   delta morphism_property.surjective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.surjective_stable_under_composition CategoryTheory.MorphismProperty.surjective_stableUnderComposition
 
-/- warning: category_theory.morphism_property.bijective_stable_under_composition -> CategoryTheory.MorphismProperty.bijective_stableUnderComposition is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u1, u2, u3} C _inst_1 _inst_3)
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u2, u3, u1} C _inst_1 _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.bijective_stable_under_composition CategoryTheory.MorphismProperty.bijective_stableUnderCompositionₓ'. -/
 theorem bijective_stableUnderComposition : (MorphismProperty.bijective C).StableUnderComposition :=
   fun X Y Z f g hf hg => by delta morphism_property.bijective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.bijective_stable_under_composition CategoryTheory.MorphismProperty.bijective_stableUnderComposition
 
-/- warning: category_theory.morphism_property.injective_respects_iso -> CategoryTheory.MorphismProperty.injective_respectsIso is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u1, u2, u3} C _inst_1 _inst_3)
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u2, u3, u1} C _inst_1 _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.injective_respects_iso CategoryTheory.MorphismProperty.injective_respectsIsoₓ'. -/
 theorem injective_respectsIso : (MorphismProperty.injective C).RespectsIso :=
   (injective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Injective
 #align category_theory.morphism_property.injective_respects_iso CategoryTheory.MorphismProperty.injective_respectsIso
 
-/- warning: category_theory.morphism_property.surjective_respects_iso -> CategoryTheory.MorphismProperty.surjective_respectsIso is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u1, u2, u3} C _inst_1 _inst_3)
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u2, u3, u1} C _inst_1 _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.surjective_respects_iso CategoryTheory.MorphismProperty.surjective_respectsIsoₓ'. -/
 theorem surjective_respectsIso : (MorphismProperty.surjective C).RespectsIso :=
   (surjective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Surjective
 #align category_theory.morphism_property.surjective_respects_iso CategoryTheory.MorphismProperty.surjective_respectsIso
 
-/- warning: category_theory.morphism_property.bijective_respects_iso -> CategoryTheory.MorphismProperty.bijective_respectsIso is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u1, u2, u3} C _inst_1 _inst_3)
-but is expected to have type
-  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u2, u3, u1} C _inst_1 _inst_3)
-Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.bijective_respects_iso CategoryTheory.MorphismProperty.bijective_respectsIsoₓ'. -/
 theorem bijective_respectsIso : (MorphismProperty.bijective C).RespectsIso :=
   (bijective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Bijective
Diff
@@ -202,10 +202,8 @@ but is expected to have type
   forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P) -> (forall {f : CategoryTheory.Arrow.{u1, u2} C _inst_1} {g : CategoryTheory.Arrow.{u1, u2} C _inst_1}, (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.instCategoryArrow.{u1, u2} C _inst_1) f g) -> (Iff (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))))
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.respects_iso.arrow_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iffₓ'. -/
 theorem RespectsIso.arrow_iso_iff {P : MorphismProperty C} (hP : RespectsIso P) {f g : Arrow C}
-    (e : f ≅ g) : P f.Hom ↔ P g.Hom :=
-  by
-  rw [← arrow.inv_left_hom_right e.hom, hP.cancel_left_is_iso, hP.cancel_right_is_iso]
-  rfl
+    (e : f ≅ g) : P f.Hom ↔ P g.Hom := by
+  rw [← arrow.inv_left_hom_right e.hom, hP.cancel_left_is_iso, hP.cancel_right_is_iso]; rfl
 #align category_theory.morphism_property.respects_iso.arrow_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iff
 
 #print CategoryTheory.MorphismProperty.RespectsIso.arrow_mk_iso_iff /-
@@ -397,11 +395,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.of_comp CategoryTheory.MorphismProperty.IsInvertedBy.of_compₓ'. -/
 theorem of_comp {C₁ C₂ C₃ : Type _} [Category C₁] [Category C₂] [Category C₃]
     (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (hF : W.IsInvertedBy F) (G : C₂ ⥤ C₃) :
-    W.IsInvertedBy (F ⋙ G) := fun X Y f hf =>
-  by
-  haveI := hF f hf
-  dsimp
-  infer_instance
+    W.IsInvertedBy (F ⋙ G) := fun X Y f hf => by haveI := hF f hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.of_comp CategoryTheory.MorphismProperty.IsInvertedBy.of_comp
 
 /- warning: category_theory.morphism_property.is_inverted_by.op -> CategoryTheory.MorphismProperty.IsInvertedBy.op is a dubious translation:
@@ -411,10 +405,7 @@ but is expected to have type
   forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) (CategoryTheory.Functor.op.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.op CategoryTheory.MorphismProperty.IsInvertedBy.opₓ'. -/
 theorem op {W : MorphismProperty C} {L : C ⥤ D} (h : W.IsInvertedBy L) : W.op.IsInvertedBy L.op :=
-  fun X Y f hf => by
-  haveI := h f.unop hf
-  dsimp
-  infer_instance
+  fun X Y f hf => by haveI := h f.unop hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.op CategoryTheory.MorphismProperty.IsInvertedBy.op
 
 /- warning: category_theory.morphism_property.is_inverted_by.right_op -> CategoryTheory.MorphismProperty.IsInvertedBy.rightOp is a dubious translation:
@@ -424,11 +415,7 @@ but is expected to have type
   forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) W (CategoryTheory.Functor.rightOp.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.right_op CategoryTheory.MorphismProperty.IsInvertedBy.rightOpₓ'. -/
 theorem rightOp {W : MorphismProperty C} {L : Cᵒᵖ ⥤ D} (h : W.op.IsInvertedBy L) :
-    W.IsInvertedBy L.rightOp := fun X Y f hf =>
-  by
-  haveI := h f.op hf
-  dsimp
-  infer_instance
+    W.IsInvertedBy L.rightOp := fun X Y f hf => by haveI := h f.op hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.right_op CategoryTheory.MorphismProperty.IsInvertedBy.rightOp
 
 /- warning: category_theory.morphism_property.is_inverted_by.left_op -> CategoryTheory.MorphismProperty.IsInvertedBy.leftOp is a dubious translation:
@@ -438,11 +425,7 @@ but is expected to have type
   forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) (CategoryTheory.Functor.leftOp.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.left_op CategoryTheory.MorphismProperty.IsInvertedBy.leftOpₓ'. -/
 theorem leftOp {W : MorphismProperty C} {L : C ⥤ Dᵒᵖ} (h : W.IsInvertedBy L) :
-    W.op.IsInvertedBy L.leftOp := fun X Y f hf =>
-  by
-  haveI := h f.unop hf
-  dsimp
-  infer_instance
+    W.op.IsInvertedBy L.leftOp := fun X Y f hf => by haveI := h f.unop hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.left_op CategoryTheory.MorphismProperty.IsInvertedBy.leftOp
 
 /- warning: category_theory.morphism_property.is_inverted_by.unop -> CategoryTheory.MorphismProperty.IsInvertedBy.unop is a dubious translation:
@@ -452,11 +435,7 @@ but is expected to have type
   forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W (CategoryTheory.Functor.unop.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.unop CategoryTheory.MorphismProperty.IsInvertedBy.unopₓ'. -/
 theorem unop {W : MorphismProperty C} {L : Cᵒᵖ ⥤ Dᵒᵖ} (h : W.op.IsInvertedBy L) :
-    W.IsInvertedBy L.unop := fun X Y f hf =>
-  by
-  haveI := h f.op hf
-  dsimp
-  infer_instance
+    W.IsInvertedBy L.unop := fun X Y f hf => by haveI := h f.op hf; dsimp; infer_instance
 #align category_theory.morphism_property.is_inverted_by.unop CategoryTheory.MorphismProperty.IsInvertedBy.unop
 
 end IsInvertedBy
@@ -601,31 +580,19 @@ end
 
 #print CategoryTheory.MorphismProperty.RespectsIso.monomorphisms /-
 theorem RespectsIso.monomorphisms : RespectsIso (monomorphisms C) := by
-  constructor <;>
-    · intro X Y Z e f
-      simp only [monomorphisms.iff]
-      intro
-      apply mono_comp
+  constructor <;> · intro X Y Z e f; simp only [monomorphisms.iff]; intro ; apply mono_comp
 #align category_theory.morphism_property.respects_iso.monomorphisms CategoryTheory.MorphismProperty.RespectsIso.monomorphisms
 -/
 
 #print CategoryTheory.MorphismProperty.RespectsIso.epimorphisms /-
 theorem RespectsIso.epimorphisms : RespectsIso (epimorphisms C) := by
-  constructor <;>
-    · intro X Y Z e f
-      simp only [epimorphisms.iff]
-      intro
-      apply epi_comp
+  constructor <;> · intro X Y Z e f; simp only [epimorphisms.iff]; intro ; apply epi_comp
 #align category_theory.morphism_property.respects_iso.epimorphisms CategoryTheory.MorphismProperty.RespectsIso.epimorphisms
 -/
 
 #print CategoryTheory.MorphismProperty.RespectsIso.isomorphisms /-
 theorem RespectsIso.isomorphisms : RespectsIso (isomorphisms C) := by
-  constructor <;>
-    · intro X Y Z e f
-      simp only [isomorphisms.iff]
-      intro
-      infer_instance
+  constructor <;> · intro X Y Z e f; simp only [isomorphisms.iff]; intro ; infer_instance
 #align category_theory.morphism_property.respects_iso.isomorphisms CategoryTheory.MorphismProperty.RespectsIso.isomorphisms
 -/
 
@@ -689,12 +656,8 @@ theorem IsInvertedBy.iff_of_iso (W : MorphismProperty C) {F₁ F₂ : C ⥤ D} (
   suffices ∀ (X Y : C) (f : X ⟶ Y), is_iso (F₁.map f) ↔ is_iso (F₂.map f)
     by
     constructor
-    exact fun h X Y f hf => by
-      rw [← this]
-      exact h f hf
-    exact fun h X Y f hf => by
-      rw [this]
-      exact h f hf
+    exact fun h X Y f hf => by rw [← this]; exact h f hf
+    exact fun h X Y f hf => by rw [this]; exact h f hf
   intro X Y f
   exact (respects_iso.isomorphisms D).arrow_mk_iso_iff (arrow.iso_mk (e.app X) (e.app Y) (by simp))
 #align category_theory.morphism_property.is_inverted_by.iff_of_iso CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_iso
@@ -877,10 +840,7 @@ but is expected to have type
   forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u2, u3, u1} C _inst_1 _inst_3)
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.injective_stable_under_composition CategoryTheory.MorphismProperty.injective_stableUnderCompositionₓ'. -/
 theorem injective_stableUnderComposition : (MorphismProperty.injective C).StableUnderComposition :=
-  fun X Y Z f g hf hg => by
-  delta morphism_property.injective
-  rw [coe_comp]
-  exact hg.comp hf
+  fun X Y Z f g hf hg => by delta morphism_property.injective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.injective_stable_under_composition CategoryTheory.MorphismProperty.injective_stableUnderComposition
 
 /- warning: category_theory.morphism_property.surjective_stable_under_composition -> CategoryTheory.MorphismProperty.surjective_stableUnderComposition is a dubious translation:
@@ -890,11 +850,8 @@ but is expected to have type
   forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u2, u3, u1} C _inst_1 _inst_3)
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.surjective_stable_under_composition CategoryTheory.MorphismProperty.surjective_stableUnderCompositionₓ'. -/
 theorem surjective_stableUnderComposition :
-    (MorphismProperty.surjective C).StableUnderComposition := fun X Y Z f g hf hg =>
-  by
-  delta morphism_property.surjective
-  rw [coe_comp]
-  exact hg.comp hf
+    (MorphismProperty.surjective C).StableUnderComposition := fun X Y Z f g hf hg => by
+  delta morphism_property.surjective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.surjective_stable_under_composition CategoryTheory.MorphismProperty.surjective_stableUnderComposition
 
 /- warning: category_theory.morphism_property.bijective_stable_under_composition -> CategoryTheory.MorphismProperty.bijective_stableUnderComposition is a dubious translation:
@@ -904,10 +861,7 @@ but is expected to have type
   forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u2, u3, u1} C _inst_1 _inst_3)
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.bijective_stable_under_composition CategoryTheory.MorphismProperty.bijective_stableUnderCompositionₓ'. -/
 theorem bijective_stableUnderComposition : (MorphismProperty.bijective C).StableUnderComposition :=
-  fun X Y Z f g hf hg => by
-  delta morphism_property.bijective
-  rw [coe_comp]
-  exact hg.comp hf
+  fun X Y Z f g hf hg => by delta morphism_property.bijective; rw [coe_comp]; exact hg.comp hf
 #align category_theory.morphism_property.bijective_stable_under_composition CategoryTheory.MorphismProperty.bijective_stableUnderComposition
 
 /- warning: category_theory.morphism_property.injective_respects_iso -> CategoryTheory.MorphismProperty.injective_respectsIso is a dubious translation:
Diff
@@ -272,10 +272,7 @@ theorem StableUnderBaseChange.snd {P : MorphismProperty C} (hP : StableUnderBase
 -/
 
 /- warning: category_theory.morphism_property.stable_under_base_change.base_change_obj -> CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) (X : CategoryTheory.Over.{u1, u2} C _inst_1 S), (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) -> (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X))) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X))))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) (X : CategoryTheory.Over.{u1, u2} C _inst_1 S), (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) -> (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X))) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S')) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_base_change.base_change_obj CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_objₓ'. -/
 theorem StableUnderBaseChange.baseChange_obj [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) (X : Over S) (H : P X.Hom) :
@@ -284,10 +281,7 @@ theorem StableUnderBaseChange.baseChange_obj [HasPullbacks C] {P : MorphismPrope
 #align category_theory.morphism_property.stable_under_base_change.base_change_obj CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj
 
 /- warning: category_theory.morphism_property.stable_under_base_change.base_change_map -> CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) {X : CategoryTheory.Over.{u1, u2} C _inst_1 S} {Y : CategoryTheory.Over.{u1, u2} C _inst_1 S} (g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S))) X Y), (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) Y) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X Y g)) -> (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) Y)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) Y) (CategoryTheory.Functor.map.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X Y g))))
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) {X : CategoryTheory.Over.{u1, u2} C _inst_1 S} {Y : CategoryTheory.Over.{u1, u2} C _inst_1 S} (g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) X Y), (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) Y) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X Y g)) -> (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) Y)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) Y) (Prefunctor.map.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X Y g))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_base_change.base_change_map CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_mapₓ'. -/
 theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) {X Y : Over S} (g : X ⟶ Y)
Diff
@@ -810,13 +810,17 @@ theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismPropert
 #align category_theory.morphism_property.stable_under_composition.universally CategoryTheory.MorphismProperty.StableUnderComposition.universally
 -/
 
-#print CategoryTheory.MorphismProperty.universally_le /-
+/- warning: category_theory.morphism_property.universally_le -> CategoryTheory.MorphismProperty.universally_le is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), LE.le.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (Preorder.toHasLe.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.MorphismProperty.completeLattice.{u1, u2} C _inst_1))))) (CategoryTheory.MorphismProperty.universally.{u1, u2} C _inst_1 P) P
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), LE.le.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (Preorder.toLE.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.instCompleteLatticeMorphismProperty.{u1, u2} C _inst_1))))) (CategoryTheory.MorphismProperty.universally.{u1, u2} C _inst_1 P) P
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.universally_le CategoryTheory.MorphismProperty.universally_leₓ'. -/
 theorem universally_le (P : MorphismProperty C) : P.universally ≤ P :=
   by
   intro X Y f hf
   exact hf (𝟙 _) (𝟙 _) _ (is_pullback.of_vert_is_iso ⟨by rw [category.comp_id, category.id_comp]⟩)
 #align category_theory.morphism_property.universally_le CategoryTheory.MorphismProperty.universally_le
--/
 
 #print CategoryTheory.MorphismProperty.StableUnderBaseChange.universally_eq /-
 theorem StableUnderBaseChange.universally_eq {P : MorphismProperty C}
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.morphism_property
-! leanprover-community/mathlib commit 7f963633766aaa3ebc8253100a5229dd463040c7
+! leanprover-community/mathlib commit cb3ceec8485239a61ed51d944cb9a95b68c6bafc
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -16,6 +16,9 @@ import Mathbin.CategoryTheory.ConcreteCategory.Basic
 /-!
 # Properties of morphisms
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 We provide the basic framework for talking about properties of morphisms.
 The following meta-properties are defined
 
Diff
@@ -40,10 +40,12 @@ namespace CategoryTheory
 
 variable (C : Type u) [Category.{v} C] {D : Type _} [Category D]
 
+#print CategoryTheory.MorphismProperty /-
 /-- A `morphism_property C` is a class of morphisms between objects in `C`. -/
 def MorphismProperty :=
   ∀ ⦃X Y : C⦄ (f : X ⟶ Y), Prop deriving CompleteLattice
 #align category_theory.morphism_property CategoryTheory.MorphismProperty
+-/
 
 instance : Inhabited (MorphismProperty C) :=
   ⟨⊤⟩
@@ -58,100 +60,144 @@ instance : HasSubset (MorphismProperty C) :=
 instance : Inter (MorphismProperty C) :=
   ⟨fun P₁ P₂ X Y f => P₁ f ∧ P₂ f⟩
 
+#print CategoryTheory.MorphismProperty.op /-
 /-- The morphism property in `Cᵒᵖ` associated to a morphism property in `C` -/
 @[simp]
 def op (P : MorphismProperty C) : MorphismProperty Cᵒᵖ := fun X Y f => P f.unop
 #align category_theory.morphism_property.op CategoryTheory.MorphismProperty.op
+-/
 
+#print CategoryTheory.MorphismProperty.unop /-
 /-- The morphism property in `C` associated to a morphism property in `Cᵒᵖ` -/
 @[simp]
 def unop (P : MorphismProperty Cᵒᵖ) : MorphismProperty C := fun X Y f => P f.op
 #align category_theory.morphism_property.unop CategoryTheory.MorphismProperty.unop
+-/
 
+#print CategoryTheory.MorphismProperty.unop_op /-
 theorem unop_op (P : MorphismProperty C) : P.op.unop = P :=
   rfl
 #align category_theory.morphism_property.unop_op CategoryTheory.MorphismProperty.unop_op
+-/
 
+#print CategoryTheory.MorphismProperty.op_unop /-
 theorem op_unop (P : MorphismProperty Cᵒᵖ) : P.unop.op = P :=
   rfl
 #align category_theory.morphism_property.op_unop CategoryTheory.MorphismProperty.op_unop
+-/
 
+#print CategoryTheory.MorphismProperty.inverseImage /-
 /-- The inverse image of a `morphism_property D` by a functor `C ⥤ D` -/
 def inverseImage (P : MorphismProperty D) (F : C ⥤ D) : MorphismProperty C := fun X Y f =>
   P (F.map f)
 #align category_theory.morphism_property.inverse_image CategoryTheory.MorphismProperty.inverseImage
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso /-
 /-- A morphism property `respects_iso` if it still holds when composed with an isomorphism -/
 def RespectsIso (P : MorphismProperty C) : Prop :=
   (∀ {X Y Z} (e : X ≅ Y) (f : Y ⟶ Z), P f → P (e.Hom ≫ f)) ∧
     ∀ {X Y Z} (e : Y ≅ Z) (f : X ⟶ Y), P f → P (f ≫ e.Hom)
 #align category_theory.morphism_property.respects_iso CategoryTheory.MorphismProperty.RespectsIso
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.op /-
 theorem RespectsIso.op {P : MorphismProperty C} (h : RespectsIso P) : RespectsIso P.op :=
   ⟨fun X Y Z e f hf => h.2 e.unop f.unop hf, fun X Y Z e f hf => h.1 e.unop f.unop hf⟩
 #align category_theory.morphism_property.respects_iso.op CategoryTheory.MorphismProperty.RespectsIso.op
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.unop /-
 theorem RespectsIso.unop {P : MorphismProperty Cᵒᵖ} (h : RespectsIso P) : RespectsIso P.unop :=
   ⟨fun X Y Z e f hf => h.2 e.op f.op hf, fun X Y Z e f hf => h.1 e.op f.op hf⟩
 #align category_theory.morphism_property.respects_iso.unop CategoryTheory.MorphismProperty.RespectsIso.unop
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition /-
 /-- A morphism property is `stable_under_composition` if the composition of two such morphisms
 still falls in the class. -/
 def StableUnderComposition (P : MorphismProperty C) : Prop :=
   ∀ ⦃X Y Z⦄ (f : X ⟶ Y) (g : Y ⟶ Z), P f → P g → P (f ≫ g)
 #align category_theory.morphism_property.stable_under_composition CategoryTheory.MorphismProperty.StableUnderComposition
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.op /-
 theorem StableUnderComposition.op {P : MorphismProperty C} (h : StableUnderComposition P) :
     StableUnderComposition P.op := fun X Y Z f g hf hg => h g.unop f.unop hg hf
 #align category_theory.morphism_property.stable_under_composition.op CategoryTheory.MorphismProperty.StableUnderComposition.op
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.unop /-
 theorem StableUnderComposition.unop {P : MorphismProperty Cᵒᵖ} (h : StableUnderComposition P) :
     StableUnderComposition P.unop := fun X Y Z f g hf hg => h g.op f.op hg hf
 #align category_theory.morphism_property.stable_under_composition.unop CategoryTheory.MorphismProperty.StableUnderComposition.unop
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderInverse /-
 /-- A morphism property is `stable_under_inverse` if the inverse of a morphism satisfying
 the property still falls in the class. -/
 def StableUnderInverse (P : MorphismProperty C) : Prop :=
   ∀ ⦃X Y⦄ (e : X ≅ Y), P e.Hom → P e.inv
 #align category_theory.morphism_property.stable_under_inverse CategoryTheory.MorphismProperty.StableUnderInverse
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderInverse.op /-
 theorem StableUnderInverse.op {P : MorphismProperty C} (h : StableUnderInverse P) :
     StableUnderInverse P.op := fun X Y e he => h e.unop he
 #align category_theory.morphism_property.stable_under_inverse.op CategoryTheory.MorphismProperty.StableUnderInverse.op
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderInverse.unop /-
 theorem StableUnderInverse.unop {P : MorphismProperty Cᵒᵖ} (h : StableUnderInverse P) :
     StableUnderInverse P.unop := fun X Y e he => h e.op he
 #align category_theory.morphism_property.stable_under_inverse.unop CategoryTheory.MorphismProperty.StableUnderInverse.unop
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange /-
 /-- A morphism property is `stable_under_base_change` if the base change of such a morphism
 still falls in the class. -/
 def StableUnderBaseChange (P : MorphismProperty C) : Prop :=
   ∀ ⦃X Y Y' S : C⦄ ⦃f : X ⟶ S⦄ ⦃g : Y ⟶ S⦄ ⦃f' : Y' ⟶ Y⦄ ⦃g' : Y' ⟶ X⦄ (sq : IsPullback f' g' g f)
     (hg : P g), P g'
 #align category_theory.morphism_property.stable_under_base_change CategoryTheory.MorphismProperty.StableUnderBaseChange
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderCobaseChange /-
 /-- A morphism property is `stable_under_cobase_change` if the cobase change of such a morphism
 still falls in the class. -/
 def StableUnderCobaseChange (P : MorphismProperty C) : Prop :=
   ∀ ⦃A A' B B' : C⦄ ⦃f : A ⟶ A'⦄ ⦃g : A ⟶ B⦄ ⦃f' : B ⟶ B'⦄ ⦃g' : A' ⟶ B'⦄ (sq : IsPushout g f f' g')
     (hf : P f), P f'
 #align category_theory.morphism_property.stable_under_cobase_change CategoryTheory.MorphismProperty.StableUnderCobaseChange
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.respectsIso /-
 theorem StableUnderComposition.respectsIso {P : MorphismProperty C} (hP : StableUnderComposition P)
     (hP' : ∀ {X Y} (e : X ≅ Y), P e.Hom) : RespectsIso P :=
   ⟨fun X Y Z e f hf => hP _ _ (hP' e) hf, fun X Y Z e f hf => hP _ _ hf (hP' e)⟩
 #align category_theory.morphism_property.stable_under_composition.respects_iso CategoryTheory.MorphismProperty.StableUnderComposition.respectsIso
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.cancel_left_isIso /-
 theorem RespectsIso.cancel_left_isIso {P : MorphismProperty C} (hP : RespectsIso P) {X Y Z : C}
     (f : X ⟶ Y) (g : Y ⟶ Z) [IsIso f] : P (f ≫ g) ↔ P g :=
   ⟨fun h => by simpa using hP.1 (as_iso f).symm (f ≫ g) h, hP.1 (asIso f) g⟩
 #align category_theory.morphism_property.respects_iso.cancel_left_is_iso CategoryTheory.MorphismProperty.RespectsIso.cancel_left_isIso
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.cancel_right_isIso /-
 theorem RespectsIso.cancel_right_isIso {P : MorphismProperty C} (hP : RespectsIso P) {X Y Z : C}
     (f : X ⟶ Y) (g : Y ⟶ Z) [IsIso g] : P (f ≫ g) ↔ P f :=
   ⟨fun h => by simpa using hP.2 (as_iso g).symm (f ≫ g) h, hP.2 (asIso g) f⟩
 #align category_theory.morphism_property.respects_iso.cancel_right_is_iso CategoryTheory.MorphismProperty.RespectsIso.cancel_right_isIso
+-/
 
+/- warning: category_theory.morphism_property.respects_iso.arrow_iso_iff -> CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iff is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P) -> (forall {f : CategoryTheory.Arrow.{u1, u2} C _inst_1} {g : CategoryTheory.Arrow.{u1, u2} C _inst_1}, (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.Arrow.category.{u1, u2} C _inst_1) f g) -> (Iff (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P) -> (forall {f : CategoryTheory.Arrow.{u1, u2} C _inst_1} {g : CategoryTheory.Arrow.{u1, u2} C _inst_1}, (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.instCategoryArrow.{u1, u2} C _inst_1) f g) -> (Iff (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.respects_iso.arrow_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iffₓ'. -/
 theorem RespectsIso.arrow_iso_iff {P : MorphismProperty C} (hP : RespectsIso P) {f g : Arrow C}
     (e : f ≅ g) : P f.Hom ↔ P g.Hom :=
   by
@@ -159,11 +205,19 @@ theorem RespectsIso.arrow_iso_iff {P : MorphismProperty C} (hP : RespectsIso P)
   rfl
 #align category_theory.morphism_property.respects_iso.arrow_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_iso_iff
 
+#print CategoryTheory.MorphismProperty.RespectsIso.arrow_mk_iso_iff /-
 theorem RespectsIso.arrow_mk_iso_iff {P : MorphismProperty C} (hP : RespectsIso P) {W X Y Z : C}
     {f : W ⟶ X} {g : Y ⟶ Z} (e : Arrow.mk f ≅ Arrow.mk g) : P f ↔ P g :=
   hP.arrow_iso_iff e
 #align category_theory.morphism_property.respects_iso.arrow_mk_iso_iff CategoryTheory.MorphismProperty.RespectsIso.arrow_mk_iso_iff
+-/
 
+/- warning: category_theory.morphism_property.respects_iso.of_respects_arrow_iso -> CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_iso is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), (forall (f : CategoryTheory.Arrow.{u1, u2} C _inst_1) (g : CategoryTheory.Arrow.{u1, u2} C _inst_1), (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.Arrow.category.{u1, u2} C _inst_1) f g) -> (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) -> (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))) -> (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] (P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1), (forall (f : CategoryTheory.Arrow.{u1, u2} C _inst_1) (g : CategoryTheory.Arrow.{u1, u2} C _inst_1), (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Arrow.{u1, u2} C _inst_1) (CategoryTheory.instCategoryArrow.{u1, u2} C _inst_1) f g) -> (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) f)) -> (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u2, u2} C _inst_1 C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.id.{u1, u2} C _inst_1) g))) -> (CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 P)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.respects_iso.of_respects_arrow_iso CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_isoₓ'. -/
 theorem RespectsIso.of_respects_arrow_iso (P : MorphismProperty C)
     (hP : ∀ (f g : Arrow C) (e : f ≅ g) (hf : P f.Hom), P g.Hom) : RespectsIso P :=
   by
@@ -178,6 +232,7 @@ theorem RespectsIso.of_respects_arrow_iso (P : MorphismProperty C)
     simp only [category.id_comp]
 #align category_theory.morphism_property.respects_iso.of_respects_arrow_iso CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_iso
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.mk /-
 theorem StableUnderBaseChange.mk {P : MorphismProperty C} [HasPullbacks C] (hP₁ : RespectsIso P)
     (hP₂ : ∀ (X Y S : C) (f : X ⟶ S) (g : Y ⟶ S) (hg : P g), P (pullback.fst : pullback f g ⟶ X)) :
     StableUnderBaseChange P := fun X Y Y' S f g f' g' sq hg =>
@@ -186,32 +241,51 @@ theorem StableUnderBaseChange.mk {P : MorphismProperty C} [HasPullbacks C] (hP
   rw [← hP₁.cancel_left_is_iso e.inv, sq.flip.iso_pullback_inv_fst]
   exact hP₂ _ _ _ f g hg
 #align category_theory.morphism_property.stable_under_base_change.mk CategoryTheory.MorphismProperty.StableUnderBaseChange.mk
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.respectsIso /-
 theorem StableUnderBaseChange.respectsIso {P : MorphismProperty C} (hP : StableUnderBaseChange P) :
     RespectsIso P := by
   apply respects_iso.of_respects_arrow_iso
   intro f g e
   exact hP (is_pullback.of_horiz_is_iso (comm_sq.mk e.inv.w))
 #align category_theory.morphism_property.stable_under_base_change.respects_iso CategoryTheory.MorphismProperty.StableUnderBaseChange.respectsIso
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.fst /-
 theorem StableUnderBaseChange.fst {P : MorphismProperty C} (hP : StableUnderBaseChange P)
     {X Y S : C} (f : X ⟶ S) (g : Y ⟶ S) [HasPullback f g] (H : P g) :
     P (pullback.fst : pullback f g ⟶ X) :=
   hP (IsPullback.of_hasPullback f g).flip H
 #align category_theory.morphism_property.stable_under_base_change.fst CategoryTheory.MorphismProperty.StableUnderBaseChange.fst
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.snd /-
 theorem StableUnderBaseChange.snd {P : MorphismProperty C} (hP : StableUnderBaseChange P)
     {X Y S : C} (f : X ⟶ S) (g : Y ⟶ S) [HasPullback f g] (H : P f) :
     P (pullback.snd : pullback f g ⟶ Y) :=
   hP (IsPullback.of_hasPullback f g) H
 #align category_theory.morphism_property.stable_under_base_change.snd CategoryTheory.MorphismProperty.StableUnderBaseChange.snd
+-/
 
+/- warning: category_theory.morphism_property.stable_under_base_change.base_change_obj -> CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) (X : CategoryTheory.Over.{u1, u2} C _inst_1 S), (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) -> (P (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X))) (CategoryTheory.Functor.obj.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X))))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) (X : CategoryTheory.Over.{u1, u2} C _inst_1 S), (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S)) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X)) -> (P (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X))) (Prefunctor.obj.{succ u1, succ u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}))) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u1, u2} (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S')) (CategoryTheory.Comma.right.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X))) (CategoryTheory.Comma.hom.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X))))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_base_change.base_change_obj CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_objₓ'. -/
 theorem StableUnderBaseChange.baseChange_obj [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) (X : Over S) (H : P X.Hom) :
     P ((baseChange f).obj X).Hom :=
   hP.snd X.Hom f H
 #align category_theory.morphism_property.stable_under_base_change.base_change_obj CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_obj
 
+/- warning: category_theory.morphism_property.stable_under_base_change.base_change_map -> CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) {X : CategoryTheory.Over.{u1, u2} C _inst_1 S} {Y : CategoryTheory.Over.{u1, u2} C _inst_1 S} (g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S))) X Y), (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) Y) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X Y g)) -> (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) Y)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X) (CategoryTheory.Functor.obj.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) Y) (CategoryTheory.Functor.map.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Over.category.{u2, u1} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Over.category.{u2, u1} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f) X Y g))))
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.Limits.HasPullbacks.{u1, u2} C _inst_1] {P : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1}, (CategoryTheory.MorphismProperty.StableUnderBaseChange.{u1, u2} C _inst_1 P) -> (forall {S : C} {S' : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) S' S) {X : CategoryTheory.Over.{u1, u2} C _inst_1 S} {Y : CategoryTheory.Over.{u1, u2} C _inst_1 S} (g : Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) X Y), (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) Y) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S) X Y g)) -> (P (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X)) (CategoryTheory.Comma.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) Y)) (CategoryTheory.CommaMorphism.left.{u1, u1, u1, u2, u1, u2} C _inst_1 (CategoryTheory.Discrete.{u1} PUnit.{succ u1}) (CategoryTheory.discreteCategory.{u1} PUnit.{succ u1}) C _inst_1 (CategoryTheory.Functor.id.{u1, u2} C _inst_1) (CategoryTheory.Functor.fromPUnit.{u1, u2} C _inst_1 S') (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X) (Prefunctor.obj.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) Y) (Prefunctor.map.{succ u1, succ u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S))) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S'))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, max u2 u1, max u2 u1} (CategoryTheory.Over.{u1, u2} C _inst_1 S) (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S) (CategoryTheory.Over.{u1, u2} C _inst_1 S') (CategoryTheory.instCategoryOver.{u1, u2} C _inst_1 S') (CategoryTheory.Limits.baseChange.{u1, u2} C _inst_1 _inst_3 S' S f)) X Y g))))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_base_change.base_change_map CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_mapₓ'. -/
 theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) {S S' : C} (f : S' ⟶ S) {X Y : Over S} (g : X ⟶ Y)
     (H : P g.left) : P ((baseChange f).map g).left :=
@@ -225,6 +299,7 @@ theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismPrope
   exact hP.snd _ _ H
 #align category_theory.morphism_property.stable_under_base_change.base_change_map CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.pullback_map /-
 theorem StableUnderBaseChange.pullback_map [HasPullbacks C] {P : MorphismProperty C}
     (hP : StableUnderBaseChange P) (hP' : StableUnderComposition P) {S X X' Y Y' : C} {f : X ⟶ S}
     {g : Y ⟶ S} {f' : X' ⟶ S} {g' : Y' ⟶ S} {i₁ : X ⟶ X'} {i₂ : Y ⟶ Y'} (h₁ : P i₁) (h₂ : P i₂)
@@ -246,7 +321,9 @@ theorem StableUnderBaseChange.pullback_map [HasPullbacks C] {P : MorphismPropert
   exacts[hP.base_change_map _ (over.hom_mk _ e₂.symm : over.mk g ⟶ over.mk g') h₂,
     hP.base_change_map _ (over.hom_mk _ e₁.symm : over.mk f ⟶ over.mk f') h₁]
 #align category_theory.morphism_property.stable_under_base_change.pullback_map CategoryTheory.MorphismProperty.StableUnderBaseChange.pullback_map
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderCobaseChange.mk /-
 theorem StableUnderCobaseChange.mk {P : MorphismProperty C} [HasPushouts C] (hP₁ : RespectsIso P)
     (hP₂ : ∀ (A B A' : C) (f : A ⟶ A') (g : A ⟶ B) (hf : P f), P (pushout.inr : B ⟶ pushout f g)) :
     StableUnderCobaseChange P := fun A A' B B' f g f' g' sq hf =>
@@ -255,49 +332,72 @@ theorem StableUnderCobaseChange.mk {P : MorphismProperty C} [HasPushouts C] (hP
   rw [← hP₁.cancel_right_is_iso _ e.hom, sq.flip.inr_iso_pushout_hom]
   exact hP₂ _ _ _ f g hf
 #align category_theory.morphism_property.stable_under_cobase_change.mk CategoryTheory.MorphismProperty.StableUnderCobaseChange.mk
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderCobaseChange.respectsIso /-
 theorem StableUnderCobaseChange.respectsIso {P : MorphismProperty C}
     (hP : StableUnderCobaseChange P) : RespectsIso P :=
   RespectsIso.of_respects_arrow_iso _ fun f g e => hP (IsPushout.of_horiz_isIso (CommSq.mk e.Hom.w))
 #align category_theory.morphism_property.stable_under_cobase_change.respects_iso CategoryTheory.MorphismProperty.StableUnderCobaseChange.respectsIso
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderCobaseChange.inl /-
 theorem StableUnderCobaseChange.inl {P : MorphismProperty C} (hP : StableUnderCobaseChange P)
     {A B A' : C} (f : A ⟶ A') (g : A ⟶ B) [HasPushout f g] (H : P g) :
     P (pushout.inl : A' ⟶ pushout f g) :=
   hP (IsPushout.of_hasPushout f g) H
 #align category_theory.morphism_property.stable_under_cobase_change.inl CategoryTheory.MorphismProperty.StableUnderCobaseChange.inl
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderCobaseChange.inr /-
 theorem StableUnderCobaseChange.inr {P : MorphismProperty C} (hP : StableUnderCobaseChange P)
     {A B A' : C} (f : A ⟶ A') (g : A ⟶ B) [HasPushout f g] (H : P f) :
     P (pushout.inr : B ⟶ pushout f g) :=
   hP (IsPushout.of_hasPushout f g).flip H
 #align category_theory.morphism_property.stable_under_cobase_change.inr CategoryTheory.MorphismProperty.StableUnderCobaseChange.inr
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderCobaseChange.op /-
 theorem StableUnderCobaseChange.op {P : MorphismProperty C} (hP : StableUnderCobaseChange P) :
     StableUnderBaseChange P.op := fun X Y Y' S f g f' g' sq hg => hP sq.unop hg
 #align category_theory.morphism_property.stable_under_cobase_change.op CategoryTheory.MorphismProperty.StableUnderCobaseChange.op
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderCobaseChange.unop /-
 theorem StableUnderCobaseChange.unop {P : MorphismProperty Cᵒᵖ} (hP : StableUnderCobaseChange P) :
     StableUnderBaseChange P.unop := fun X Y Y' S f g f' g' sq hg => hP sq.op hg
 #align category_theory.morphism_property.stable_under_cobase_change.unop CategoryTheory.MorphismProperty.StableUnderCobaseChange.unop
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.op /-
 theorem StableUnderBaseChange.op {P : MorphismProperty C} (hP : StableUnderBaseChange P) :
     StableUnderCobaseChange P.op := fun A A' B B' f g f' g' sq hf => hP sq.unop hf
 #align category_theory.morphism_property.stable_under_base_change.op CategoryTheory.MorphismProperty.StableUnderBaseChange.op
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.unop /-
 theorem StableUnderBaseChange.unop {P : MorphismProperty Cᵒᵖ} (hP : StableUnderBaseChange P) :
     StableUnderCobaseChange P.unop := fun A A' B B' f g f' g' sq hf => hP sq.op hf
 #align category_theory.morphism_property.stable_under_base_change.unop CategoryTheory.MorphismProperty.StableUnderBaseChange.unop
+-/
 
+#print CategoryTheory.MorphismProperty.IsInvertedBy /-
 /-- If `P : morphism_property C` and `F : C ⥤ D`, then
 `P.is_inverted_by F` means that all morphisms in `P` are mapped by `F`
 to isomorphisms in `D`. -/
 def IsInvertedBy (P : MorphismProperty C) (F : C ⥤ D) : Prop :=
   ∀ ⦃X Y : C⦄ (f : X ⟶ Y) (hf : P f), IsIso (F.map f)
 #align category_theory.morphism_property.is_inverted_by CategoryTheory.MorphismProperty.IsInvertedBy
+-/
 
 namespace IsInvertedBy
 
+/- warning: category_theory.morphism_property.is_inverted_by.of_comp -> CategoryTheory.MorphismProperty.IsInvertedBy.of_comp is a dubious translation:
+lean 3 declaration is
+  forall {C₁ : Type.{u1}} {C₂ : Type.{u2}} {C₃ : Type.{u3}} [_inst_3 : CategoryTheory.Category.{u4, u1} C₁] [_inst_4 : CategoryTheory.Category.{u5, u2} C₂] [_inst_5 : CategoryTheory.Category.{u6, u3} C₃] (W : CategoryTheory.MorphismProperty.{u4, u1} C₁ _inst_3) (F : CategoryTheory.Functor.{u4, u5, u1, u2} C₁ _inst_3 C₂ _inst_4), (CategoryTheory.MorphismProperty.IsInvertedBy.{u4, u1, u2, u5} C₁ _inst_3 C₂ _inst_4 W F) -> (forall (G : CategoryTheory.Functor.{u5, u6, u2, u3} C₂ _inst_4 C₃ _inst_5), CategoryTheory.MorphismProperty.IsInvertedBy.{u4, u1, u3, u6} C₁ _inst_3 C₃ _inst_5 W (CategoryTheory.Functor.comp.{u4, u5, u6, u1, u2, u3} C₁ _inst_3 C₂ _inst_4 C₃ _inst_5 F G))
+but is expected to have type
+  forall {C₁ : Type.{u6}} {C₂ : Type.{u5}} {C₃ : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u3, u6} C₁] [_inst_4 : CategoryTheory.Category.{u2, u5} C₂] [_inst_5 : CategoryTheory.Category.{u1, u4} C₃] (W : CategoryTheory.MorphismProperty.{u3, u6} C₁ _inst_3) (F : CategoryTheory.Functor.{u3, u2, u6, u5} C₁ _inst_3 C₂ _inst_4), (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u6, u5, u2} C₁ _inst_3 C₂ _inst_4 W F) -> (forall (G : CategoryTheory.Functor.{u2, u1, u5, u4} C₂ _inst_4 C₃ _inst_5), CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u6, u4, u1} C₁ _inst_3 C₃ _inst_5 W (CategoryTheory.Functor.comp.{u3, u2, u1, u6, u5, u4} C₁ _inst_3 C₂ _inst_4 C₃ _inst_5 F G))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.of_comp CategoryTheory.MorphismProperty.IsInvertedBy.of_compₓ'. -/
 theorem of_comp {C₁ C₂ C₃ : Type _} [Category C₁] [Category C₂] [Category C₃]
     (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (hF : W.IsInvertedBy F) (G : C₂ ⥤ C₃) :
     W.IsInvertedBy (F ⋙ G) := fun X Y f hf =>
@@ -307,6 +407,12 @@ theorem of_comp {C₁ C₂ C₃ : Type _} [Category C₁] [Category C₂] [Categ
   infer_instance
 #align category_theory.morphism_property.is_inverted_by.of_comp CategoryTheory.MorphismProperty.IsInvertedBy.of_comp
 
+/- warning: category_theory.morphism_property.is_inverted_by.op -> CategoryTheory.MorphismProperty.IsInvertedBy.op is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) (CategoryTheory.Functor.op.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) (CategoryTheory.Functor.op.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.op CategoryTheory.MorphismProperty.IsInvertedBy.opₓ'. -/
 theorem op {W : MorphismProperty C} {L : C ⥤ D} (h : W.IsInvertedBy L) : W.op.IsInvertedBy L.op :=
   fun X Y f hf => by
   haveI := h f.unop hf
@@ -314,6 +420,12 @@ theorem op {W : MorphismProperty C} {L : C ⥤ D} (h : W.IsInvertedBy L) : W.op.
   infer_instance
 #align category_theory.morphism_property.is_inverted_by.op CategoryTheory.MorphismProperty.IsInvertedBy.op
 
+/- warning: category_theory.morphism_property.is_inverted_by.right_op -> CategoryTheory.MorphismProperty.IsInvertedBy.rightOp is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) W (CategoryTheory.Functor.rightOp.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) W (CategoryTheory.Functor.rightOp.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.right_op CategoryTheory.MorphismProperty.IsInvertedBy.rightOpₓ'. -/
 theorem rightOp {W : MorphismProperty C} {L : Cᵒᵖ ⥤ D} (h : W.op.IsInvertedBy L) :
     W.IsInvertedBy L.rightOp := fun X Y f hf =>
   by
@@ -322,6 +434,12 @@ theorem rightOp {W : MorphismProperty C} {L : Cᵒᵖ ⥤ D} (h : W.op.IsInverte
   infer_instance
 #align category_theory.morphism_property.is_inverted_by.right_op CategoryTheory.MorphismProperty.IsInvertedBy.rightOp
 
+/- warning: category_theory.morphism_property.is_inverted_by.left_op -> CategoryTheory.MorphismProperty.IsInvertedBy.leftOp is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) (CategoryTheory.Functor.leftOp.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) W L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) D _inst_2 (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) (CategoryTheory.Functor.leftOp.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.left_op CategoryTheory.MorphismProperty.IsInvertedBy.leftOpₓ'. -/
 theorem leftOp {W : MorphismProperty C} {L : C ⥤ Dᵒᵖ} (h : W.IsInvertedBy L) :
     W.op.IsInvertedBy L.leftOp := fun X Y f hf =>
   by
@@ -330,6 +448,12 @@ theorem leftOp {W : MorphismProperty C} {L : C ⥤ Dᵒᵖ} (h : W.IsInvertedBy
   infer_instance
 #align category_theory.morphism_property.is_inverted_by.left_op CategoryTheory.MorphismProperty.IsInvertedBy.leftOp
 
+/- warning: category_theory.morphism_property.is_inverted_by.unop -> CategoryTheory.MorphismProperty.IsInvertedBy.unop is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1} {L : CategoryTheory.Functor.{u1, u4, u2, u3} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (Opposite.{succ u3} D) (CategoryTheory.Category.opposite.{u4, u3} D _inst_2) (CategoryTheory.MorphismProperty.op.{u1, u2} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W (CategoryTheory.Functor.unop.{u1, u4, u2, u3} C _inst_1 D _inst_2 L))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1} {L : CategoryTheory.Functor.{u3, u2, u4, u1} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2)}, (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} (Opposite.{succ u4} C) (CategoryTheory.Category.opposite.{u3, u4} C _inst_1) (Opposite.{succ u1} D) (CategoryTheory.Category.opposite.{u2, u1} D _inst_2) (CategoryTheory.MorphismProperty.op.{u3, u4} C _inst_1 W) L) -> (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W (CategoryTheory.Functor.unop.{u3, u2, u4, u1} C _inst_1 D _inst_2 L))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.unop CategoryTheory.MorphismProperty.IsInvertedBy.unopₓ'. -/
 theorem unop {W : MorphismProperty C} {L : Cᵒᵖ ⥤ Dᵒᵖ} (h : W.op.IsInvertedBy L) :
     W.IsInvertedBy L.unop := fun X Y f hf =>
   by
@@ -340,6 +464,12 @@ theorem unop {W : MorphismProperty C} {L : Cᵒᵖ ⥤ Dᵒᵖ} (h : W.op.IsInve
 
 end IsInvertedBy
 
+/- warning: category_theory.morphism_property.naturality_property -> CategoryTheory.MorphismProperty.naturalityProperty is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁ X) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂ X)) -> (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (Prefunctor.obj.{succ u1, succ u4, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁) X) (Prefunctor.obj.{succ u1, succ u4, u2, u3} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂) X)) -> (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.naturality_property CategoryTheory.MorphismProperty.naturalityPropertyₓ'. -/
 /-- Given `app : Π X, F₁.obj X ⟶ F₂.obj X` where `F₁` and `F₂` are two functors,
 this is the `morphism_property C` satisfied by the morphisms in `C` with respect
 to whom `app` is natural. -/
@@ -350,16 +480,28 @@ def naturalityProperty {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.o
 
 namespace NaturalityProperty
 
-theorem is_stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
+/- warning: category_theory.morphism_property.naturality_property.is_stable_under_composition -> CategoryTheory.MorphismProperty.naturalityProperty.stableUnderComposition is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁ X) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂ X)), CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u1, u2, u3, u4} C _inst_1 D _inst_2 F₁ F₂ app)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {F₁ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₁) X) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₂) X)), CategoryTheory.MorphismProperty.StableUnderComposition.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u3, u4, u1, u2} C _inst_1 D _inst_2 F₁ F₂ app)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.naturality_property.is_stable_under_composition CategoryTheory.MorphismProperty.naturalityProperty.stableUnderCompositionₓ'. -/
+theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderComposition := fun X Y Z f g hf hg =>
   by
   simp only [naturality_property] at hf hg⊢
   simp only [functor.map_comp, category.assoc, hg]
   slice_lhs 1 2 => rw [hf]
   rw [category.assoc]
-#align category_theory.morphism_property.naturality_property.is_stable_under_composition CategoryTheory.MorphismProperty.naturalityProperty.is_stableUnderComposition
-
-theorem is_stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
+#align category_theory.morphism_property.naturality_property.is_stable_under_composition CategoryTheory.MorphismProperty.naturalityProperty.stableUnderComposition
+
+/- warning: category_theory.morphism_property.naturality_property.is_stable_under_inverse -> CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverse is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u4, u3} D (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} D (CategoryTheory.Category.toCategoryStruct.{u4, u3} D _inst_2)) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₁ X) (CategoryTheory.Functor.obj.{u1, u4, u2, u3} C _inst_1 D _inst_2 F₂ X)), CategoryTheory.MorphismProperty.StableUnderInverse.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u1, u2, u3, u4} C _inst_1 D _inst_2 F₁ F₂ app)
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {F₁ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} (app : forall (X : C), Quiver.Hom.{succ u2, u1} D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₁) X) (Prefunctor.obj.{succ u3, succ u2, u4, u1} C (CategoryTheory.CategoryStruct.toQuiver.{u3, u4} C (CategoryTheory.Category.toCategoryStruct.{u3, u4} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u2, u1} D (CategoryTheory.Category.toCategoryStruct.{u2, u1} D _inst_2)) (CategoryTheory.Functor.toPrefunctor.{u3, u2, u4, u1} C _inst_1 D _inst_2 F₂) X)), CategoryTheory.MorphismProperty.StableUnderInverse.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.naturalityProperty.{u3, u4, u1, u2} C _inst_1 D _inst_2 F₁ F₂ app)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.naturality_property.is_stable_under_inverse CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverseₓ'. -/
+theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderInverse := fun X Y e he =>
   by
   simp only [naturality_property] at he⊢
@@ -367,10 +509,16 @@ theorem is_stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶
   slice_rhs 1 2 => rw [he]
   simp only [category.assoc, ← F₁.map_comp_assoc, ← F₂.map_comp, e.hom_inv_id, Functor.map_id,
     category.id_comp, category.comp_id]
-#align category_theory.morphism_property.naturality_property.is_stable_under_inverse CategoryTheory.MorphismProperty.naturalityProperty.is_stableUnderInverse
+#align category_theory.morphism_property.naturality_property.is_stable_under_inverse CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverse
 
 end NaturalityProperty
 
+/- warning: category_theory.morphism_property.respects_iso.inverse_image -> CategoryTheory.MorphismProperty.RespectsIso.inverseImage is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {P : CategoryTheory.MorphismProperty.{u4, u3} D _inst_2}, (CategoryTheory.MorphismProperty.RespectsIso.{u4, u3} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u1, u2, u3, u4} C _inst_1 D _inst_2 P F))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {P : CategoryTheory.MorphismProperty.{u2, u1} D _inst_2}, (CategoryTheory.MorphismProperty.RespectsIso.{u2, u1} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.RespectsIso.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u3, u4, u1, u2} C _inst_1 D _inst_2 P F))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.respects_iso.inverse_image CategoryTheory.MorphismProperty.RespectsIso.inverseImageₓ'. -/
 theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F : C ⥤ D) :
     RespectsIso (P.inverseImage F) := by
   constructor
@@ -381,6 +529,12 @@ theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F
   exacts[h.1 (F.map_iso e) (F.map f) hf, h.2 (F.map_iso e) (F.map f) hf]
 #align category_theory.morphism_property.respects_iso.inverse_image CategoryTheory.MorphismProperty.RespectsIso.inverseImage
 
+/- warning: category_theory.morphism_property.stable_under_composition.inverse_image -> CategoryTheory.MorphismProperty.StableUnderComposition.inverseImage is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] {P : CategoryTheory.MorphismProperty.{u4, u3} D _inst_2}, (CategoryTheory.MorphismProperty.StableUnderComposition.{u4, u3} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u1, u2, u3, u4} C _inst_1 D _inst_2 P F))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] {P : CategoryTheory.MorphismProperty.{u2, u1} D _inst_2}, (CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u1} D _inst_2 P) -> (forall (F : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2), CategoryTheory.MorphismProperty.StableUnderComposition.{u3, u4} C _inst_1 (CategoryTheory.MorphismProperty.inverseImage.{u3, u4, u1, u2} C _inst_1 D _inst_2 P F))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.stable_under_composition.inverse_image CategoryTheory.MorphismProperty.StableUnderComposition.inverseImageₓ'. -/
 theorem StableUnderComposition.inverseImage {P : MorphismProperty D} (h : StableUnderComposition P)
     (F : C ⥤ D) : StableUnderComposition (P.inverseImage F) := fun X Y Z f g hf hg => by
   simpa only [← F.map_comp] using h (F.map f) (F.map g) hf hg
@@ -388,48 +542,67 @@ theorem StableUnderComposition.inverseImage {P : MorphismProperty D} (h : Stable
 
 variable (C)
 
+#print CategoryTheory.MorphismProperty.isomorphisms /-
 /-- The `morphism_property C` satisfied by isomorphisms in `C`. -/
 def isomorphisms : MorphismProperty C := fun X Y f => IsIso f
 #align category_theory.morphism_property.isomorphisms CategoryTheory.MorphismProperty.isomorphisms
+-/
 
+#print CategoryTheory.MorphismProperty.monomorphisms /-
 /-- The `morphism_property C` satisfied by monomorphisms in `C`. -/
 def monomorphisms : MorphismProperty C := fun X Y f => Mono f
 #align category_theory.morphism_property.monomorphisms CategoryTheory.MorphismProperty.monomorphisms
+-/
 
+#print CategoryTheory.MorphismProperty.epimorphisms /-
 /-- The `morphism_property C` satisfied by epimorphisms in `C`. -/
 def epimorphisms : MorphismProperty C := fun X Y f => Epi f
 #align category_theory.morphism_property.epimorphisms CategoryTheory.MorphismProperty.epimorphisms
+-/
 
 section
 
 variable {C} {X Y : C} (f : X ⟶ Y)
 
+#print CategoryTheory.MorphismProperty.isomorphisms.iff /-
 @[simp]
 theorem isomorphisms.iff : (isomorphisms C) f ↔ IsIso f := by rfl
 #align category_theory.morphism_property.isomorphisms.iff CategoryTheory.MorphismProperty.isomorphisms.iff
+-/
 
+#print CategoryTheory.MorphismProperty.monomorphisms.iff /-
 @[simp]
 theorem monomorphisms.iff : (monomorphisms C) f ↔ Mono f := by rfl
 #align category_theory.morphism_property.monomorphisms.iff CategoryTheory.MorphismProperty.monomorphisms.iff
+-/
 
+#print CategoryTheory.MorphismProperty.epimorphisms.iff /-
 @[simp]
 theorem epimorphisms.iff : (epimorphisms C) f ↔ Epi f := by rfl
 #align category_theory.morphism_property.epimorphisms.iff CategoryTheory.MorphismProperty.epimorphisms.iff
+-/
 
+#print CategoryTheory.MorphismProperty.isomorphisms.infer_property /-
 theorem isomorphisms.infer_property [hf : IsIso f] : (isomorphisms C) f :=
   hf
 #align category_theory.morphism_property.isomorphisms.infer_property CategoryTheory.MorphismProperty.isomorphisms.infer_property
+-/
 
+#print CategoryTheory.MorphismProperty.monomorphisms.infer_property /-
 theorem monomorphisms.infer_property [hf : Mono f] : (monomorphisms C) f :=
   hf
 #align category_theory.morphism_property.monomorphisms.infer_property CategoryTheory.MorphismProperty.monomorphisms.infer_property
+-/
 
+#print CategoryTheory.MorphismProperty.epimorphisms.infer_property /-
 theorem epimorphisms.infer_property [hf : Epi f] : (epimorphisms C) f :=
   hf
 #align category_theory.morphism_property.epimorphisms.infer_property CategoryTheory.MorphismProperty.epimorphisms.infer_property
+-/
 
 end
 
+#print CategoryTheory.MorphismProperty.RespectsIso.monomorphisms /-
 theorem RespectsIso.monomorphisms : RespectsIso (monomorphisms C) := by
   constructor <;>
     · intro X Y Z e f
@@ -437,7 +610,9 @@ theorem RespectsIso.monomorphisms : RespectsIso (monomorphisms C) := by
       intro
       apply mono_comp
 #align category_theory.morphism_property.respects_iso.monomorphisms CategoryTheory.MorphismProperty.RespectsIso.monomorphisms
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.epimorphisms /-
 theorem RespectsIso.epimorphisms : RespectsIso (epimorphisms C) := by
   constructor <;>
     · intro X Y Z e f
@@ -445,7 +620,9 @@ theorem RespectsIso.epimorphisms : RespectsIso (epimorphisms C) := by
       intro
       apply epi_comp
 #align category_theory.morphism_property.respects_iso.epimorphisms CategoryTheory.MorphismProperty.RespectsIso.epimorphisms
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.isomorphisms /-
 theorem RespectsIso.isomorphisms : RespectsIso (isomorphisms C) := by
   constructor <;>
     · intro X Y Z e f
@@ -453,7 +630,9 @@ theorem RespectsIso.isomorphisms : RespectsIso (isomorphisms C) := by
       intro
       infer_instance
 #align category_theory.morphism_property.respects_iso.isomorphisms CategoryTheory.MorphismProperty.RespectsIso.isomorphisms
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.isomorphisms /-
 theorem StableUnderComposition.isomorphisms : StableUnderComposition (isomorphisms C) :=
   fun X Y Z f g hf hg => by
   rw [isomorphisms.iff] at hf hg⊢
@@ -461,7 +640,9 @@ theorem StableUnderComposition.isomorphisms : StableUnderComposition (isomorphis
   haveI := hg
   infer_instance
 #align category_theory.morphism_property.stable_under_composition.isomorphisms CategoryTheory.MorphismProperty.StableUnderComposition.isomorphisms
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.monomorphisms /-
 theorem StableUnderComposition.monomorphisms : StableUnderComposition (monomorphisms C) :=
   fun X Y Z f g hf hg => by
   rw [monomorphisms.iff] at hf hg⊢
@@ -469,7 +650,9 @@ theorem StableUnderComposition.monomorphisms : StableUnderComposition (monomorph
   haveI := hg
   apply mono_comp
 #align category_theory.morphism_property.stable_under_composition.monomorphisms CategoryTheory.MorphismProperty.StableUnderComposition.monomorphisms
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.epimorphisms /-
 theorem StableUnderComposition.epimorphisms : StableUnderComposition (epimorphisms C) :=
   fun X Y Z f g hf hg => by
   rw [epimorphisms.iff] at hf hg⊢
@@ -477,21 +660,32 @@ theorem StableUnderComposition.epimorphisms : StableUnderComposition (epimorphis
   haveI := hg
   apply epi_comp
 #align category_theory.morphism_property.stable_under_composition.epimorphisms CategoryTheory.MorphismProperty.StableUnderComposition.epimorphisms
+-/
 
 variable {C}
 
+#print CategoryTheory.MorphismProperty.FunctorsInverting /-
 /-- The full subcategory of `C ⥤ D` consisting of functors inverting morphisms in `W` -/
 @[nolint has_nonempty_instance]
 def FunctorsInverting (W : MorphismProperty C) (D : Type _) [Category D] :=
   FullSubcategory fun F : C ⥤ D => W.IsInvertedBy F deriving Category
 #align category_theory.morphism_property.functors_inverting CategoryTheory.MorphismProperty.FunctorsInverting
+-/
 
+#print CategoryTheory.MorphismProperty.FunctorsInverting.mk /-
 /-- A constructor for `W.functors_inverting D` -/
 def FunctorsInverting.mk {W : MorphismProperty C} {D : Type _} [Category D] (F : C ⥤ D)
     (hF : W.IsInvertedBy F) : W.FunctorsInverting D :=
   ⟨F, hF⟩
 #align category_theory.morphism_property.functors_inverting.mk CategoryTheory.MorphismProperty.FunctorsInverting.mk
+-/
 
+/- warning: category_theory.morphism_property.is_inverted_by.iff_of_iso -> CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_iso is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] {D : Type.{u3}} [_inst_2 : CategoryTheory.Category.{u4, u3} D] (W : CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) {F₁ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2}, (CategoryTheory.Iso.{max u2 u4, max u1 u4 u2 u3} (CategoryTheory.Functor.{u1, u4, u2, u3} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u1, u4, u2, u3} C _inst_1 D _inst_2) F₁ F₂) -> (Iff (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W F₁) (CategoryTheory.MorphismProperty.IsInvertedBy.{u1, u2, u3, u4} C _inst_1 D _inst_2 W F₂))
+but is expected to have type
+  forall {C : Type.{u4}} [_inst_1 : CategoryTheory.Category.{u3, u4} C] {D : Type.{u1}} [_inst_2 : CategoryTheory.Category.{u2, u1} D] (W : CategoryTheory.MorphismProperty.{u3, u4} C _inst_1) {F₁ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2} {F₂ : CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2}, (CategoryTheory.Iso.{max u4 u2, max (max (max u4 u3) u1) u2} (CategoryTheory.Functor.{u3, u2, u4, u1} C _inst_1 D _inst_2) (CategoryTheory.Functor.category.{u3, u2, u4, u1} C _inst_1 D _inst_2) F₁ F₂) -> (Iff (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W F₁) (CategoryTheory.MorphismProperty.IsInvertedBy.{u3, u4, u1, u2} C _inst_1 D _inst_2 W F₂))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.is_inverted_by.iff_of_iso CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_isoₓ'. -/
 theorem IsInvertedBy.iff_of_iso (W : MorphismProperty C) {F₁ F₂ : C ⥤ D} (e : F₁ ≅ F₂) :
     W.IsInvertedBy F₁ ↔ W.IsInvertedBy F₂ :=
   by
@@ -512,15 +706,20 @@ section Diagonal
 
 variable [HasPullbacks C] {P : MorphismProperty C}
 
+#print CategoryTheory.MorphismProperty.diagonal /-
 /-- For `P : morphism_property C`, `P.diagonal` is a morphism property that holds for `f : X ⟶ Y`
 whenever `P` holds for `X ⟶ Y xₓ Y`. -/
 def diagonal (P : MorphismProperty C) : MorphismProperty C := fun X Y f => P (pullback.diagonal f)
 #align category_theory.morphism_property.diagonal CategoryTheory.MorphismProperty.diagonal
+-/
 
+#print CategoryTheory.MorphismProperty.diagonal_iff /-
 theorem diagonal_iff {X Y : C} {f : X ⟶ Y} : P.diagonal f ↔ P (pullback.diagonal f) :=
   Iff.rfl
 #align category_theory.morphism_property.diagonal_iff CategoryTheory.MorphismProperty.diagonal_iff
+-/
 
+#print CategoryTheory.MorphismProperty.RespectsIso.diagonal /-
 theorem RespectsIso.diagonal (hP : P.RespectsIso) : P.diagonal.RespectsIso :=
   by
   constructor
@@ -532,7 +731,9 @@ theorem RespectsIso.diagonal (hP : P.RespectsIso) : P.diagonal.RespectsIso :=
     delta diagonal
     rwa [pullback.diagonal_comp, hP.cancel_right_is_iso]
 #align category_theory.morphism_property.respects_iso.diagonal CategoryTheory.MorphismProperty.RespectsIso.diagonal
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.diagonal /-
 theorem StableUnderComposition.diagonal (hP : StableUnderComposition P) (hP' : RespectsIso P)
     (hP'' : StableUnderBaseChange P) : P.diagonal.StableUnderComposition :=
   by
@@ -543,7 +744,9 @@ theorem StableUnderComposition.diagonal (hP : StableUnderComposition P) (hP' : R
   apply hP''.snd
   assumption
 #align category_theory.morphism_property.stable_under_composition.diagonal CategoryTheory.MorphismProperty.StableUnderComposition.diagonal
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.diagonal /-
 theorem StableUnderBaseChange.diagonal (hP : StableUnderBaseChange P) (hP' : RespectsIso P) :
     P.diagonal.StableUnderBaseChange :=
   StableUnderBaseChange.mk hP'.diagonal
@@ -552,16 +755,20 @@ theorem StableUnderBaseChange.diagonal (hP : StableUnderBaseChange P) (hP' : Res
       rw [diagonal_iff, diagonal_pullback_fst, hP'.cancel_left_is_iso, hP'.cancel_right_is_iso]
       convert hP.base_change_map f _ _ <;> simp <;> assumption)
 #align category_theory.morphism_property.stable_under_base_change.diagonal CategoryTheory.MorphismProperty.StableUnderBaseChange.diagonal
+-/
 
 end Diagonal
 
 section Universally
 
+#print CategoryTheory.MorphismProperty.universally /-
 /-- `P.universally` holds for a morphism `f : X ⟶ Y` iff `P` holds for all `X ×[Y] Y' ⟶ Y'`. -/
 def universally (P : MorphismProperty C) : MorphismProperty C := fun X Y f =>
   ∀ ⦃X' Y' : C⦄ (i₁ : X' ⟶ X) (i₂ : Y' ⟶ Y) (f' : X' ⟶ Y') (h : IsPullback f' i₁ i₂ f), P f'
 #align category_theory.morphism_property.universally CategoryTheory.MorphismProperty.universally
+-/
 
+#print CategoryTheory.MorphismProperty.universally_respectsIso /-
 theorem universally_respectsIso (P : MorphismProperty C) : P.universally.RespectsIso :=
   by
   constructor
@@ -579,12 +786,16 @@ theorem universally_respectsIso (P : MorphismProperty C) : P.universally.Respect
     rw [category.assoc, iso.hom_inv_id, category.comp_id, category.comp_id] at this
     exact hf _ _ _ this
 #align category_theory.morphism_property.universally_respects_iso CategoryTheory.MorphismProperty.universally_respectsIso
+-/
 
+#print CategoryTheory.MorphismProperty.universally_stableUnderBaseChange /-
 theorem universally_stableUnderBaseChange (P : MorphismProperty C) :
     P.universally.StableUnderBaseChange := fun X Y Y' S f g f' g' H h₁ Y'' X'' i₁ i₂ f'' H' =>
   h₁ _ _ _ (H'.paste_vert H.flip)
 #align category_theory.morphism_property.universally_stable_under_base_change CategoryTheory.MorphismProperty.universally_stableUnderBaseChange
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderComposition.universally /-
 theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismProperty C}
     (hP : P.StableUnderComposition) : P.universally.StableUnderComposition :=
   by
@@ -594,21 +805,28 @@ theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismPropert
   apply hP _ _ _ (hg _ _ _ <| is_pullback.of_has_pullback _ _)
   exact hf _ _ _ (H.of_right (pullback.lift_snd _ _ _) (is_pullback.of_has_pullback i₂ g))
 #align category_theory.morphism_property.stable_under_composition.universally CategoryTheory.MorphismProperty.StableUnderComposition.universally
+-/
 
+#print CategoryTheory.MorphismProperty.universally_le /-
 theorem universally_le (P : MorphismProperty C) : P.universally ≤ P :=
   by
   intro X Y f hf
   exact hf (𝟙 _) (𝟙 _) _ (is_pullback.of_vert_is_iso ⟨by rw [category.comp_id, category.id_comp]⟩)
 #align category_theory.morphism_property.universally_le CategoryTheory.MorphismProperty.universally_le
+-/
 
+#print CategoryTheory.MorphismProperty.StableUnderBaseChange.universally_eq /-
 theorem StableUnderBaseChange.universally_eq {P : MorphismProperty C}
     (hP : P.StableUnderBaseChange) : P.universally = P :=
   P.universally_le.antisymm fun X Y f hf X' Y' i₁ i₂ f' H => hP H.flip hf
 #align category_theory.morphism_property.stable_under_base_change.universally_eq CategoryTheory.MorphismProperty.StableUnderBaseChange.universally_eq
+-/
 
+#print CategoryTheory.MorphismProperty.universally_mono /-
 theorem universally_mono : Monotone (universally : MorphismProperty C → MorphismProperty C) :=
   fun P₁ P₂ h X Y f h₁ X' Y' i₁ i₂ f' H => h _ _ _ (h₁ _ _ _ H)
 #align category_theory.morphism_property.universally_mono CategoryTheory.MorphismProperty.universally_mono
+-/
 
 end Universally
 
@@ -622,23 +840,41 @@ attribute [local instance] concrete_category.has_coe_to_fun concrete_category.ha
 
 variable (C)
 
+#print CategoryTheory.MorphismProperty.injective /-
 /-- Injectiveness (in a concrete category) as a `morphism_property` -/
 protected def injective : MorphismProperty C := fun X Y f => Injective f
 #align category_theory.morphism_property.injective CategoryTheory.MorphismProperty.injective
+-/
 
+#print CategoryTheory.MorphismProperty.surjective /-
 /-- Surjectiveness (in a concrete category) as a `morphism_property` -/
 protected def surjective : MorphismProperty C := fun X Y f => Surjective f
 #align category_theory.morphism_property.surjective CategoryTheory.MorphismProperty.surjective
+-/
 
+#print CategoryTheory.MorphismProperty.bijective /-
 /-- Bijectiveness (in a concrete category) as a `morphism_property` -/
 protected def bijective : MorphismProperty C := fun X Y f => Bijective f
 #align category_theory.morphism_property.bijective CategoryTheory.MorphismProperty.bijective
+-/
 
+/- warning: category_theory.morphism_property.bijective_eq_sup -> CategoryTheory.MorphismProperty.bijective_eq_sup is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], Eq.{max (succ u2) (succ u1)} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.MorphismProperty.bijective.{u1, u2, u3} C _inst_1 _inst_3) (Inf.inf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (SemilatticeInf.toHasInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (Lattice.toSemilatticeInf.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CompleteLattice.toLattice.{max u2 u1} (CategoryTheory.MorphismProperty.{u1, u2} C _inst_1) (CategoryTheory.MorphismProperty.completeLattice.{u1, u2} C _inst_1)))) (CategoryTheory.MorphismProperty.injective.{u1, u2, u3} C _inst_1 _inst_3) (CategoryTheory.MorphismProperty.surjective.{u1, u2, u3} C _inst_1 _inst_3))
+but is expected to have type
+  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], Eq.{max (succ u3) (succ u2)} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (CategoryTheory.MorphismProperty.bijective.{u2, u3, u1} C _inst_1 _inst_3) (Inf.inf.{max u3 u2} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (Lattice.toInf.{max u3 u2} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (CompleteLattice.toLattice.{max u3 u2} (CategoryTheory.MorphismProperty.{u2, u3} C _inst_1) (CategoryTheory.instCompleteLatticeMorphismProperty.{u2, u3} C _inst_1))) (CategoryTheory.MorphismProperty.injective.{u2, u3, u1} C _inst_1 _inst_3) (CategoryTheory.MorphismProperty.surjective.{u2, u3, u1} C _inst_1 _inst_3))
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.bijective_eq_sup CategoryTheory.MorphismProperty.bijective_eq_supₓ'. -/
 theorem bijective_eq_sup :
     MorphismProperty.bijective C = MorphismProperty.injective C ⊓ MorphismProperty.surjective C :=
   rfl
 #align category_theory.morphism_property.bijective_eq_sup CategoryTheory.MorphismProperty.bijective_eq_sup
 
+/- warning: category_theory.morphism_property.injective_stable_under_composition -> CategoryTheory.MorphismProperty.injective_stableUnderComposition is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u1, u2, u3} C _inst_1 _inst_3)
+but is expected to have type
+  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u2, u3, u1} C _inst_1 _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.injective_stable_under_composition CategoryTheory.MorphismProperty.injective_stableUnderCompositionₓ'. -/
 theorem injective_stableUnderComposition : (MorphismProperty.injective C).StableUnderComposition :=
   fun X Y Z f g hf hg => by
   delta morphism_property.injective
@@ -646,6 +882,12 @@ theorem injective_stableUnderComposition : (MorphismProperty.injective C).Stable
   exact hg.comp hf
 #align category_theory.morphism_property.injective_stable_under_composition CategoryTheory.MorphismProperty.injective_stableUnderComposition
 
+/- warning: category_theory.morphism_property.surjective_stable_under_composition -> CategoryTheory.MorphismProperty.surjective_stableUnderComposition is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u1, u2, u3} C _inst_1 _inst_3)
+but is expected to have type
+  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u2, u3, u1} C _inst_1 _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.surjective_stable_under_composition CategoryTheory.MorphismProperty.surjective_stableUnderCompositionₓ'. -/
 theorem surjective_stableUnderComposition :
     (MorphismProperty.surjective C).StableUnderComposition := fun X Y Z f g hf hg =>
   by
@@ -654,6 +896,12 @@ theorem surjective_stableUnderComposition :
   exact hg.comp hf
 #align category_theory.morphism_property.surjective_stable_under_composition CategoryTheory.MorphismProperty.surjective_stableUnderComposition
 
+/- warning: category_theory.morphism_property.bijective_stable_under_composition -> CategoryTheory.MorphismProperty.bijective_stableUnderComposition is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u1, u2, u3} C _inst_1 _inst_3)
+but is expected to have type
+  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.StableUnderComposition.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u2, u3, u1} C _inst_1 _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.bijective_stable_under_composition CategoryTheory.MorphismProperty.bijective_stableUnderCompositionₓ'. -/
 theorem bijective_stableUnderComposition : (MorphismProperty.bijective C).StableUnderComposition :=
   fun X Y Z f g hf hg => by
   delta morphism_property.bijective
@@ -661,16 +909,34 @@ theorem bijective_stableUnderComposition : (MorphismProperty.bijective C).Stable
   exact hg.comp hf
 #align category_theory.morphism_property.bijective_stable_under_composition CategoryTheory.MorphismProperty.bijective_stableUnderComposition
 
+/- warning: category_theory.morphism_property.injective_respects_iso -> CategoryTheory.MorphismProperty.injective_respectsIso is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u1, u2, u3} C _inst_1 _inst_3)
+but is expected to have type
+  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.injective.{u2, u3, u1} C _inst_1 _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.injective_respects_iso CategoryTheory.MorphismProperty.injective_respectsIsoₓ'. -/
 theorem injective_respectsIso : (MorphismProperty.injective C).RespectsIso :=
   (injective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Injective
 #align category_theory.morphism_property.injective_respects_iso CategoryTheory.MorphismProperty.injective_respectsIso
 
+/- warning: category_theory.morphism_property.surjective_respects_iso -> CategoryTheory.MorphismProperty.surjective_respectsIso is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u1, u2, u3} C _inst_1 _inst_3)
+but is expected to have type
+  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.surjective.{u2, u3, u1} C _inst_1 _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.surjective_respects_iso CategoryTheory.MorphismProperty.surjective_respectsIsoₓ'. -/
 theorem surjective_respectsIso : (MorphismProperty.surjective C).RespectsIso :=
   (surjective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Surjective
 #align category_theory.morphism_property.surjective_respects_iso CategoryTheory.MorphismProperty.surjective_respectsIso
 
+/- warning: category_theory.morphism_property.bijective_respects_iso -> CategoryTheory.MorphismProperty.bijective_respectsIso is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u3, u1, u2} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u1, u2} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u1, u2, u3} C _inst_1 _inst_3)
+but is expected to have type
+  forall (C : Type.{u3}) [_inst_1 : CategoryTheory.Category.{u2, u3} C] [_inst_3 : CategoryTheory.ConcreteCategory.{u1, u2, u3} C _inst_1], CategoryTheory.MorphismProperty.RespectsIso.{u2, u3} C _inst_1 (CategoryTheory.MorphismProperty.bijective.{u2, u3, u1} C _inst_1 _inst_3)
+Case conversion may be inaccurate. Consider using '#align category_theory.morphism_property.bijective_respects_iso CategoryTheory.MorphismProperty.bijective_respectsIsoₓ'. -/
 theorem bijective_respectsIso : (MorphismProperty.bijective C).RespectsIso :=
   (bijective_stableUnderComposition C).RespectsIso fun X Y e =>
     ((forget C).mapIso e).toEquiv.Bijective
Diff
@@ -197,13 +197,13 @@ theorem StableUnderBaseChange.respectsIso {P : MorphismProperty C} (hP : StableU
 theorem StableUnderBaseChange.fst {P : MorphismProperty C} (hP : StableUnderBaseChange P)
     {X Y S : C} (f : X ⟶ S) (g : Y ⟶ S) [HasPullback f g] (H : P g) :
     P (pullback.fst : pullback f g ⟶ X) :=
-  hP (IsPullback.ofHasPullback f g).flip H
+  hP (IsPullback.of_hasPullback f g).flip H
 #align category_theory.morphism_property.stable_under_base_change.fst CategoryTheory.MorphismProperty.StableUnderBaseChange.fst
 
 theorem StableUnderBaseChange.snd {P : MorphismProperty C} (hP : StableUnderBaseChange P)
     {X Y S : C} (f : X ⟶ S) (g : Y ⟶ S) [HasPullback f g] (H : P f) :
     P (pullback.snd : pullback f g ⟶ Y) :=
-  hP (IsPullback.ofHasPullback f g) H
+  hP (IsPullback.of_hasPullback f g) H
 #align category_theory.morphism_property.stable_under_base_change.snd CategoryTheory.MorphismProperty.StableUnderBaseChange.snd
 
 theorem StableUnderBaseChange.baseChange_obj [HasPullbacks C] {P : MorphismProperty C}
@@ -258,19 +258,19 @@ theorem StableUnderCobaseChange.mk {P : MorphismProperty C} [HasPushouts C] (hP
 
 theorem StableUnderCobaseChange.respectsIso {P : MorphismProperty C}
     (hP : StableUnderCobaseChange P) : RespectsIso P :=
-  RespectsIso.of_respects_arrow_iso _ fun f g e => hP (IsPushout.ofHorizIsIso (CommSq.mk e.Hom.w))
+  RespectsIso.of_respects_arrow_iso _ fun f g e => hP (IsPushout.of_horiz_isIso (CommSq.mk e.Hom.w))
 #align category_theory.morphism_property.stable_under_cobase_change.respects_iso CategoryTheory.MorphismProperty.StableUnderCobaseChange.respectsIso
 
 theorem StableUnderCobaseChange.inl {P : MorphismProperty C} (hP : StableUnderCobaseChange P)
     {A B A' : C} (f : A ⟶ A') (g : A ⟶ B) [HasPushout f g] (H : P g) :
     P (pushout.inl : A' ⟶ pushout f g) :=
-  hP (IsPushout.ofHasPushout f g) H
+  hP (IsPushout.of_hasPushout f g) H
 #align category_theory.morphism_property.stable_under_cobase_change.inl CategoryTheory.MorphismProperty.StableUnderCobaseChange.inl
 
 theorem StableUnderCobaseChange.inr {P : MorphismProperty C} (hP : StableUnderCobaseChange P)
     {A B A' : C} (f : A ⟶ A') (g : A ⟶ B) [HasPushout f g] (H : P f) :
     P (pushout.inr : B ⟶ pushout f g) :=
-  hP (IsPushout.ofHasPushout f g).flip H
+  hP (IsPushout.of_hasPushout f g).flip H
 #align category_theory.morphism_property.stable_under_cobase_change.inr CategoryTheory.MorphismProperty.StableUnderCobaseChange.inr
 
 theorem StableUnderCobaseChange.op {P : MorphismProperty C} (hP : StableUnderCobaseChange P) :
@@ -582,7 +582,7 @@ theorem universally_respectsIso (P : MorphismProperty C) : P.universally.Respect
 
 theorem universally_stableUnderBaseChange (P : MorphismProperty C) :
     P.universally.StableUnderBaseChange := fun X Y Y' S f g f' g' H h₁ Y'' X'' i₁ i₂ f'' H' =>
-  h₁ _ _ _ (H'.pasteVert H.flip)
+  h₁ _ _ _ (H'.paste_vert H.flip)
 #align category_theory.morphism_property.universally_stable_under_base_change CategoryTheory.MorphismProperty.universally_stableUnderBaseChange
 
 theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismProperty C}

Changes in mathlib4

mathlib3
mathlib4
feat(CategoryTheory): morphism properties that have the two-out-of-three property (#12460)

The type class MorphismProperty.HasTwoOutOfThreeProperty is introduced. The structure StableUnderComposition is also changed into a type class IsStableUnderComposition.

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

Diff
@@ -98,6 +98,10 @@ def inverseImage (P : MorphismProperty D) (F : C ⥤ D) : MorphismProperty C :=
   P (F.map f)
 #align category_theory.morphism_property.inverse_image CategoryTheory.MorphismProperty.inverseImage
 
+@[simp]
+lemma inverseImage_iff (P : MorphismProperty D) (F : C ⥤ D) {X Y : C} (f : X ⟶ Y) :
+    P.inverseImage F f ↔ P (F.map f) := by rfl
+
 /-- The image (up to isomorphisms) of a `MorphismProperty C` by a functor `C ⥤ D` -/
 def map (P : MorphismProperty C) (F : C ⥤ D) : MorphismProperty D := fun _ _ f =>
   ∃ (X' Y' : C)  (f' : X' ⟶ Y') (_ : P f'), Nonempty (Arrow.mk (F.map f') ≅ Arrow.mk f)
chore: split CategoryTheory.MorphismProperty (#12393)

The file CategoryTheory.MorphismProperty is split into five files Basic, Composition, Limits, Concrete, IsInvertedBy.

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
@@ -539,7 +539,7 @@ theorem StableUnderComposition.epimorphisms : StableUnderComposition (epimorphis
 variable {C}
 
 
--- porting note (#10927): removed @[nolint has_nonempty_instance]
+-- porting note (#5171): removed @[nolint has_nonempty_instance]
 /-- The full subcategory of `C ⥤ D` consisting of functors inverting morphisms in `W` -/
 def FunctorsInverting (W : MorphismProperty C) (D : Type*) [Category D] :=
   FullSubcategory fun F : C ⥤ D => W.IsInvertedBy F
chore(CategoryTheory): move Full, Faithful, EssSurj, IsEquivalence and ReflectsIsomorphisms to the Functor namespace (#11985)

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

Diff
@@ -592,7 +592,7 @@ lemma IsInvertedBy.isoClosure_iff (W : MorphismProperty C) (F : C ⥤ D) :
 
 @[simp]
 lemma IsInvertedBy.iff_comp {C₁ C₂ C₃ : Type*} [Category C₁] [Category C₂] [Category C₃]
-    (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (G : C₂ ⥤ C₃) [ReflectsIsomorphisms G] :
+    (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (G : C₂ ⥤ C₃) [G.ReflectsIsomorphisms] :
     W.IsInvertedBy (F ⋙ G) ↔ W.IsInvertedBy F := by
   constructor
   · intro h X Y f hf
@@ -700,13 +700,13 @@ lemma inverseImage_equivalence_functor_eq_map_inverse
   inverseImage_equivalence_inverse_eq_map_functor Q hQ E.symm
 
 lemma map_inverseImage_eq_of_isEquivalence
-    (P : MorphismProperty D) (hP : P.RespectsIso) (F : C ⥤ D) [IsEquivalence F] :
+    (P : MorphismProperty D) (hP : P.RespectsIso) (F : C ⥤ D) [F.IsEquivalence] :
     (P.inverseImage F).map F = P := by
   erw [P.inverseImage_equivalence_inverse_eq_map_functor hP F.asEquivalence, map_map,
     P.map_eq_of_iso F.asEquivalence.counitIso, map_id _ hP]
 
 lemma inverseImage_map_eq_of_isEquivalence
-    (P : MorphismProperty C) (hP : P.RespectsIso) (F : C ⥤ D) [IsEquivalence F] :
+    (P : MorphismProperty C) (hP : P.RespectsIso) (F : C ⥤ D) [F.IsEquivalence] :
     (P.map F).inverseImage F = P := by
   erw [((P.map F).inverseImage_equivalence_inverse_eq_map_functor
     (P.map_respectsIso F) (F.asEquivalence)), map_map,
chore: prepare Lean version bump with explicit simp (#10999)

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

Diff
@@ -282,7 +282,7 @@ theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismPrope
     pullbackRightPullbackFstIso Y.hom f g.left ≪≫
       pullback.congrHom (g.w.trans (Category.comp_id _)) rfl
   have : e.inv ≫ pullback.snd = ((baseChange f).map g).left := by
-    ext <;> dsimp <;> simp
+    ext <;> dsimp [e] <;> simp
   rw [← this, hP.respectsIso.cancel_left_isIso]
   exact hP.snd _ _ H
 #align category_theory.morphism_property.stable_under_base_change.base_change_map CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map
chore: classify removed @[nolint has_nonempty_instance] porting notes (#10929)

Classifies by adding issue number (#10927) to porting notes claiming removed @[nolint has_nonempty_instance].

Diff
@@ -539,7 +539,7 @@ theorem StableUnderComposition.epimorphisms : StableUnderComposition (epimorphis
 variable {C}
 
 
--- porting note: removed @[nolint has_nonempty_instance]
+-- porting note (#10927): removed @[nolint has_nonempty_instance]
 /-- The full subcategory of `C ⥤ D` consisting of functors inverting morphisms in `W` -/
 def FunctorsInverting (W : MorphismProperty C) (D : Type*) [Category D] :=
   FullSubcategory fun F : C ⥤ D => W.IsInvertedBy F
feat(Algebra/Homology): the class of quasi-isomorphisms in the homotopy category (#9686)

This PR introduces the class of quasi-isomorphisms in the homotopy category of homological complexes.

Diff
@@ -55,6 +55,12 @@ variable {C}
 
 namespace MorphismProperty
 
+@[ext]
+lemma ext (W W' : MorphismProperty C) (h : ∀ ⦃X Y : C⦄ (f : X ⟶ Y), W f ↔ W' f) :
+    W = W' := by
+  funext X Y f
+  rw [h]
+
 lemma top_apply {X Y : C} (f : X ⟶ Y) : (⊤ : MorphismProperty C) f := by
   simp only [top_eq]
 
feat(CategoryTheory/Localization): right resolutions (#10301)

Given a morphism of localizers Φ : LocalizerMorphism W₁ W₂ (i.e. W₁ and W₂ are morphism properties on categories C₁ and C₂, and we have a functorΦ.functor : C₁ ⥤ C₂ which sends morphisms in W₁ to morphisms in W₂), we introduce the notion of right resolutions of objects in C₂: if X₂ : C₂, a right resolution consists of an object X₁ : C₁ and a morphism w : X₂ ⟶ Φ.functor.obj X₁ that is in W₂. Then, the typeclass Φ.HasRightResolutions holds when any X₂ : C₂ has a right resolution. This shall be used in future works on derived functors.

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

Diff
@@ -1020,4 +1020,13 @@ end
 
 end MorphismProperty
 
+namespace NatTrans
+
+lemma isIso_app_iff_of_iso {F G : C ⥤ D} (α : F ⟶ G) {X Y : C} (e : X ≅ Y) :
+    IsIso (α.app X) ↔ IsIso (α.app Y) :=
+  MorphismProperty.RespectsIso.arrow_mk_iso_iff (MorphismProperty.RespectsIso.isomorphisms D)
+    (Arrow.isoMk (F.mapIso e) (G.mapIso e) (by simp))
+
+end NatTrans
+
 end CategoryTheory
feat(CategoryTheory): prerequisites for the existence of finite products in localized categories (#9702)

This PR contains various prerequisites in order to show that under suitable assumptions, a localized category of a category that has finite products also has finite products:

  • the equivalence of categories (J → C) ≌ (Discrete J ⥤ C)
  • more API for the existence of limits as a consequence of a right adjoint to the constant functor C ⥤ (J ⥤ C).
  • the typeclass MorphismProperty.IsStableUnderFiniteProducts
Diff
@@ -963,6 +963,61 @@ lemma IsInvertedBy.pi (F : ∀ j, C j ⥤ D j) (hF : ∀ j, (W j).IsInvertedBy (
 
 end
 
+section
+
+variable (W : MorphismProperty C)
+
+/-- The morphism property on `J ⥤ C` which is defined objectwise
+from `W : MorphismProperty C`. -/
+def functorCategory (J : Type*) [Category J] : MorphismProperty (J ⥤ C) :=
+  fun _ _ f => ∀ (j : J), W (f.app j)
+
+/-- The property that a morphism property `W` is stable under limits
+indexed by a category `J`. -/
+def IsStableUnderLimitsOfShape (J : Type*) [Category J] : Prop :=
+  ∀ (X₁ X₂ : J ⥤ C) (c₁ : Cone X₁) (c₂ : Cone X₂)
+    (_ : IsLimit c₁) (h₂ : IsLimit c₂) (f : X₁ ⟶ X₂) (_ : W.functorCategory J f),
+      W (h₂.lift (Cone.mk _ (c₁.π ≫ f)))
+
+variable {W}
+
+lemma IsStableUnderLimitsOfShape.lim_map {J : Type*} [Category J]
+    (hW : W.IsStableUnderLimitsOfShape J) {X Y : J ⥤ C}
+    (f : X ⟶ Y) [HasLimitsOfShape J C] (hf : W.functorCategory _ f) :
+    W (lim.map f) :=
+  hW X Y _ _ (limit.isLimit X) (limit.isLimit Y) f hf
+
+variable (W)
+
+/-- The property that a morphism property `W` is stable under products indexed by a type `J`. -/
+abbrev IsStableUnderProductsOfShape (J : Type*) := W.IsStableUnderLimitsOfShape (Discrete J)
+
+lemma IsStableUnderProductsOfShape.mk (J : Type*)
+    (hW₀ : W.RespectsIso) [HasProductsOfShape J C]
+    (hW : ∀ (X₁ X₂ : J → C) (f : ∀ j, X₁ j ⟶ X₂ j) (_ : ∀ (j : J), W (f j)),
+      W (Pi.map f)) : W.IsStableUnderProductsOfShape J := by
+  intro X₁ X₂ c₁ c₂ hc₁ hc₂ f hf
+  let φ := fun j => f.app (Discrete.mk j)
+  have hf' := hW _ _ φ (fun j => hf (Discrete.mk j))
+  refine' (hW₀.arrow_mk_iso_iff _).2 hf'
+  refine' Arrow.isoMk
+    (IsLimit.conePointUniqueUpToIso hc₁ (limit.isLimit X₁) ≪≫ (Pi.isoLimit _).symm)
+    (IsLimit.conePointUniqueUpToIso hc₂ (limit.isLimit X₂) ≪≫ (Pi.isoLimit _).symm) _
+  apply limit.hom_ext
+  rintro ⟨j⟩
+  simp
+
+/-- The condition that a property of morphisms is stable by finite products. -/
+class IsStableUnderFiniteProducts : Prop :=
+  isStableUnderProductsOfShape (J : Type) [Finite J] : W.IsStableUnderProductsOfShape J
+
+lemma isStableUnderProductsOfShape_of_isStableUnderFiniteProducts
+    (J : Type) [Finite J] [W.IsStableUnderFiniteProducts] :
+    W.IsStableUnderProductsOfShape J :=
+  IsStableUnderFiniteProducts.isStableUnderProductsOfShape J
+
+end
+
 end MorphismProperty
 
 end CategoryTheory
refactor: create folder CategoryTheory/Comma (#10108)
Diff
@@ -3,10 +3,10 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
-import Mathlib.CategoryTheory.Limits.Shapes.Diagonal
-import Mathlib.CategoryTheory.Arrow
-import Mathlib.CategoryTheory.Limits.Shapes.CommSq
+import Mathlib.CategoryTheory.Comma.Arrow
 import Mathlib.CategoryTheory.ConcreteCategory.Basic
+import Mathlib.CategoryTheory.Limits.Shapes.CommSq
+import Mathlib.CategoryTheory.Limits.Shapes.Diagonal
 
 #align_import category_theory.morphism_property from "leanprover-community/mathlib"@"7f963633766aaa3ebc8253100a5229dd463040c7"
 
refactor(*): abbreviation for non-dependent FunLike (#9833)

This follows up from #9785, which renamed FunLike to DFunLike, by introducing a new abbreviation FunLike F α β := DFunLike F α (fun _ => β), to make the non-dependent use of FunLike easier.

I searched for the pattern DFunLike.*fun and DFunLike.*λ in all files to replace expressions of the form DFunLike F α (fun _ => β) with FunLike F α β. I did this everywhere except for extends clauses for two reasons: it would conflict with #8386, and more importantly extends must directly refer to a structure with no unfolding of defs or abbrevs.

Diff
@@ -807,7 +807,7 @@ variable [ConcreteCategory C]
 
 open Function
 
-attribute [local instance] ConcreteCategory.instDFunLike ConcreteCategory.hasCoeToSort
+attribute [local instance] ConcreteCategory.instFunLike ConcreteCategory.hasCoeToSort
 
 variable (C)
 
chore(*): rename FunLike to DFunLike (#9785)

This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.

This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:

sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean     
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean

Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -807,7 +807,7 @@ variable [ConcreteCategory C]
 
 open Function
 
-attribute [local instance] ConcreteCategory.funLike ConcreteCategory.hasCoeToSort
+attribute [local instance] ConcreteCategory.instDFunLike ConcreteCategory.hasCoeToSort
 
 variable (C)
 
feat(CategoryTheory): more API for product categories (#8865)

This PR develops notions about product categories (natural isomorphisms, equivalences) in order to fill the prerequisites of PR #8864 about the localization of product categories.

Diff
@@ -27,7 +27,7 @@ The following meta-properties are defined
 -/
 
 
-universe v u
+universe w v v' u u'
 
 open CategoryTheory CategoryTheory.Limits Opposite
 
@@ -940,6 +940,29 @@ lemma IsInvertedBy.prod {W₁ : MorphismProperty C₁} {W₂ : MorphismProperty
 
 end
 
+section
+
+variable {J : Type w} {C : J → Type u} {D : J → Type u'}
+  [∀ j, Category.{v} (C j)] [∀ j, Category.{v'} (D j)]
+  (W : ∀ j, MorphismProperty (C j))
+
+/-- If `W j` are morphism properties on categories `C j` for all `j`, this is the
+induced morphism property on the category `∀ j, C j`. -/
+def pi : MorphismProperty (∀ j, C j) := fun _ _ f => ∀ j, (W j) (f j)
+
+instance Pi.containsIdentities [∀ j, (W j).ContainsIdentities] :
+    (pi W).ContainsIdentities :=
+  ⟨fun _ _ => MorphismProperty.id_mem _ _⟩
+
+lemma IsInvertedBy.pi (F : ∀ j, C j ⥤ D j) (hF : ∀ j, (W j).IsInvertedBy (F j)) :
+    (MorphismProperty.pi W).IsInvertedBy (Functor.pi F) := by
+  intro _ _ f hf
+  rw [isIso_pi_iff]
+  intro j
+  exact hF j _ (hf j)
+
+end
+
 end MorphismProperty
 
 end CategoryTheory
feat(CategoryTheory): the localized category of a product category (#8516)

This PR develops the API for cartesian products of categories (natural isomorphisms, equivalences, morphism properties) in order to show that under simple assumptions, the localized category of a product of two categories identifies to a product of the localized categories.

Diff
@@ -917,6 +917,29 @@ lemma of_unop (W : MorphismProperty Cᵒᵖ) [IsMultiplicative W.unop] : IsMulti
 
 end IsMultiplicative
 
+section
+
+variable {C₁ C₂ : Type*} [Category C₁] [Category C₂]
+
+/-- If `W₁` and `W₂` are morphism properties on two categories `C₁` and `C₂`,
+this is the induced morphism property on `C₁ × C₂`. -/
+def prod (W₁ : MorphismProperty C₁) (W₂ : MorphismProperty C₂) :
+    MorphismProperty (C₁ × C₂) :=
+  fun _ _ f => W₁ f.1 ∧ W₂ f.2
+
+instance Prod.containsIdentities (W₁ : MorphismProperty C₁) (W₂ : MorphismProperty C₂)
+    [W₁.ContainsIdentities] [W₂.ContainsIdentities] : (prod W₁ W₂).ContainsIdentities :=
+  ⟨fun _ => ⟨W₁.id_mem _, W₂.id_mem _⟩⟩
+
+lemma IsInvertedBy.prod {W₁ : MorphismProperty C₁} {W₂ : MorphismProperty C₂}
+    {E₁ E₂ : Type*} [Category E₁] [Category E₂] {F₁ : C₁ ⥤ E₁} {F₂ : C₂ ⥤ E₂}
+    (h₁ : W₁.IsInvertedBy F₁) (h₂ : W₂.IsInvertedBy F₂) :
+    (W₁.prod W₂).IsInvertedBy (F₁.prod F₂) := fun _ _ f hf => by
+  rw [isIso_prod_iff]
+  exact ⟨h₁ _ hf.1, h₂ _ hf.2⟩
+
+end
+
 end MorphismProperty
 
 end CategoryTheory
chore: only four spaces for subsequent lines (#7286)

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

Diff
@@ -872,7 +872,7 @@ class ContainsIdentities (W : MorphismProperty C) : Prop :=
   id_mem' : ∀ (X : C), W (𝟙 X)
 
 lemma id_mem (W : MorphismProperty C) [W.ContainsIdentities] (X : C) :
-  W (𝟙 X) := ContainsIdentities.id_mem' X
+    W (𝟙 X) := ContainsIdentities.id_mem' X
 
 namespace ContainsIdentities
 
feat(CategoryTheory): misc lemmas about morphism properties (#6887)

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

Diff
@@ -61,9 +61,20 @@ lemma top_apply {X Y : C} (f : X ⟶ Y) : (⊤ : MorphismProperty C) f := by
 instance : HasSubset (MorphismProperty C) :=
   ⟨fun P₁ P₂ => ∀ ⦃X Y : C⦄ (f : X ⟶ Y) (_ : P₁ f), P₂ f⟩
 
+instance : IsTrans (MorphismProperty C) (· ⊆ ·) :=
+  ⟨fun _ _ _ h₁₂ h₂₃ _ _ _ h => h₂₃ _ (h₁₂ _ h)⟩
+
 instance : Inter (MorphismProperty C) :=
   ⟨fun P₁ P₂ _ _ f => P₁ f ∧ P₂ f⟩
 
+lemma subset_iff_le (P Q : MorphismProperty C) : P ⊆ Q ↔ P ≤ Q := Iff.rfl
+
+instance : IsAntisymm (MorphismProperty C) (· ⊆ ·) :=
+  ⟨fun P Q => by simpa only [subset_iff_le] using le_antisymm⟩
+
+instance : IsRefl (MorphismProperty C) (· ⊆ ·) :=
+  ⟨fun P => by simpa only [subset_iff_le] using le_refl P⟩
+
 /-- The morphism property in `Cᵒᵖ` associated to a morphism property in `C` -/
 @[simp]
 def op (P : MorphismProperty C) : MorphismProperty Cᵒᵖ := fun _ _ f => P f.unop
@@ -87,6 +98,18 @@ def inverseImage (P : MorphismProperty D) (F : C ⥤ D) : MorphismProperty C :=
   P (F.map f)
 #align category_theory.morphism_property.inverse_image CategoryTheory.MorphismProperty.inverseImage
 
+/-- The image (up to isomorphisms) of a `MorphismProperty C` by a functor `C ⥤ D` -/
+def map (P : MorphismProperty C) (F : C ⥤ D) : MorphismProperty D := fun _ _ f =>
+  ∃ (X' Y' : C)  (f' : X' ⟶ Y') (_ : P f'), Nonempty (Arrow.mk (F.map f') ≅ Arrow.mk f)
+
+lemma map_mem_map (P : MorphismProperty C) (F : C ⥤ D) {X Y : C} (f : X ⟶ Y) (hf : P f) :
+    (P.map F) (F.map f) := ⟨X, Y, f, hf, ⟨Iso.refl _⟩⟩
+
+lemma monotone_map (P Q : MorphismProperty C) (F : C ⥤ D) (h : P ⊆ Q) :
+    P.map F ⊆ Q.map F := by
+  intro X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
+  exact ⟨X', Y', f', h _ hf', ⟨e⟩⟩
+
 /-- A morphism property `RespectsIso` if it still holds when composed with an isomorphism -/
 def RespectsIso (P : MorphismProperty C) : Prop :=
   (∀ {X Y Z} (e : X ≅ Y) (f : Y ⟶ Z), P f → P (e.hom ≫ f)) ∧
@@ -117,6 +140,11 @@ lemma isoClosure_respectsIso (P : MorphismProperty C) :
     ⟨_, _, f', hf', ⟨Arrow.isoMk (asIso iso.hom.left)
       (asIso iso.hom.right ≪≫ e) (by simp)⟩⟩⟩
 
+lemma monotone_isoClosure (P Q : MorphismProperty C) (h : P ⊆ Q) :
+    P.isoClosure ⊆ Q.isoClosure := by
+  intro X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
+  exact ⟨X', Y', f', h _ hf', ⟨e⟩⟩
+
 /-- A morphism property is `StableUnderComposition` if the composition of two such morphisms
 still falls in the class. -/
 def StableUnderComposition (P : MorphismProperty C) : Prop :=
@@ -197,6 +225,17 @@ theorem RespectsIso.of_respects_arrow_iso (P : MorphismProperty C)
     simp only [Category.id_comp]
 #align category_theory.morphism_property.respects_iso.of_respects_arrow_iso CategoryTheory.MorphismProperty.RespectsIso.of_respects_arrow_iso
 
+lemma RespectsIso.isoClosure_eq {P : MorphismProperty C} (hP : P.RespectsIso) :
+    P.isoClosure = P := by
+  refine' le_antisymm _ (P.subset_isoClosure)
+  intro X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
+  exact (hP.arrow_mk_iso_iff e).1 hf'
+
+@[simp]
+lemma isoClosure_isoClosure (P : MorphismProperty C) :
+    P.isoClosure.isoClosure = P.isoClosure :=
+  P.isoClosure_respectsIso.isoClosure_eq
+
 theorem StableUnderBaseChange.mk {P : MorphismProperty C} [HasPullbacks C] (hP₁ : RespectsIso P)
     (hP₂ : ∀ (X Y S : C) (f : X ⟶ S) (g : Y ⟶ S) (_ : P g), P (pullback.fst : pullback f g ⟶ X)) :
     StableUnderBaseChange P := fun X Y Y' S f g f' g' sq hg => by
@@ -312,6 +351,10 @@ def IsInvertedBy (P : MorphismProperty C) (F : C ⥤ D) : Prop :=
 
 namespace IsInvertedBy
 
+lemma of_subset (P Q : MorphismProperty C) (F : C ⥤ D) (hQ : Q.IsInvertedBy F) (h : P ⊆ Q) :
+    P.IsInvertedBy F :=
+  fun _ _ _ hf => hQ _ (h _ hf)
+
 theorem of_comp {C₁ C₂ C₃ : Type*} [Category C₁] [Category C₂] [Category C₃]
     (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (hF : W.IsInvertedBy F) (G : C₂ ⥤ C₃) :
     W.IsInvertedBy (F ⋙ G) := fun X Y f hf => by
@@ -523,18 +566,146 @@ def FunctorsInverting.mk {W : MorphismProperty C} {D : Type*} [Category D] (F :
 
 theorem IsInvertedBy.iff_of_iso (W : MorphismProperty C) {F₁ F₂ : C ⥤ D} (e : F₁ ≅ F₂) :
     W.IsInvertedBy F₁ ↔ W.IsInvertedBy F₂ := by
-  suffices ∀ (X Y : C) (f : X ⟶ Y), IsIso (F₁.map f) ↔ IsIso (F₂.map f) by
-    constructor
-    exact fun h X Y f hf => by
-      rw [← this]
-      exact h f hf
-    exact fun h X Y f hf => by
-      rw [this]
-      exact h f hf
-  intro X Y f
-  exact (RespectsIso.isomorphisms D).arrow_mk_iso_iff (Arrow.isoMk (e.app X) (e.app Y) (by simp))
+  dsimp [IsInvertedBy]
+  simp only [NatIso.isIso_map_iff e]
 #align category_theory.morphism_property.is_inverted_by.iff_of_iso CategoryTheory.MorphismProperty.IsInvertedBy.iff_of_iso
 
+@[simp]
+lemma IsInvertedBy.isoClosure_iff (W : MorphismProperty C) (F : C ⥤ D) :
+    W.isoClosure.IsInvertedBy F ↔ W.IsInvertedBy F := by
+  constructor
+  · intro h X Y f hf
+    exact h _ (W.subset_isoClosure _ hf)
+  · intro h X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
+    have : f = e.inv.left ≫ f' ≫ e.hom.right := by
+      erw [← e.hom.w, ← Arrow.comp_left_assoc, e.inv_hom_id, Category.id_comp]
+      rfl
+    simp only [this, F.map_comp]
+    have := h _ hf'
+    infer_instance
+
+@[simp]
+lemma IsInvertedBy.iff_comp {C₁ C₂ C₃ : Type*} [Category C₁] [Category C₂] [Category C₃]
+    (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (G : C₂ ⥤ C₃) [ReflectsIsomorphisms G] :
+    W.IsInvertedBy (F ⋙ G) ↔ W.IsInvertedBy F := by
+  constructor
+  · intro h X Y f hf
+    have : IsIso (G.map (F.map f)) := h _ hf
+    exact isIso_of_reflects_iso (F.map f) G
+  · intro hF
+    exact IsInvertedBy.of_comp W F hF G
+
+lemma isoClosure_subset_iff (P Q : MorphismProperty C) (hQ : RespectsIso Q) :
+    P.isoClosure ⊆ Q ↔ P ⊆ Q := by
+  constructor
+  · exact P.subset_isoClosure.trans
+  · intro h
+    exact (monotone_isoClosure _ _ h).trans (by rw [hQ.isoClosure_eq])
+
+lemma map_respectsIso (P : MorphismProperty C) (F : C ⥤ D) :
+    (P.map F).RespectsIso := by
+  apply RespectsIso.of_respects_arrow_iso
+  intro f g e ⟨X', Y', f', hf', ⟨e'⟩⟩
+  exact ⟨X', Y', f', hf', ⟨e' ≪≫ e⟩⟩
+
+lemma map_subset_iff (P : MorphismProperty C) (F : C ⥤ D)
+    (Q : MorphismProperty D) (hQ : RespectsIso Q):
+    P.map F ⊆ Q ↔ ∀ (X Y : C) (f : X ⟶ Y), P f → Q (F.map f) := by
+  constructor
+  · intro h X Y f hf
+    exact h (F.map f) (map_mem_map P F f hf)
+  · intro h X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
+    exact (hQ.arrow_mk_iso_iff e).1 (h _ _ _ hf')
+
+lemma IsInvertedBy.iff_map_subset_isomorphisms (W : MorphismProperty C) (F : C ⥤ D) :
+    W.IsInvertedBy F ↔ W.map F ⊆ isomorphisms D := by
+  rw [map_subset_iff _ _ _ (RespectsIso.isomorphisms D)]
+  constructor
+  · intro h X Y f hf
+    exact h f hf
+  · intro h X Y f hf
+    exact h X Y f hf
+
+@[simp]
+lemma map_isoClosure (P : MorphismProperty C) (F : C ⥤ D) :
+    P.isoClosure.map F = P.map F := by
+  apply subset_antisymm
+  · rw [map_subset_iff _ _ _ (P.map_respectsIso F)]
+    intro X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
+    exact ⟨_, _, f', hf', ⟨F.mapArrow.mapIso e⟩⟩
+  · exact monotone_map _ _ _ (subset_isoClosure P)
+
+lemma map_id_eq_isoClosure (P : MorphismProperty C) :
+    P.map (𝟭 _) = P.isoClosure := by
+  apply subset_antisymm
+  · rw [map_subset_iff _ _ _ P.isoClosure_respectsIso]
+    intro X Y f hf
+    exact P.subset_isoClosure _ hf
+  · intro X Y f hf
+    exact hf
+
+lemma map_id (P : MorphismProperty C) (hP : RespectsIso P) :
+    P.map (𝟭 _) = P := by
+  rw [map_id_eq_isoClosure, hP.isoClosure_eq]
+
+@[simp]
+lemma map_map (P : MorphismProperty C) (F : C ⥤ D) {E : Type*} [Category E] (G : D ⥤ E) :
+    (P.map F).map G = P.map (F ⋙ G) := by
+  apply subset_antisymm
+  · rw [map_subset_iff _ _ _ (map_respectsIso _ (F ⋙ G))]
+    intro X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
+    exact ⟨X', Y', f', hf', ⟨G.mapArrow.mapIso e⟩⟩
+  · rw [map_subset_iff _ _ _ (map_respectsIso _ G)]
+    intro X Y f hf
+    exact map_mem_map _ _ _ (map_mem_map _ _ _ hf)
+
+lemma IsInvertedBy.map_iff {C₁ C₂ C₃ : Type*} [Category C₁] [Category C₂] [Category C₃]
+    (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (G : C₂ ⥤ C₃) :
+    (W.map F).IsInvertedBy G ↔ W.IsInvertedBy (F ⋙ G) := by
+  simp only [IsInvertedBy.iff_map_subset_isomorphisms, map_map]
+
+lemma map_eq_of_iso (P : MorphismProperty C) {F G : C ⥤ D} (e : F ≅ G) :
+    P.map F = P.map G := by
+  revert F G e
+  suffices ∀ {F G : C ⥤ D} (_ : F ≅ G), P.map F ⊆ P.map G from
+    fun F G e => le_antisymm (this e) (this e.symm)
+  intro F G e X Y f ⟨X', Y', f', hf', ⟨e'⟩⟩
+  exact ⟨X', Y', f', hf', ⟨((Functor.mapArrowFunctor _ _).mapIso e.symm).app (Arrow.mk f') ≪≫ e'⟩⟩
+
+lemma map_inverseImage_subset (P : MorphismProperty D) (F : C ⥤ D) :
+    (P.inverseImage F).map F ⊆ P.isoClosure :=
+  fun _ _ _ ⟨_, _, f, hf, ⟨e⟩⟩ => ⟨_, _, F.map f, hf, ⟨e⟩⟩
+
+lemma inverseImage_equivalence_inverse_eq_map_functor
+    (P : MorphismProperty D) (hP : RespectsIso P) (E : C ≌ D) :
+    P.inverseImage E.functor = P.map E.inverse := by
+  apply subset_antisymm
+  · intro X Y f hf
+    refine' ⟨_, _, _, hf, ⟨_⟩⟩
+    exact ((Functor.mapArrowFunctor _ _).mapIso E.unitIso.symm).app (Arrow.mk f)
+  · rw [map_subset_iff _ _ _ (hP.inverseImage E.functor)]
+    intro X Y f hf
+    exact (hP.arrow_mk_iso_iff
+      (((Functor.mapArrowFunctor _ _).mapIso E.counitIso).app (Arrow.mk f))).2 hf
+
+lemma inverseImage_equivalence_functor_eq_map_inverse
+    (Q : MorphismProperty C) (hQ : RespectsIso Q) (E : C ≌ D) :
+    Q.inverseImage E.inverse = Q.map E.functor :=
+  inverseImage_equivalence_inverse_eq_map_functor Q hQ E.symm
+
+lemma map_inverseImage_eq_of_isEquivalence
+    (P : MorphismProperty D) (hP : P.RespectsIso) (F : C ⥤ D) [IsEquivalence F] :
+    (P.inverseImage F).map F = P := by
+  erw [P.inverseImage_equivalence_inverse_eq_map_functor hP F.asEquivalence, map_map,
+    P.map_eq_of_iso F.asEquivalence.counitIso, map_id _ hP]
+
+lemma inverseImage_map_eq_of_isEquivalence
+    (P : MorphismProperty C) (hP : P.RespectsIso) (F : C ⥤ D) [IsEquivalence F] :
+    (P.map F).inverseImage F = P := by
+  erw [((P.map F).inverseImage_equivalence_inverse_eq_map_functor
+    (P.map_respectsIso F) (F.asEquivalence)), map_map,
+    P.map_eq_of_iso F.asEquivalence.unitIso.symm, map_id _ hP]
+
 section Diagonal
 
 variable [HasPullbacks C] {P : MorphismProperty C}
feat: multiplicative morphism properties (#6698)

This PR introduces the notion of multiplicative morphism property, i.e. contains identities and is stable under composition.

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

Diff
@@ -695,6 +695,57 @@ theorem bijective_respectsIso : (MorphismProperty.bijective C).RespectsIso :=
 
 end Bijective
 
+/-- Typeclass expressing that a morphism property contain identities. -/
+class ContainsIdentities (W : MorphismProperty C) : Prop :=
+  /-- for all `X : C`, the identity of `X` satisfies the morphism property -/
+  id_mem' : ∀ (X : C), W (𝟙 X)
+
+lemma id_mem (W : MorphismProperty C) [W.ContainsIdentities] (X : C) :
+  W (𝟙 X) := ContainsIdentities.id_mem' X
+
+namespace ContainsIdentities
+
+instance op (W : MorphismProperty C) [W.ContainsIdentities] :
+    W.op.ContainsIdentities := ⟨fun X => W.id_mem X.unop⟩
+
+instance unop (W : MorphismProperty Cᵒᵖ) [W.ContainsIdentities] :
+    W.unop.ContainsIdentities := ⟨fun X => W.id_mem (Opposite.op X)⟩
+
+lemma of_op (W : MorphismProperty C) [W.op.ContainsIdentities] :
+    W.ContainsIdentities := (inferInstance : W.op.unop.ContainsIdentities)
+
+lemma of_unop (W : MorphismProperty Cᵒᵖ) [W.unop.ContainsIdentities] :
+    W.ContainsIdentities := (inferInstance : W.unop.op.ContainsIdentities)
+
+end ContainsIdentities
+
+/-- A morphism property is multiplicative if it contains identities and is stable by
+composition. -/
+class IsMultiplicative (W : MorphismProperty C) extends W.ContainsIdentities : Prop :=
+  /-- compatibility of  -/
+  stableUnderComposition : W.StableUnderComposition
+
+lemma comp_mem (W : MorphismProperty C) {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (hf : W f) (hg : W g)
+    [IsMultiplicative W] : W (f ≫ g) :=
+  IsMultiplicative.stableUnderComposition f g hf hg
+
+namespace IsMultiplicative
+
+instance op (W : MorphismProperty C) [IsMultiplicative W] : IsMultiplicative W.op where
+  stableUnderComposition := fun _ _ _ f g hf hg => W.comp_mem g.unop f.unop hg hf
+
+instance unop (W : MorphismProperty Cᵒᵖ) [IsMultiplicative W] : IsMultiplicative W.unop where
+  id_mem' _ := W.id_mem _
+  stableUnderComposition := fun _ _ _ f g hf hg => W.comp_mem g.op f.op hg hf
+
+lemma of_op (W : MorphismProperty C) [IsMultiplicative W.op] : IsMultiplicative W :=
+  (inferInstance : IsMultiplicative W.op.unop)
+
+lemma of_unop (W : MorphismProperty Cᵒᵖ) [IsMultiplicative W.unop] : IsMultiplicative W :=
+  (inferInstance : IsMultiplicative W.unop.op)
+
+end IsMultiplicative
+
 end MorphismProperty
 
 end CategoryTheory
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -35,7 +35,7 @@ noncomputable section
 
 namespace CategoryTheory
 
-variable (C : Type u) [Category.{v} C] {D : Type _} [Category D]
+variable (C : Type u) [Category.{v} C] {D : Type*} [Category D]
 
 /-- A `MorphismProperty C` is a class of morphisms between objects in `C`. -/
 def MorphismProperty :=
@@ -312,7 +312,7 @@ def IsInvertedBy (P : MorphismProperty C) (F : C ⥤ D) : Prop :=
 
 namespace IsInvertedBy
 
-theorem of_comp {C₁ C₂ C₃ : Type _} [Category C₁] [Category C₂] [Category C₃]
+theorem of_comp {C₁ C₂ C₃ : Type*} [Category C₁] [Category C₂] [Category C₃]
     (W : MorphismProperty C₁) (F : C₁ ⥤ C₂) (hF : W.IsInvertedBy F) (G : C₂ ⥤ C₃) :
     W.IsInvertedBy (F ⋙ G) := fun X Y f hf => by
   haveI := hF f hf
@@ -492,7 +492,7 @@ variable {C}
 
 -- porting note: removed @[nolint has_nonempty_instance]
 /-- The full subcategory of `C ⥤ D` consisting of functors inverting morphisms in `W` -/
-def FunctorsInverting (W : MorphismProperty C) (D : Type _) [Category D] :=
+def FunctorsInverting (W : MorphismProperty C) (D : Type*) [Category D] :=
   FullSubcategory fun F : C ⥤ D => W.IsInvertedBy F
 #align category_theory.morphism_property.functors_inverting CategoryTheory.MorphismProperty.FunctorsInverting
 
@@ -504,7 +504,7 @@ lemma FunctorsInverting.ext {W : MorphismProperty C} {F₁ F₂ : FunctorsInvert
   subst h
   rfl
 
-instance (W : MorphismProperty C) (D : Type _) [Category D] : Category (FunctorsInverting W D) :=
+instance (W : MorphismProperty C) (D : Type*) [Category D] : Category (FunctorsInverting W D) :=
   FullSubcategory.category _
 
 -- Porting note: add another `@[ext]` lemma
@@ -516,7 +516,7 @@ lemma FunctorsInverting.hom_ext {W : MorphismProperty C} {F₁ F₂ : FunctorsIn
   NatTrans.ext _ _ h
 
 /-- A constructor for `W.FunctorsInverting D` -/
-def FunctorsInverting.mk {W : MorphismProperty C} {D : Type _} [Category D] (F : C ⥤ D)
+def FunctorsInverting.mk {W : MorphismProperty C} {D : Type*} [Category D] (F : C ⥤ D)
     (hF : W.IsInvertedBy F) : W.FunctorsInverting D :=
   ⟨F, hF⟩
 #align category_theory.morphism_property.functors_inverting.mk CategoryTheory.MorphismProperty.FunctorsInverting.mk
feat: localization functors are preserved through equivalences (#6236)

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

Diff
@@ -101,6 +101,22 @@ theorem RespectsIso.unop {P : MorphismProperty Cᵒᵖ} (h : RespectsIso P) : Re
   ⟨fun e f hf => h.2 e.op f.op hf, fun e f hf => h.1 e.op f.op hf⟩
 #align category_theory.morphism_property.respects_iso.unop CategoryTheory.MorphismProperty.RespectsIso.unop
 
+/-- The closure by isomorphisms of a `MorphismProperty` -/
+def isoClosure (P : MorphismProperty C) : MorphismProperty C :=
+  fun _ _ f => ∃ (Y₁ Y₂ : C) (f' : Y₁ ⟶ Y₂) (_ : P f'), Nonempty (Arrow.mk f' ≅ Arrow.mk f)
+
+lemma subset_isoClosure (P : MorphismProperty C) : P ⊆ P.isoClosure :=
+  fun _ _ f hf => ⟨_, _, f, hf, ⟨Iso.refl _⟩⟩
+
+lemma isoClosure_respectsIso (P : MorphismProperty C) :
+    RespectsIso P.isoClosure :=
+  ⟨fun e f ⟨_, _, f', hf', ⟨iso⟩⟩ =>
+    ⟨_, _, f', hf', ⟨Arrow.isoMk (asIso iso.hom.left ≪≫ e.symm)
+      (asIso iso.hom.right) (by simp)⟩⟩,
+  fun e f ⟨_, _, f', hf', ⟨iso⟩⟩ =>
+    ⟨_, _, f', hf', ⟨Arrow.isoMk (asIso iso.hom.left)
+      (asIso iso.hom.right ≪≫ e) (by simp)⟩⟩⟩
+
 /-- A morphism property is `StableUnderComposition` if the composition of two such morphisms
 still falls in the class. -/
 def StableUnderComposition (P : MorphismProperty C) : Prop :=
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,17 +2,14 @@
 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.morphism_property
-! leanprover-community/mathlib commit 7f963633766aaa3ebc8253100a5229dd463040c7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Limits.Shapes.Diagonal
 import Mathlib.CategoryTheory.Arrow
 import Mathlib.CategoryTheory.Limits.Shapes.CommSq
 import Mathlib.CategoryTheory.ConcreteCategory.Basic
 
+#align_import category_theory.morphism_property from "leanprover-community/mathlib"@"7f963633766aaa3ebc8253100a5229dd463040c7"
+
 /-!
 # Properties of morphisms
 
chore: cleanup whitespace (#5988)

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

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

Diff
@@ -283,11 +283,11 @@ theorem StableUnderCobaseChange.unop {P : MorphismProperty Cᵒᵖ} (hP : Stable
 #align category_theory.morphism_property.stable_under_cobase_change.unop CategoryTheory.MorphismProperty.StableUnderCobaseChange.unop
 
 theorem StableUnderBaseChange.op {P : MorphismProperty C} (hP : StableUnderBaseChange P) :
-    StableUnderCobaseChange P.op := fun _ _ _ _ _ _ _ _  sq hf => hP sq.unop hf
+    StableUnderCobaseChange P.op := fun _ _ _ _ _ _ _ _ sq hf => hP sq.unop hf
 #align category_theory.morphism_property.stable_under_base_change.op CategoryTheory.MorphismProperty.StableUnderBaseChange.op
 
 theorem StableUnderBaseChange.unop {P : MorphismProperty Cᵒᵖ} (hP : StableUnderBaseChange P) :
-    StableUnderCobaseChange P.unop := fun _ _ _ _ _ _ _ _  sq hf => hP sq.op hf
+    StableUnderCobaseChange P.unop := fun _ _ _ _ _ _ _ _ sq hf => hP sq.op hf
 #align category_theory.morphism_property.stable_under_base_change.unop CategoryTheory.MorphismProperty.StableUnderBaseChange.unop
 
 /-- If `P : MorphismProperty C` and `F : C ⥤ D`, then
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
@@ -349,7 +349,7 @@ namespace naturalityProperty
 
 theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderComposition := fun X Y Z f g hf hg => by
-  simp only [naturalityProperty] at hf hg⊢
+  simp only [naturalityProperty] at hf hg ⊢
   simp only [Functor.map_comp, Category.assoc, hg]
   slice_lhs 1 2 => rw [hf]
   rw [Category.assoc]
@@ -357,7 +357,7 @@ theorem stableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X 
 
 theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
     (naturalityProperty app).StableUnderInverse := fun X Y e he => by
-  simp only [naturalityProperty] at he⊢
+  simp only [naturalityProperty] at he ⊢
   rw [← cancel_epi (F₁.map e.hom)]
   slice_rhs 1 2 => rw [he]
   simp only [Category.assoc, ← F₁.map_comp_assoc, ← F₂.map_comp, e.hom_inv_id, Functor.map_id,
@@ -452,7 +452,7 @@ theorem RespectsIso.isomorphisms : RespectsIso (isomorphisms C) := by
 
 theorem StableUnderComposition.isomorphisms : StableUnderComposition (isomorphisms C) :=
   fun X Y Z f g hf hg => by
-  rw [isomorphisms.iff] at hf hg⊢
+  rw [isomorphisms.iff] at hf hg ⊢
   haveI := hf
   haveI := hg
   infer_instance
@@ -460,7 +460,7 @@ theorem StableUnderComposition.isomorphisms : StableUnderComposition (isomorphis
 
 theorem StableUnderComposition.monomorphisms : StableUnderComposition (monomorphisms C) :=
   fun X Y Z f g hf hg => by
-  rw [monomorphisms.iff] at hf hg⊢
+  rw [monomorphisms.iff] at hf hg ⊢
   haveI := hf
   haveI := hg
   apply mono_comp
@@ -468,7 +468,7 @@ theorem StableUnderComposition.monomorphisms : StableUnderComposition (monomorph
 
 theorem StableUnderComposition.epimorphisms : StableUnderComposition (epimorphisms C) :=
   fun X Y Z f g hf hg => by
-  rw [epimorphisms.iff] at hf hg⊢
+  rw [epimorphisms.iff] at hf hg ⊢
   haveI := hf
   haveI := hg
   apply epi_comp
@@ -596,7 +596,7 @@ theorem StableUnderComposition.universally [HasPullbacks C] {P : MorphismPropert
     (hP : P.StableUnderComposition) : P.universally.StableUnderComposition := by
   intro X Y Z f g hf hg X' Z' i₁ i₂ f' H
   have := pullback.lift_fst _ _ (H.w.trans (Category.assoc _ _ _).symm)
-  rw [← this] at H⊢
+  rw [← this] at H ⊢
   apply hP _ _ _ (hg _ _ _ <| IsPullback.of_hasPullback _ _)
   exact hf _ _ _ (H.of_right (pullback.lift_snd _ _ _) (IsPullback.of_hasPullback i₂ g))
 #align category_theory.morphism_property.stable_under_composition.universally CategoryTheory.MorphismProperty.StableUnderComposition.universally
feat: more consistent use of ext, and updating porting notes. (#5242)

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

Diff
@@ -224,7 +224,7 @@ theorem StableUnderBaseChange.baseChange_map [HasPullbacks C] {P : MorphismPrope
     pullbackRightPullbackFstIso Y.hom f g.left ≪≫
       pullback.congrHom (g.w.trans (Category.comp_id _)) rfl
   have : e.inv ≫ pullback.snd = ((baseChange f).map g).left := by
-    apply pullback.hom_ext <;> dsimp <;> simp
+    ext <;> dsimp <;> simp
   rw [← this, hP.respectsIso.cancel_left_isIso]
   exact hP.snd _ _ H
 #align category_theory.morphism_property.stable_under_base_change.base_change_map CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map
@@ -242,7 +242,7 @@ theorem StableUnderBaseChange.pullback_map [HasPullbacks C] {P : MorphismPropert
           ((baseChange _).map (Over.homMk _ e₂.symm : Over.mk g ⟶ Over.mk g')).left) ≫
         (pullbackSymmetry _ _).hom ≫
           ((baseChange g').map (Over.homMk _ e₁.symm : Over.mk f ⟶ Over.mk f')).left :=
-    by apply pullback.hom_ext <;> dsimp <;> simp
+    by ext <;> dsimp <;> simp
   rw [this]
   apply hP' <;> rw [hP.respectsIso.cancel_left_isIso]
   exacts [hP.baseChange_map _ (Over.homMk _ e₂.symm : Over.mk g ⟶ Over.mk g') h₂,
chore: add @[ext] lemmas for NatTrans synonyms (#5228)

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

Diff
@@ -494,6 +494,14 @@ lemma FunctorsInverting.ext {W : MorphismProperty C} {F₁ F₂ : FunctorsInvert
 instance (W : MorphismProperty C) (D : Type _) [Category D] : Category (FunctorsInverting W D) :=
   FullSubcategory.category _
 
+-- Porting note: add another `@[ext]` lemma
+-- since `ext` can't see through the definition to use `NatTrans.ext`.
+-- See https://github.com/leanprover-community/mathlib4/issues/5229
+@[ext]
+lemma FunctorsInverting.hom_ext {W : MorphismProperty C} {F₁ F₂ : FunctorsInverting W D}
+    {α β : F₁ ⟶ F₂} (h : α.app = β.app) : α = β :=
+  NatTrans.ext _ _ h
+
 /-- A constructor for `W.FunctorsInverting D` -/
 def FunctorsInverting.mk {W : MorphismProperty C} {D : Type _} [Category D] (F : C ⥤ D)
     (hF : W.IsInvertedBy F) : W.FunctorsInverting D :=
feat: change ConcreteCategory.hasCoeToFun to FunLike (#4693)
Diff
@@ -615,7 +615,7 @@ variable [ConcreteCategory C]
 
 open Function
 
-attribute [local instance] ConcreteCategory.hasCoeToFun ConcreteCategory.hasCoeToSort
+attribute [local instance] ConcreteCategory.funLike ConcreteCategory.hasCoeToSort
 
 variable (C)
 
chore: add space after exacts (#4945)

Too often tempted to change these during other PRs, so doing a mass edit here.

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

Diff
@@ -373,7 +373,7 @@ theorem RespectsIso.inverseImage {P : MorphismProperty D} (h : RespectsIso P) (F
     intro X Y Z e f hf
     dsimp [MorphismProperty.inverseImage]
     rw [F.map_comp]
-  exacts[h.1 (F.mapIso e) (F.map f) hf, h.2 (F.mapIso e) (F.map f) hf]
+  exacts [h.1 (F.mapIso e) (F.map f) hf, h.2 (F.mapIso e) (F.map f) hf]
 #align category_theory.morphism_property.respects_iso.inverse_image CategoryTheory.MorphismProperty.RespectsIso.inverseImage
 
 theorem StableUnderComposition.inverseImage {P : MorphismProperty D} (h : StableUnderComposition P)
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
@@ -502,8 +502,7 @@ def FunctorsInverting.mk {W : MorphismProperty C} {D : Type _} [Category D] (F :
 
 theorem IsInvertedBy.iff_of_iso (W : MorphismProperty C) {F₁ F₂ : C ⥤ D} (e : F₁ ≅ F₂) :
     W.IsInvertedBy F₁ ↔ W.IsInvertedBy F₂ := by
-  suffices ∀ (X Y : C) (f : X ⟶ Y), IsIso (F₁.map f) ↔ IsIso (F₂.map f)
-    by
+  suffices ∀ (X Y : C) (f : X ⟶ Y), IsIso (F₁.map f) ↔ IsIso (F₂.map f) by
     constructor
     exact fun h X Y f hf => by
       rw [← this]
feat: port CategoryTheory.Localization.Construction (#2917)

Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>

Diff
@@ -52,10 +52,15 @@ instance : CompleteLattice (MorphismProperty C) := by
 instance : Inhabited (MorphismProperty C) :=
   ⟨⊤⟩
 
+lemma MorphismProperty.top_eq : (⊤ : MorphismProperty C) = fun _ _ _ => True := rfl
+
 variable {C}
 
 namespace MorphismProperty
 
+lemma top_apply {X Y : C} (f : X ⟶ Y) : (⊤ : MorphismProperty C) f := by
+  simp only [top_eq]
+
 instance : HasSubset (MorphismProperty C) :=
   ⟨fun P₁ P₂ => ∀ ⦃X Y : C⦄ (f : X ⟶ Y) (_ : P₁ f), P₂ f⟩
 
@@ -478,6 +483,14 @@ def FunctorsInverting (W : MorphismProperty C) (D : Type _) [Category D] :=
   FullSubcategory fun F : C ⥤ D => W.IsInvertedBy F
 #align category_theory.morphism_property.functors_inverting CategoryTheory.MorphismProperty.FunctorsInverting
 
+@[ext]
+lemma FunctorsInverting.ext {W : MorphismProperty C} {F₁ F₂ : FunctorsInverting W D}
+    (h : F₁.obj = F₂.obj) : F₁ = F₂ := by
+  cases F₁
+  cases F₂
+  subst h
+  rfl
+
 instance (W : MorphismProperty C) (D : Type _) [Category D] : Category (FunctorsInverting W D) :=
   FullSubcategory.category _
 
feat: port CategoryTheory.MorphismProperty (#2909)

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

Dependencies 2 + 256

257 files ported (99.2%)
107445 lines ported (99.9%)
Show graph

The unported dependencies are