category_theory.morphism_property
⟷
Mathlib.CategoryTheory.MorphismProperty
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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:
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -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}
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/b19481deb571022990f1baa9cbf9172e6757a479
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -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}
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
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>
@@ -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)
The file CategoryTheory.MorphismProperty
is split into five files Basic
, Composition
, Limits
, Concrete
, IsInvertedBy
.
@@ -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
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -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,
@@ -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
@@ -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
This PR introduces the class of quasi-isomorphisms in the homotopy category of homological complexes.
@@ -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]
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>
@@ -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
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:
(J → C) ≌ (Discrete J ⥤ C)
C ⥤ (J ⥤ C)
.MorphismProperty.IsStableUnderFiniteProducts
@@ -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
@@ -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"
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 def
s or abbrev
s.
@@ -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)
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>
@@ -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)
@@ -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
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.
@@ -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
@@ -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
@@ -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}
@@ -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
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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
@@ -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 :=
@@ -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
@@ -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
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
@@ -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
@@ -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₂,
@@ -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 :=
@@ -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)
@@ -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)
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -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]
Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
@@ -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 _
The unported dependencies are