category_theory.abelian.exact
⟷
Mathlib.CategoryTheory.Abelian.Exact
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)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -129,7 +129,7 @@ theorem exact_tfae :
#print CategoryTheory.Abelian.IsEquivalence.exact_iff /-
theorem IsEquivalence.exact_iff {D : Type u₁} [Category.{v₁} D] [Abelian D] (F : C ⥤ D)
- [IsEquivalence F] : Exact (F.map f) (F.map g) ↔ Exact f g :=
+ [CategoryTheory.Functor.IsEquivalence F] : Exact (F.map f) (F.map g) ↔ Exact f g :=
by
simp only [exact_iff, ← F.map_eq_zero_iff, F.map_comp, category.assoc, ←
kernel_comparison_comp_ι g F, ← π_comp_cokernel_comparison f F]
@@ -385,8 +385,8 @@ variable {D : Type u₂} [Category.{v₂} D] [Abelian D]
variable (F : C ⥤ D) [PreservesZeroMorphisms F]
#print CategoryTheory.Functor.reflectsExactSequencesOfPreservesZeroMorphismsOfFaithful /-
-instance (priority := 100) reflectsExactSequencesOfPreservesZeroMorphismsOfFaithful [Faithful F] :
- ReflectsExactSequences F
+instance (priority := 100) reflectsExactSequencesOfPreservesZeroMorphismsOfFaithful
+ [CategoryTheory.Functor.Faithful F] : ReflectsExactSequences F
where reflects X Y Z f g hfg :=
by
rw [abelian.exact_iff, ← F.map_comp, F.map_eq_zero_iff] at hfg
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -157,7 +157,7 @@ theorem exact_epi_comp_iff {W : C} (h : W ⟶ X) [Epi h] : Exact (h ≫ f) g ↔
def isLimitImage (h : Exact f g) :
IsLimit (KernelFork.ofι (Abelian.image.ι f) (image_ι_comp_eq_zero h.1) : KernelFork g) :=
by
- rw [exact_iff] at h
+ rw [exact_iff] at h
refine' kernel_fork.is_limit.of_ι _ _ _ _ _
· refine' fun W u hu => kernel.lift (cokernel.π f) u _
rw [← kernel.lift_ι g u hu, category.assoc, h.2, has_zero_morphisms.comp_zero]
@@ -180,7 +180,7 @@ def isColimitCoimage (h : Exact f g) :
(CokernelCofork.ofπ (Abelian.coimage.π g) (Abelian.comp_coimage_π_eq_zero h.1) :
CokernelCofork f) :=
by
- rw [exact_iff] at h
+ rw [exact_iff] at h
refine' cokernel_cofork.is_colimit.of_π _ _ _ _ _
· refine' fun W u hu => cokernel.desc (kernel.ι g) u _
rw [← cokernel.π_desc f u hu, ← category.assoc, h.2, has_zero_morphisms.zero_comp]
@@ -259,7 +259,7 @@ theorem exact_of_is_cokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.of
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (cokernel_cofork.of_π _ (cokernel.condition f)) walking_parallel_pair.one
- simp only [cofork.of_π_ι_app] at this
+ simp only [cofork.of_π_ι_app] at this
rw [← this, ← category.assoc, kernel.condition, zero_comp]
#align category_theory.abelian.exact_of_is_cokernel CategoryTheory.Abelian.exact_of_is_cokernel
-/
@@ -269,7 +269,7 @@ theorem exact_of_is_kernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w))
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (kernel_fork.of_ι _ (kernel.condition g)) walking_parallel_pair.zero
- simp only [fork.of_ι_π_app] at this
+ simp only [fork.of_ι_π_app] at this
rw [← this, category.assoc, cokernel.condition, comp_zero]
#align category_theory.abelian.exact_of_is_kernel CategoryTheory.Abelian.exact_of_is_kernel
-/
@@ -361,14 +361,14 @@ theorem Exact.op_iff : Exact g.op f.op ↔ Exact f g :=
#print CategoryTheory.Abelian.Exact.unop /-
theorem Exact.unop {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) (h : Exact g f) : Exact f.unop g.unop :=
by
- rw [← f.op_unop, ← g.op_unop] at h
+ rw [← f.op_unop, ← g.op_unop] at h
rwa [← exact.op_iff]
#align category_theory.abelian.exact.unop CategoryTheory.Abelian.Exact.unop
-/
#print CategoryTheory.Abelian.Exact.unop_iff /-
theorem Exact.unop_iff {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) : Exact f.unop g.unop ↔ Exact g f :=
- ⟨fun e => by rwa [← f.op_unop, ← g.op_unop, ← exact.op_iff] at e , fun e => @Exact.unop _ _ g f e⟩
+ ⟨fun e => by rwa [← f.op_unop, ← g.op_unop, ← exact.op_iff] at e, fun e => @Exact.unop _ _ g f e⟩
#align category_theory.abelian.exact.unop_iff CategoryTheory.Abelian.Exact.unop_iff
-/
@@ -389,7 +389,7 @@ instance (priority := 100) reflectsExactSequencesOfPreservesZeroMorphismsOfFaith
ReflectsExactSequences F
where reflects X Y Z f g hfg :=
by
- rw [abelian.exact_iff, ← F.map_comp, F.map_eq_zero_iff] at hfg
+ rw [abelian.exact_iff, ← F.map_comp, F.map_eq_zero_iff] at hfg
refine' (abelian.exact_iff _ _).2 ⟨hfg.1, F.zero_of_map_zero _ _⟩
obtain ⟨k, hk⟩ :=
kernel.lift' (F.map g) (F.map (kernel.ι g))
@@ -446,7 +446,7 @@ open scoped ZeroObject
theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
by
replace h := (h (exact_of_zero (𝟙 0) (𝟙 0))).w
- rw [L.map_id, category.comp_id] at h
+ rw [L.map_id, category.comp_id] at h
exact preserves_zero_morphisms_of_map_zero_object (id_zero_equiv_iso_zero _ h)
#align category_theory.functor.preserves_zero_morphisms_of_map_exact CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,13 +3,13 @@ Copyright (c) 2020 Markus Himmel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel, Adam Topaz, Johan Commelin, Jakob von Raumer
-/
-import Mathbin.CategoryTheory.Abelian.Opposite
-import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Zero
-import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Kernels
-import Mathbin.CategoryTheory.Preadditive.LeftExact
-import Mathbin.CategoryTheory.Adjunction.Limits
-import Mathbin.Algebra.Homology.Exact
-import Mathbin.Tactic.Tfae
+import CategoryTheory.Abelian.Opposite
+import CategoryTheory.Limits.Preserves.Shapes.Zero
+import CategoryTheory.Limits.Preserves.Shapes.Kernels
+import CategoryTheory.Preadditive.LeftExact
+import CategoryTheory.Adjunction.Limits
+import Algebra.Homology.Exact
+import Tactic.Tfae
#align_import category_theory.abelian.exact from "leanprover-community/mathlib"@"ef55335933293309ff8c0b1d20ffffeecbe5c39f"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2020 Markus Himmel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel, Adam Topaz, Johan Commelin, Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.abelian.exact
-! leanprover-community/mathlib commit ef55335933293309ff8c0b1d20ffffeecbe5c39f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Abelian.Opposite
import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Zero
@@ -16,6 +11,8 @@ import Mathbin.CategoryTheory.Adjunction.Limits
import Mathbin.Algebra.Homology.Exact
import Mathbin.Tactic.Tfae
+#align_import category_theory.abelian.exact from "leanprover-community/mathlib"@"ef55335933293309ff8c0b1d20ffffeecbe5c39f"
+
/-!
# Exact sequences in abelian categories
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -103,6 +103,7 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
#align category_theory.abelian.exact_iff CategoryTheory.Abelian.exact_iff
-/
+#print CategoryTheory.Abelian.exact_iff' /-
theorem exact_iff' {cg : KernelFork g} (hg : IsLimit cg) {cf : CokernelCofork f}
(hf : IsColimit cf) : Exact f g ↔ f ≫ g = 0 ∧ cg.ι ≫ cf.π = 0 :=
by
@@ -115,6 +116,7 @@ theorem exact_iff' {cg : KernelFork g} (hg : IsLimit cg) {cf : CokernelCofork f}
apply zero_of_comp_mono (is_colimit.cocone_point_unique_up_to_iso (colimit.is_colimit _) hf).Hom
simp [h.2]
#align category_theory.abelian.exact_iff' CategoryTheory.Abelian.exact_iff'
+-/
#print CategoryTheory.Abelian.exact_tfae /-
theorem exact_tfae :
@@ -128,6 +130,7 @@ theorem exact_tfae :
#align category_theory.abelian.exact_tfae CategoryTheory.Abelian.exact_tfae
-/
+#print CategoryTheory.Abelian.IsEquivalence.exact_iff /-
theorem IsEquivalence.exact_iff {D : Type u₁} [Category.{v₁} D] [Abelian D] (F : C ⥤ D)
[IsEquivalence F] : Exact (F.map f) (F.map g) ↔ Exact f g :=
by
@@ -136,6 +139,7 @@ theorem IsEquivalence.exact_iff {D : Type u₁} [Category.{v₁} D] [Abelian D]
rw [is_iso.comp_left_eq_zero (kernel_comparison g F), ← category.assoc,
is_iso.comp_right_eq_zero _ (cokernel_comparison f F)]
#align category_theory.abelian.is_equivalence.exact_iff CategoryTheory.Abelian.IsEquivalence.exact_iff
+-/
#print CategoryTheory.Abelian.exact_epi_comp_iff /-
/-- The dual result is true even in non-abelian categories, see
@@ -339,6 +343,7 @@ end
section Opposite
+#print CategoryTheory.Abelian.Exact.op /-
theorem Exact.op (h : Exact f g) : Exact g.op f.op :=
by
rw [exact_iff]
@@ -346,22 +351,29 @@ theorem Exact.op (h : Exact f g) : Exact g.op f.op :=
simp only [unop_comp, cokernel.π_op, eq_to_hom_refl, kernel.ι_op, category.id_comp,
category.assoc, kernel_comp_cokernel_assoc _ _ h, zero_comp, comp_zero, unop_zero]
#align category_theory.abelian.exact.op CategoryTheory.Abelian.Exact.op
+-/
+#print CategoryTheory.Abelian.Exact.op_iff /-
theorem Exact.op_iff : Exact g.op f.op ↔ Exact f g :=
⟨fun e => by
rw [← is_equivalence.exact_iff _ _ (op_op_equivalence C).inverse]
exact exact.op _ _ e, Exact.op _ _⟩
#align category_theory.abelian.exact.op_iff CategoryTheory.Abelian.Exact.op_iff
+-/
+#print CategoryTheory.Abelian.Exact.unop /-
theorem Exact.unop {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) (h : Exact g f) : Exact f.unop g.unop :=
by
rw [← f.op_unop, ← g.op_unop] at h
rwa [← exact.op_iff]
#align category_theory.abelian.exact.unop CategoryTheory.Abelian.Exact.unop
+-/
+#print CategoryTheory.Abelian.Exact.unop_iff /-
theorem Exact.unop_iff {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) : Exact f.unop g.unop ↔ Exact g f :=
⟨fun e => by rwa [← f.op_unop, ← g.op_unop, ← exact.op_iff] at e , fun e => @Exact.unop _ _ g f e⟩
#align category_theory.abelian.exact.unop_iff CategoryTheory.Abelian.Exact.unop_iff
+-/
end Opposite
@@ -410,6 +422,7 @@ section
variable [PreservesFiniteLimits L] [PreservesFiniteColimits L]
+#print CategoryTheory.Functor.map_exact /-
/-- A functor preserving finite limits and finite colimits preserves exactness. The converse
result is also true, see `functor.preserves_finite_limits_of_map_exact` and
`functor.preserves_finite_colimits_of_map_exact`. -/
@@ -421,6 +434,7 @@ theorem map_exact {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (e1 : Exact f g) :
refine' (exact_iff' _ _ hker hcoker).2 ⟨by simp [← L.map_comp, e1.1], _⟩
rw [fork.ι_of_ι, cofork.π_of_π, ← L.map_comp, kernel_comp_cokernel _ _ e1, L.map_zero]
#align category_theory.functor.map_exact CategoryTheory.Functor.map_exact
+-/
end
@@ -428,10 +442,9 @@ section
variable (h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g))
-include h
-
open scoped ZeroObject
+#print CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact /-
/-- A functor which preserves exactness preserves zero morphisms. -/
theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
by
@@ -439,7 +452,9 @@ theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
rw [L.map_id, category.comp_id] at h
exact preserves_zero_morphisms_of_map_zero_object (id_zero_equiv_iso_zero _ h)
#align category_theory.functor.preserves_zero_morphisms_of_map_exact CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact
+-/
+#print CategoryTheory.Functor.preservesMonomorphisms_of_map_exact /-
/-- A functor which preserves exactness preserves monomorphisms. -/
theorem preservesMonomorphisms_of_map_exact : L.PreservesMonomorphisms :=
{
@@ -450,7 +465,9 @@ theorem preservesMonomorphisms_of_map_exact : L.PreservesMonomorphisms :=
rw [← L.map_zero]
exact h (((tfae_mono 0 f).out 0 2).mp hf) }
#align category_theory.functor.preserves_monomorphisms_of_map_exact CategoryTheory.Functor.preservesMonomorphisms_of_map_exact
+-/
+#print CategoryTheory.Functor.preservesEpimorphisms_of_map_exact /-
/-- A functor which preserves exactness preserves epimorphisms. -/
theorem preservesEpimorphisms_of_map_exact : L.PreservesEpimorphisms :=
{
@@ -461,7 +478,9 @@ theorem preservesEpimorphisms_of_map_exact : L.PreservesEpimorphisms :=
rw [← L.map_zero]
exact h (((tfae_epi 0 f).out 0 2).mp hf) }
#align category_theory.functor.preserves_epimorphisms_of_map_exact CategoryTheory.Functor.preservesEpimorphisms_of_map_exact
+-/
+#print CategoryTheory.Functor.preservesKernelsOfMapExact /-
/-- A functor which preserves exactness preserves kernels. -/
def preservesKernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesLimit (parallelPair f 0) L
where preserves c ic :=
@@ -477,7 +496,9 @@ def preservesKernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesLimit (paralle
(ic.of_iso_limit (iso_of_ι _)))))
exact hf.of_iso_limit ((cones.functoriality _ L).mapIso (iso_of_ι _).symm)
#align category_theory.functor.preserves_kernels_of_map_exact CategoryTheory.Functor.preservesKernelsOfMapExact
+-/
+#print CategoryTheory.Functor.preservesCokernelsOfMapExact /-
/-- A functor which preserves exactness preserves zero cokernels. -/
def preservesCokernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesColimit (parallelPair f 0) L
where preserves c ic :=
@@ -493,7 +514,9 @@ def preservesCokernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesColimit (par
(ic.of_iso_colimit (iso_of_π _)))))
exact hf.of_iso_colimit ((cocones.functoriality _ L).mapIso (iso_of_π _).symm)
#align category_theory.functor.preserves_cokernels_of_map_exact CategoryTheory.Functor.preservesCokernelsOfMapExact
+-/
+#print CategoryTheory.Functor.preservesFiniteLimitsOfMapExact /-
/-- A functor which preserves exactness is left exact, i.e. preserves finite limits.
This is part of the inverse implication to `functor.map_exact`. -/
def preservesFiniteLimitsOfMapExact : PreservesFiniteLimits L :=
@@ -502,7 +525,9 @@ def preservesFiniteLimitsOfMapExact : PreservesFiniteLimits L :=
letI := preserves_kernels_of_map_exact L h
apply preserves_finite_limits_of_preserves_kernels
#align category_theory.functor.preserves_finite_limits_of_map_exact CategoryTheory.Functor.preservesFiniteLimitsOfMapExact
+-/
+#print CategoryTheory.Functor.preservesFiniteColimitsOfMapExact /-
/-- A functor which preserves exactness is right exact, i.e. preserves finite colimits.
This is part of the inverse implication to `functor.map_exact`. -/
def preservesFiniteColimitsOfMapExact : PreservesFiniteColimits L :=
@@ -511,6 +536,7 @@ def preservesFiniteColimitsOfMapExact : PreservesFiniteColimits L :=
letI := preserves_cokernels_of_map_exact L h
apply preserves_finite_colimits_of_preserves_cokernels
#align category_theory.functor.preserves_finite_colimits_of_map_exact CategoryTheory.Functor.preservesFiniteColimitsOfMapExact
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -202,11 +202,12 @@ theorem exact_cokernel : Exact f (cokernel.π f) := by rw [exact_iff]; tidy
-/
instance (h : Exact f g) : Mono (cokernel.desc f g h.w) :=
- suffices h :
- cokernel.desc f g h.w =
- (IsColimit.coconePointUniqueUpToIso (colimit.isColimit _) (isColimitImage f g h)).Hom ≫
- Limits.image.ι g
- from by rw [h]; apply mono_comp
+ suffices
+ h
+ (cokernel.desc f g h.w =
+ (IsColimit.coconePointUniqueUpToIso (colimit.isColimit _) (isColimitImage f g h)).Hom ≫
+ Limits.image.ι g)
+ by rw [h]; apply mono_comp
(cancel_epi (cokernel.π f)).1 <| by simp
/-- If `ex : exact f g` and `epi g`, then `cokernel.desc _ _ ex.w` is an isomorphism. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -98,7 +98,7 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
kernel.lift (cokernel.π f) u _ ≫ (image_iso_image f).Hom ≫ (image_subobject_iso _).inv
rw [← kernel.lift_ι g u hu, category.assoc, h.2, has_zero_morphisms.comp_zero]
· tidy
- · intros ; rw [← cancel_mono (image_subobject f).arrow, w]
+ · intros; rw [← cancel_mono (image_subobject f).arrow, w]
simp
#align category_theory.abelian.exact_iff CategoryTheory.Abelian.exact_iff
-/
@@ -156,7 +156,7 @@ theorem exact_epi_comp_iff {W : C} (h : W ⟶ X) [Epi h] : Exact (h ≫ f) g ↔
def isLimitImage (h : Exact f g) :
IsLimit (KernelFork.ofι (Abelian.image.ι f) (image_ι_comp_eq_zero h.1) : KernelFork g) :=
by
- rw [exact_iff] at h
+ rw [exact_iff] at h
refine' kernel_fork.is_limit.of_ι _ _ _ _ _
· refine' fun W u hu => kernel.lift (cokernel.π f) u _
rw [← kernel.lift_ι g u hu, category.assoc, h.2, has_zero_morphisms.comp_zero]
@@ -179,7 +179,7 @@ def isColimitCoimage (h : Exact f g) :
(CokernelCofork.ofπ (Abelian.coimage.π g) (Abelian.comp_coimage_π_eq_zero h.1) :
CokernelCofork f) :=
by
- rw [exact_iff] at h
+ rw [exact_iff] at h
refine' cokernel_cofork.is_colimit.of_π _ _ _ _ _
· refine' fun W u hu => cokernel.desc (kernel.ι g) u _
rw [← cokernel.π_desc f u hu, ← category.assoc, h.2, has_zero_morphisms.zero_comp]
@@ -257,7 +257,7 @@ theorem exact_of_is_cokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.of
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (cokernel_cofork.of_π _ (cokernel.condition f)) walking_parallel_pair.one
- simp only [cofork.of_π_ι_app] at this
+ simp only [cofork.of_π_ι_app] at this
rw [← this, ← category.assoc, kernel.condition, zero_comp]
#align category_theory.abelian.exact_of_is_cokernel CategoryTheory.Abelian.exact_of_is_cokernel
-/
@@ -267,7 +267,7 @@ theorem exact_of_is_kernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w))
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (kernel_fork.of_ι _ (kernel.condition g)) walking_parallel_pair.zero
- simp only [fork.of_ι_π_app] at this
+ simp only [fork.of_ι_π_app] at this
rw [← this, category.assoc, cokernel.condition, comp_zero]
#align category_theory.abelian.exact_of_is_kernel CategoryTheory.Abelian.exact_of_is_kernel
-/
@@ -294,7 +294,7 @@ theorem tfae_mono : TFAE [Mono f, kernel.ι f = 0, Exact (0 : Z ⟶ X) f] :=
tfae_have 3 → 2
· exact kernel_ι_eq_zero_of_exact_zero_left Z
tfae_have 1 → 3
- · intros ; exact exact_zero_left_of_mono Z
+ · intros; exact exact_zero_left_of_mono Z
tfae_have 2 → 1
· exact mono_of_kernel_ι_eq_zero _
tfae_finish
@@ -354,12 +354,12 @@ theorem Exact.op_iff : Exact g.op f.op ↔ Exact f g :=
theorem Exact.unop {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) (h : Exact g f) : Exact f.unop g.unop :=
by
- rw [← f.op_unop, ← g.op_unop] at h
+ rw [← f.op_unop, ← g.op_unop] at h
rwa [← exact.op_iff]
#align category_theory.abelian.exact.unop CategoryTheory.Abelian.Exact.unop
theorem Exact.unop_iff {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) : Exact f.unop g.unop ↔ Exact g f :=
- ⟨fun e => by rwa [← f.op_unop, ← g.op_unop, ← exact.op_iff] at e, fun e => @Exact.unop _ _ g f e⟩
+ ⟨fun e => by rwa [← f.op_unop, ← g.op_unop, ← exact.op_iff] at e , fun e => @Exact.unop _ _ g f e⟩
#align category_theory.abelian.exact.unop_iff CategoryTheory.Abelian.Exact.unop_iff
end Opposite
@@ -379,7 +379,7 @@ instance (priority := 100) reflectsExactSequencesOfPreservesZeroMorphismsOfFaith
ReflectsExactSequences F
where reflects X Y Z f g hfg :=
by
- rw [abelian.exact_iff, ← F.map_comp, F.map_eq_zero_iff] at hfg
+ rw [abelian.exact_iff, ← F.map_comp, F.map_eq_zero_iff] at hfg
refine' (abelian.exact_iff _ _).2 ⟨hfg.1, F.zero_of_map_zero _ _⟩
obtain ⟨k, hk⟩ :=
kernel.lift' (F.map g) (F.map (kernel.ι g))
@@ -435,7 +435,7 @@ open scoped ZeroObject
theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
by
replace h := (h (exact_of_zero (𝟙 0) (𝟙 0))).w
- rw [L.map_id, category.comp_id] at h
+ rw [L.map_id, category.comp_id] at h
exact preserves_zero_morphisms_of_map_zero_object (id_zero_equiv_iso_zero _ h)
#align category_theory.functor.preserves_zero_morphisms_of_map_exact CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -429,7 +429,7 @@ variable (h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exa
include h
-open ZeroObject
+open scoped ZeroObject
/-- A functor which preserves exactness preserves zero morphisms. -/
theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -103,9 +103,6 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
#align category_theory.abelian.exact_iff CategoryTheory.Abelian.exact_iff
-/
-/- warning: category_theory.abelian.exact_iff' -> CategoryTheory.Abelian.exact_iff' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact_iff' CategoryTheory.Abelian.exact_iff'ₓ'. -/
theorem exact_iff' {cg : KernelFork g} (hg : IsLimit cg) {cf : CokernelCofork f}
(hf : IsColimit cf) : Exact f g ↔ f ≫ g = 0 ∧ cg.ι ≫ cf.π = 0 :=
by
@@ -131,12 +128,6 @@ theorem exact_tfae :
#align category_theory.abelian.exact_tfae CategoryTheory.Abelian.exact_tfae
-/
-/- warning: category_theory.abelian.is_equivalence.exact_iff -> CategoryTheory.Abelian.IsEquivalence.exact_iff is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {D : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} D] [_inst_4 : CategoryTheory.Abelian.{u1, u2} D _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u2} C _inst_1 D _inst_3) [_inst_5 : CategoryTheory.IsEquivalence.{u1, u1, u2, u2} C _inst_1 D _inst_3 F], Iff (CategoryTheory.Exact.{u1, u2} D _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} D _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Abelian.hasKernels.{u1, u2} D _inst_3 _inst_4) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 D _inst_3 F X) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 D _inst_3 F Y) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 D _inst_3 F Z) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 D _inst_3 F X Y f) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 D _inst_3 F Y Z g)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g)
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {D : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} D] [_inst_4 : CategoryTheory.Abelian.{u1, u2} D _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u2} C _inst_1 D _inst_3) [_inst_5 : CategoryTheory.IsEquivalence.{u1, u1, u2, u2} C _inst_1 D _inst_3 F], Iff (CategoryTheory.Exact.{u1, u2} D _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} D _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} D _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} D _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} D _inst_3 _inst_4)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) X) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) Y) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) Z) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) X Y f) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) Y Z g)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g)
-Case conversion may be inaccurate. Consider using '#align category_theory.abelian.is_equivalence.exact_iff CategoryTheory.Abelian.IsEquivalence.exact_iffₓ'. -/
theorem IsEquivalence.exact_iff {D : Type u₁} [Category.{v₁} D] [Abelian D] (F : C ⥤ D)
[IsEquivalence F] : Exact (F.map f) (F.map g) ↔ Exact f g :=
by
@@ -347,12 +338,6 @@ end
section Opposite
-/- warning: category_theory.abelian.exact.op -> CategoryTheory.Abelian.Exact.op is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g) -> (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f))
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g) -> (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f))
-Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.op CategoryTheory.Abelian.Exact.opₓ'. -/
theorem Exact.op (h : Exact f g) : Exact g.op f.op :=
by
rw [exact_iff]
@@ -361,36 +346,18 @@ theorem Exact.op (h : Exact f g) : Exact g.op f.op :=
category.assoc, kernel_comp_cokernel_assoc _ _ h, zero_comp, comp_zero, unop_zero]
#align category_theory.abelian.exact.op CategoryTheory.Abelian.Exact.op
-/- warning: category_theory.abelian.exact.op_iff -> CategoryTheory.Abelian.Exact.op_iff is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), Iff (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g)
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), Iff (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g)
-Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.op_iff CategoryTheory.Abelian.Exact.op_iffₓ'. -/
theorem Exact.op_iff : Exact g.op f.op ↔ Exact f g :=
⟨fun e => by
rw [← is_equivalence.exact_iff _ _ (op_op_equivalence C).inverse]
exact exact.op _ _ e, Exact.op _ _⟩
#align category_theory.abelian.exact.op_iff CategoryTheory.Abelian.Exact.op_iff
-/- warning: category_theory.abelian.exact.unop -> CategoryTheory.Abelian.Exact.unop is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) X Y Z g f) -> (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g))
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) X Y Z g f) -> (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g))
-Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.unop CategoryTheory.Abelian.Exact.unopₓ'. -/
theorem Exact.unop {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) (h : Exact g f) : Exact f.unop g.unop :=
by
rw [← f.op_unop, ← g.op_unop] at h
rwa [← exact.op_iff]
#align category_theory.abelian.exact.unop CategoryTheory.Abelian.Exact.unop
-/- warning: category_theory.abelian.exact.unop_iff -> CategoryTheory.Abelian.Exact.unop_iff is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g)) (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) X Y Z g f)
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g)) (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) X Y Z g f)
-Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.unop_iff CategoryTheory.Abelian.Exact.unop_iffₓ'. -/
theorem Exact.unop_iff {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) : Exact f.unop g.unop ↔ Exact g f :=
⟨fun e => by rwa [← f.op_unop, ← g.op_unop, ← exact.op_iff] at e, fun e => @Exact.unop _ _ g f e⟩
#align category_theory.abelian.exact.unop_iff CategoryTheory.Abelian.Exact.unop_iff
@@ -442,12 +409,6 @@ section
variable [PreservesFiniteLimits L] [PreservesFiniteColimits L]
-/- warning: category_theory.functor.map_exact -> CategoryTheory.Functor.map_exact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4) [_inst_7 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] [_inst_8 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z), (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4) [_inst_7 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] [_inst_8 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z), (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.map_exact CategoryTheory.Functor.map_exactₓ'. -/
/-- A functor preserving finite limits and finite colimits preserves exactness. The converse
result is also true, see `functor.preserves_finite_limits_of_map_exact` and
`functor.preserves_finite_colimits_of_map_exact`. -/
@@ -470,12 +431,6 @@ include h
open ZeroObject
-/- warning: category_theory.functor.preserves_zero_morphisms_of_map_exact -> CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Functor.PreservesZeroMorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) L)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Functor.PreservesZeroMorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) L)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_zero_morphisms_of_map_exact CategoryTheory.Functor.preservesZeroMorphisms_of_map_exactₓ'. -/
/-- A functor which preserves exactness preserves zero morphisms. -/
theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
by
@@ -484,12 +439,6 @@ theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
exact preserves_zero_morphisms_of_map_zero_object (id_zero_equiv_iso_zero _ h)
#align category_theory.functor.preserves_zero_morphisms_of_map_exact CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact
-/- warning: category_theory.functor.preserves_monomorphisms_of_map_exact -> CategoryTheory.Functor.preservesMonomorphisms_of_map_exact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Functor.PreservesMonomorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Functor.PreservesMonomorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_monomorphisms_of_map_exact CategoryTheory.Functor.preservesMonomorphisms_of_map_exactₓ'. -/
/-- A functor which preserves exactness preserves monomorphisms. -/
theorem preservesMonomorphisms_of_map_exact : L.PreservesMonomorphisms :=
{
@@ -501,12 +450,6 @@ theorem preservesMonomorphisms_of_map_exact : L.PreservesMonomorphisms :=
exact h (((tfae_mono 0 f).out 0 2).mp hf) }
#align category_theory.functor.preserves_monomorphisms_of_map_exact CategoryTheory.Functor.preservesMonomorphisms_of_map_exact
-/- warning: category_theory.functor.preserves_epimorphisms_of_map_exact -> CategoryTheory.Functor.preservesEpimorphisms_of_map_exact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Functor.PreservesEpimorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Functor.PreservesEpimorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_epimorphisms_of_map_exact CategoryTheory.Functor.preservesEpimorphisms_of_map_exactₓ'. -/
/-- A functor which preserves exactness preserves epimorphisms. -/
theorem preservesEpimorphisms_of_map_exact : L.PreservesEpimorphisms :=
{
@@ -518,12 +461,6 @@ theorem preservesEpimorphisms_of_map_exact : L.PreservesEpimorphisms :=
exact h (((tfae_epi 0 f).out 0 2).mp hf) }
#align category_theory.functor.preserves_epimorphisms_of_map_exact CategoryTheory.Functor.preservesEpimorphisms_of_map_exact
-/- warning: category_theory.functor.preserves_kernels_of_map_exact -> CategoryTheory.Functor.preservesKernelsOfMapExact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesKernelsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesKernelsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesLimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y))))) L)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesLimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y)))) L)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_kernels_of_map_exact CategoryTheory.Functor.preservesKernelsOfMapExactₓ'. -/
/-- A functor which preserves exactness preserves kernels. -/
def preservesKernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesLimit (parallelPair f 0) L
where preserves c ic :=
@@ -540,12 +477,6 @@ def preservesKernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesLimit (paralle
exact hf.of_iso_limit ((cones.functoriality _ L).mapIso (iso_of_ι _).symm)
#align category_theory.functor.preserves_kernels_of_map_exact CategoryTheory.Functor.preservesKernelsOfMapExact
-/- warning: category_theory.functor.preserves_cokernels_of_map_exact -> CategoryTheory.Functor.preservesCokernelsOfMapExact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesCokernelsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesCokernelsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesColimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y))))) L)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesColimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y)))) L)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_cokernels_of_map_exact CategoryTheory.Functor.preservesCokernelsOfMapExactₓ'. -/
/-- A functor which preserves exactness preserves zero cokernels. -/
def preservesCokernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesColimit (parallelPair f 0) L
where preserves c ic :=
@@ -562,12 +493,6 @@ def preservesCokernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesColimit (par
exact hf.of_iso_colimit ((cocones.functoriality _ L).mapIso (iso_of_π _).symm)
#align category_theory.functor.preserves_cokernels_of_map_exact CategoryTheory.Functor.preservesCokernelsOfMapExact
-/- warning: category_theory.functor.preserves_finite_limits_of_map_exact -> CategoryTheory.Functor.preservesFiniteLimitsOfMapExact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesFiniteLimitsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesFiniteLimitsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_finite_limits_of_map_exact CategoryTheory.Functor.preservesFiniteLimitsOfMapExactₓ'. -/
/-- A functor which preserves exactness is left exact, i.e. preserves finite limits.
This is part of the inverse implication to `functor.map_exact`. -/
def preservesFiniteLimitsOfMapExact : PreservesFiniteLimits L :=
@@ -577,12 +502,6 @@ def preservesFiniteLimitsOfMapExact : PreservesFiniteLimits L :=
apply preserves_finite_limits_of_preserves_kernels
#align category_theory.functor.preserves_finite_limits_of_map_exact CategoryTheory.Functor.preservesFiniteLimitsOfMapExact
-/- warning: category_theory.functor.preserves_finite_colimits_of_map_exact -> CategoryTheory.Functor.preservesFiniteColimitsOfMapExact is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesFiniteColimitsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesFiniteColimitsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_finite_colimits_of_map_exact CategoryTheory.Functor.preservesFiniteColimitsOfMapExactₓ'. -/
/-- A functor which preserves exactness is right exact, i.e. preserves finite colimits.
This is part of the inverse implication to `functor.map_exact`. -/
def preservesFiniteColimitsOfMapExact : PreservesFiniteColimits L :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -90,9 +90,7 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
imageToKernel f g h.1 =
(is_limit.cone_point_unique_up_to_iso hl (limit.is_limit _)).Hom ≫
(kernel_subobject_iso _).inv :=
- by
- ext
- simp
+ by ext; simp
rw [this]
infer_instance
refine' kernel_fork.is_limit.of_ι _ _ _ _ _
@@ -100,8 +98,7 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
kernel.lift (cokernel.π f) u _ ≫ (image_iso_image f).Hom ≫ (image_subobject_iso _).inv
rw [← kernel.lift_ι g u hu, category.assoc, h.2, has_zero_morphisms.comp_zero]
· tidy
- · intros
- rw [← cancel_mono (image_subobject f).arrow, w]
+ · intros ; rw [← cancel_mono (image_subobject f).arrow, w]
simp
#align category_theory.abelian.exact_iff CategoryTheory.Abelian.exact_iff
-/
@@ -209,10 +206,7 @@ def isColimitImage (h : Exact f g) :
-/
#print CategoryTheory.Abelian.exact_cokernel /-
-theorem exact_cokernel : Exact f (cokernel.π f) :=
- by
- rw [exact_iff]
- tidy
+theorem exact_cokernel : Exact f (cokernel.π f) := by rw [exact_iff]; tidy
#align category_theory.abelian.exact_cokernel CategoryTheory.Abelian.exact_cokernel
-/
@@ -221,9 +215,7 @@ instance (h : Exact f g) : Mono (cokernel.desc f g h.w) :=
cokernel.desc f g h.w =
(IsColimit.coconePointUniqueUpToIso (colimit.isColimit _) (isColimitImage f g h)).Hom ≫
Limits.image.ι g
- from by
- rw [h]
- apply mono_comp
+ from by rw [h]; apply mono_comp
(cancel_epi (cokernel.π f)).1 <| by simp
/-- If `ex : exact f g` and `epi g`, then `cokernel.desc _ _ ex.w` is an isomorphism. -/
@@ -311,8 +303,7 @@ theorem tfae_mono : TFAE [Mono f, kernel.ι f = 0, Exact (0 : Z ⟶ X) f] :=
tfae_have 3 → 2
· exact kernel_ι_eq_zero_of_exact_zero_left Z
tfae_have 1 → 3
- · intros
- exact exact_zero_left_of_mono Z
+ · intros ; exact exact_zero_left_of_mono Z
tfae_have 2 → 1
· exact mono_of_kernel_ι_eq_zero _
tfae_finish
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -107,10 +107,7 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
-/
/- warning: category_theory.abelian.exact_iff' -> CategoryTheory.Abelian.exact_iff' is a dubious translation:
-lean 3 declaration is
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {cg : CategoryTheory.Limits.KernelFork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z g}, (CategoryTheory.Limits.IsLimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) cg) -> (forall {cf : CategoryTheory.Limits.CokernelCofork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y f}, (CategoryTheory.Limits.IsColimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))))) cf) -> (Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g) (And (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Z))))) (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))))) cf)) CategoryTheory.Limits.WalkingParallelPair.one) (CategoryTheory.Limits.Fork.ι.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg) (CategoryTheory.Limits.Cofork.π.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)))))))))
-but is expected to have type
- forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {cg : CategoryTheory.Limits.KernelFork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z g}, (CategoryTheory.Limits.IsLimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg) -> (forall {cf : CategoryTheory.Limits.CokernelCofork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y f}, (CategoryTheory.Limits.IsColimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf) -> (Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g) (And (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Z)))) (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one) (CategoryTheory.Limits.Fork.ι.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg) (CategoryTheory.Limits.Cofork.π.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one)) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one))))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact_iff' CategoryTheory.Abelian.exact_iff'ₓ'. -/
theorem exact_iff' {cg : KernelFork g} (hg : IsLimit cg) {cf : CokernelCofork f}
(hf : IsColimit cf) : Exact f g ↔ f ≫ g = 0 ∧ cg.ι ≫ cf.π = 0 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -234,7 +234,7 @@ instance (ex : Exact f g) [Epi g] : IsIso (cokernel.desc f g ex.w) :=
isIso_of_mono_of_epi (Limits.cokernel.desc f g ex.w)
#print CategoryTheory.Abelian.cokernel.desc.inv /-
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem cokernel.desc.inv [Epi g] (ex : Exact f g) :
g ≫ inv (cokernel.desc _ _ ex.w) = cokernel.π _ := by simp
#align category_theory.abelian.cokernel.desc.inv CategoryTheory.Abelian.cokernel.desc.inv
@@ -244,7 +244,7 @@ instance (ex : Exact f g) [Mono f] : IsIso (kernel.lift g f ex.w) :=
isIso_of_mono_of_epi (Limits.kernel.lift g f ex.w)
#print CategoryTheory.Abelian.kernel.lift.inv /-
-@[simp, reassoc.1]
+@[simp, reassoc]
theorem kernel.lift.inv [Mono f] (ex : Exact f g) : inv (kernel.lift _ _ ex.w) ≫ f = kernel.ι g :=
by simp
#align category_theory.abelian.kernel.lift.inv CategoryTheory.Abelian.kernel.lift.inv
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel, Adam Topaz, Johan Commelin, Jakob von Raumer
! This file was ported from Lean 3 source module category_theory.abelian.exact
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit ef55335933293309ff8c0b1d20ffffeecbe5c39f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -19,6 +19,9 @@ import Mathbin.Tactic.Tfae
/-!
# Exact sequences in abelian categories
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In an abelian category, we get several interesting results related to exactness which are not
true in more general settings.
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b8ba04e2f326f3f7cf24ad129beda58531ada61
@@ -58,6 +58,7 @@ variable {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z)
attribute [local instance] has_equalizers_of_has_kernels
+#print CategoryTheory.Abelian.exact_iff_image_eq_kernel /-
/-- In an abelian category, a pair of morphisms `f : X ⟶ Y`, `g : Y ⟶ Z` is exact
iff `image_subobject f = kernel_subobject g`.
-/
@@ -71,7 +72,9 @@ theorem exact_iff_image_eq_kernel : Exact f g ↔ imageSubobject f = kernelSubob
· simp
· apply exact_of_image_eq_kernel
#align category_theory.abelian.exact_iff_image_eq_kernel CategoryTheory.Abelian.exact_iff_image_eq_kernel
+-/
+#print CategoryTheory.Abelian.exact_iff /-
theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f = 0 :=
by
constructor
@@ -98,7 +101,14 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
rw [← cancel_mono (image_subobject f).arrow, w]
simp
#align category_theory.abelian.exact_iff CategoryTheory.Abelian.exact_iff
+-/
+/- warning: category_theory.abelian.exact_iff' -> CategoryTheory.Abelian.exact_iff' is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {cg : CategoryTheory.Limits.KernelFork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z g}, (CategoryTheory.Limits.IsLimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) cg) -> (forall {cf : CategoryTheory.Limits.CokernelCofork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y f}, (CategoryTheory.Limits.IsColimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))))) cf) -> (Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g) (And (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Z))))) (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))))) cf)) CategoryTheory.Limits.WalkingParallelPair.one) (CategoryTheory.Limits.Fork.ι.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg) (CategoryTheory.Limits.Cofork.π.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg)) CategoryTheory.Limits.WalkingParallelPair.zero) (CategoryTheory.Functor.obj.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Functor.obj.{u1, u1, u2, max u1 u2} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) CategoryTheory.Limits.WalkingParallelPair.one)))))))))
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {cg : CategoryTheory.Limits.KernelFork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z g}, (CategoryTheory.Limits.IsLimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg) -> (forall {cf : CategoryTheory.Limits.CokernelCofork.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y f}, (CategoryTheory.Limits.IsColimit.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf) -> (Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g) (And (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Z)))) (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one) (CategoryTheory.Limits.Fork.ι.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z))) cg) (CategoryTheory.Limits.Cofork.π.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y))) cf)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one)) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one)) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 Y Z g (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) Y Z)))) cg))) CategoryTheory.Limits.WalkingParallelPair.zero) (Prefunctor.obj.{1, succ u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.CategoryStruct.toQuiver.{0, 0} CategoryTheory.Limits.WalkingParallelPair (CategoryTheory.Category.toCategoryStruct.{0, 0} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (Prefunctor.obj.{succ u1, succ u1, u2, max u1 u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1))) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, max u2 u1} C _inst_1 (CategoryTheory.Functor.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.category.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1) (CategoryTheory.Functor.const.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1)) (CategoryTheory.Limits.Cocone.pt.{0, u1, 0, u2} CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory C _inst_1 (CategoryTheory.Limits.parallelPair.{u1, u2} C _inst_1 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) X Y)))) cf))) CategoryTheory.Limits.WalkingParallelPair.one))))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact_iff' CategoryTheory.Abelian.exact_iff'ₓ'. -/
theorem exact_iff' {cg : KernelFork g} (hg : IsLimit cg) {cf : CokernelCofork f}
(hf : IsColimit cf) : Exact f g ↔ f ≫ g = 0 ∧ cg.ι ≫ cf.π = 0 :=
by
@@ -112,7 +122,8 @@ theorem exact_iff' {cg : KernelFork g} (hg : IsLimit cg) {cf : CokernelCofork f}
simp [h.2]
#align category_theory.abelian.exact_iff' CategoryTheory.Abelian.exact_iff'
-theorem exact_tFAE :
+#print CategoryTheory.Abelian.exact_tfae /-
+theorem exact_tfae :
TFAE
[Exact f g, f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f = 0,
imageSubobject f = kernelSubobject g] :=
@@ -120,8 +131,15 @@ theorem exact_tFAE :
tfae_have 1 ↔ 2; · apply exact_iff
tfae_have 1 ↔ 3; · apply exact_iff_image_eq_kernel
tfae_finish
-#align category_theory.abelian.exact_tfae CategoryTheory.Abelian.exact_tFAE
+#align category_theory.abelian.exact_tfae CategoryTheory.Abelian.exact_tfae
+-/
+/- warning: category_theory.abelian.is_equivalence.exact_iff -> CategoryTheory.Abelian.IsEquivalence.exact_iff is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {D : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} D] [_inst_4 : CategoryTheory.Abelian.{u1, u2} D _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u2} C _inst_1 D _inst_3) [_inst_5 : CategoryTheory.IsEquivalence.{u1, u1, u2, u2} C _inst_1 D _inst_3 F], Iff (CategoryTheory.Exact.{u1, u2} D _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} D _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Abelian.hasKernels.{u1, u2} D _inst_3 _inst_4) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 D _inst_3 F X) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 D _inst_3 F Y) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 D _inst_3 F Z) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 D _inst_3 F X Y f) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 D _inst_3 F Y Z g)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g)
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) {D : Type.{u2}} [_inst_3 : CategoryTheory.Category.{u1, u2} D] [_inst_4 : CategoryTheory.Abelian.{u1, u2} D _inst_3] (F : CategoryTheory.Functor.{u1, u1, u2, u2} C _inst_1 D _inst_3) [_inst_5 : CategoryTheory.IsEquivalence.{u1, u1, u2, u2} C _inst_1 D _inst_3 F], Iff (CategoryTheory.Exact.{u1, u2} D _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} D _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} D _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} D _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} D _inst_3 _inst_4)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} D _inst_3 _inst_4)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) X) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) Y) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) Z) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) X Y f) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) D (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} D (CategoryTheory.Category.toCategoryStruct.{u1, u2} D _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 D _inst_3 F) Y Z g)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g)
+Case conversion may be inaccurate. Consider using '#align category_theory.abelian.is_equivalence.exact_iff CategoryTheory.Abelian.IsEquivalence.exact_iffₓ'. -/
theorem IsEquivalence.exact_iff {D : Type u₁} [Category.{v₁} D] [Abelian D] (F : C ⥤ D)
[IsEquivalence F] : Exact (F.map f) (F.map g) ↔ Exact f g :=
by
@@ -131,6 +149,7 @@ theorem IsEquivalence.exact_iff {D : Type u₁} [Category.{v₁} D] [Abelian D]
is_iso.comp_right_eq_zero _ (cokernel_comparison f F)]
#align category_theory.abelian.is_equivalence.exact_iff CategoryTheory.Abelian.IsEquivalence.exact_iff
+#print CategoryTheory.Abelian.exact_epi_comp_iff /-
/-- The dual result is true even in non-abelian categories, see
`category_theory.exact_comp_mono_iff`. -/
theorem exact_epi_comp_iff {W : C} (h : W ⟶ X) [Epi h] : Exact (h ≫ f) g ↔ Exact f g :=
@@ -142,7 +161,9 @@ theorem exact_epi_comp_iff {W : C} (h : W ⟶ X) [Epi h] : Exact (h ≫ f) g ↔
refine' (exact_iff' _ _ (limit.is_limit _) hc).2 ⟨_, ((exact_iff _ _).1 hfg).2⟩
exact zero_of_epi_comp h (by rw [← hfg.1, category.assoc])
#align category_theory.abelian.exact_epi_comp_iff CategoryTheory.Abelian.exact_epi_comp_iff
+-/
+#print CategoryTheory.Abelian.isLimitImage /-
/-- If `(f, g)` is exact, then `abelian.image.ι f` is a kernel of `g`. -/
def isLimitImage (h : Exact f g) :
IsLimit (KernelFork.ofι (Abelian.image.ι f) (image_ι_comp_eq_zero h.1) : KernelFork g) :=
@@ -153,13 +174,17 @@ def isLimitImage (h : Exact f g) :
rw [← kernel.lift_ι g u hu, category.assoc, h.2, has_zero_morphisms.comp_zero]
tidy
#align category_theory.abelian.is_limit_image CategoryTheory.Abelian.isLimitImage
+-/
+#print CategoryTheory.Abelian.isLimitImage' /-
/-- If `(f, g)` is exact, then `image.ι f` is a kernel of `g`. -/
def isLimitImage' (h : Exact f g) :
IsLimit (KernelFork.ofι (Limits.image.ι f) (Limits.image_ι_comp_eq_zero h.1)) :=
IsKernel.isoKernel _ _ (isLimitImage f g h) (imageIsoImage f).symm <| IsImage.lift_fac _ _
#align category_theory.abelian.is_limit_image' CategoryTheory.Abelian.isLimitImage'
+-/
+#print CategoryTheory.Abelian.isColimitCoimage /-
/-- If `(f, g)` is exact, then `coimages.coimage.π g` is a cokernel of `f`. -/
def isColimitCoimage (h : Exact f g) :
IsColimit
@@ -172,19 +197,24 @@ def isColimitCoimage (h : Exact f g) :
rw [← cokernel.π_desc f u hu, ← category.assoc, h.2, has_zero_morphisms.zero_comp]
tidy
#align category_theory.abelian.is_colimit_coimage CategoryTheory.Abelian.isColimitCoimage
+-/
+#print CategoryTheory.Abelian.isColimitImage /-
/-- If `(f, g)` is exact, then `factor_thru_image g` is a cokernel of `f`. -/
def isColimitImage (h : Exact f g) :
IsColimit (CokernelCofork.ofπ (Limits.factorThruImage g) (comp_factorThruImage_eq_zero h.1)) :=
IsCokernel.cokernelIso _ _ (isColimitCoimage f g h) (coimageIsoImage' g) <|
(cancel_mono (Limits.image.ι g)).1 <| by simp
#align category_theory.abelian.is_colimit_image CategoryTheory.Abelian.isColimitImage
+-/
+#print CategoryTheory.Abelian.exact_cokernel /-
theorem exact_cokernel : Exact f (cokernel.π f) :=
by
rw [exact_iff]
tidy
#align category_theory.abelian.exact_cokernel CategoryTheory.Abelian.exact_cokernel
+-/
instance (h : Exact f g) : Mono (cokernel.desc f g h.w) :=
suffices h :
@@ -200,19 +230,24 @@ instance (h : Exact f g) : Mono (cokernel.desc f g h.w) :=
instance (ex : Exact f g) [Epi g] : IsIso (cokernel.desc f g ex.w) :=
isIso_of_mono_of_epi (Limits.cokernel.desc f g ex.w)
+#print CategoryTheory.Abelian.cokernel.desc.inv /-
@[simp, reassoc.1]
-theorem Cokernel.Desc.inv [Epi g] (ex : Exact f g) :
+theorem cokernel.desc.inv [Epi g] (ex : Exact f g) :
g ≫ inv (cokernel.desc _ _ ex.w) = cokernel.π _ := by simp
-#align category_theory.abelian.cokernel.desc.inv CategoryTheory.Abelian.Cokernel.Desc.inv
+#align category_theory.abelian.cokernel.desc.inv CategoryTheory.Abelian.cokernel.desc.inv
+-/
instance (ex : Exact f g) [Mono f] : IsIso (kernel.lift g f ex.w) :=
isIso_of_mono_of_epi (Limits.kernel.lift g f ex.w)
+#print CategoryTheory.Abelian.kernel.lift.inv /-
@[simp, reassoc.1]
-theorem Kernel.Lift.inv [Mono f] (ex : Exact f g) : inv (kernel.lift _ _ ex.w) ≫ f = kernel.ι g :=
+theorem kernel.lift.inv [Mono f] (ex : Exact f g) : inv (kernel.lift _ _ ex.w) ≫ f = kernel.ι g :=
by simp
-#align category_theory.abelian.kernel.lift.inv CategoryTheory.Abelian.Kernel.Lift.inv
+#align category_theory.abelian.kernel.lift.inv CategoryTheory.Abelian.kernel.lift.inv
+-/
+#print CategoryTheory.Abelian.isColimitOfExactOfEpi /-
/-- If `X ⟶ Y ⟶ Z ⟶ 0` is exact, then the second map is a cokernel of the first. -/
def isColimitOfExactOfEpi [Epi g] (h : Exact f g) : IsColimit (CokernelCofork.ofπ _ h.w) :=
IsColimit.ofIsoColimit (colimit.isColimit _) <|
@@ -221,7 +256,9 @@ def isColimitOfExactOfEpi [Epi g] (h : Exact f g) : IsColimit (CokernelCofork.of
(cancel_epi (cokernel.π f)).1 (by tidy), (cancel_epi g).1 (by tidy)⟩
fun j => by cases j <;> simp
#align category_theory.abelian.is_colimit_of_exact_of_epi CategoryTheory.Abelian.isColimitOfExactOfEpi
+-/
+#print CategoryTheory.Abelian.isLimitOfExactOfMono /-
/-- If `0 ⟶ X ⟶ Y ⟶ Z` is exact, then the first map is a kernel of the second. -/
def isLimitOfExactOfMono [Mono f] (h : Exact f g) : IsLimit (KernelFork.ofι _ h.w) :=
IsLimit.ofIsoLimit (limit.isLimit _) <|
@@ -230,7 +267,9 @@ def isLimitOfExactOfMono [Mono f] (h : Exact f g) : IsLimit (KernelFork.ofι _ h
(cancel_mono (kernel.ι g)).1 (by tidy), (cancel_mono f).1 (by tidy)⟩
fun j => by cases j <;> simp
#align category_theory.abelian.is_limit_of_exact_of_mono CategoryTheory.Abelian.isLimitOfExactOfMono
+-/
+#print CategoryTheory.Abelian.exact_of_is_cokernel /-
theorem exact_of_is_cokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.ofπ _ w)) : Exact f g :=
by
refine' (exact_iff _ _).2 ⟨w, _⟩
@@ -238,7 +277,9 @@ theorem exact_of_is_cokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.of
simp only [cofork.of_π_ι_app] at this
rw [← this, ← category.assoc, kernel.condition, zero_comp]
#align category_theory.abelian.exact_of_is_cokernel CategoryTheory.Abelian.exact_of_is_cokernel
+-/
+#print CategoryTheory.Abelian.exact_of_is_kernel /-
theorem exact_of_is_kernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w)) : Exact f g :=
by
refine' (exact_iff _ _).2 ⟨w, _⟩
@@ -246,20 +287,26 @@ theorem exact_of_is_kernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w))
simp only [fork.of_ι_π_app] at this
rw [← this, category.assoc, cokernel.condition, comp_zero]
#align category_theory.abelian.exact_of_is_kernel CategoryTheory.Abelian.exact_of_is_kernel
+-/
+#print CategoryTheory.Abelian.exact_iff_exact_image_ι /-
theorem exact_iff_exact_image_ι : Exact f g ↔ Exact (Abelian.image.ι f) g := by
conv_lhs => rw [← abelian.image.fac f] <;> apply exact_epi_comp_iff
#align category_theory.abelian.exact_iff_exact_image_ι CategoryTheory.Abelian.exact_iff_exact_image_ι
+-/
+#print CategoryTheory.Abelian.exact_iff_exact_coimage_π /-
theorem exact_iff_exact_coimage_π : Exact f g ↔ Exact f (coimage.π g) := by
conv_lhs => rw [← abelian.coimage.fac g] <;> apply exact_comp_mono_iff
#align category_theory.abelian.exact_iff_exact_coimage_π CategoryTheory.Abelian.exact_iff_exact_coimage_π
+-/
section
variable (Z)
-theorem tFAE_mono : TFAE [Mono f, kernel.ι f = 0, Exact (0 : Z ⟶ X) f] :=
+#print CategoryTheory.Abelian.tfae_mono /-
+theorem tfae_mono : TFAE [Mono f, kernel.ι f = 0, Exact (0 : Z ⟶ X) f] :=
by
tfae_have 3 → 2
· exact kernel_ι_eq_zero_of_exact_zero_left Z
@@ -269,15 +316,19 @@ theorem tFAE_mono : TFAE [Mono f, kernel.ι f = 0, Exact (0 : Z ⟶ X) f] :=
tfae_have 2 → 1
· exact mono_of_kernel_ι_eq_zero _
tfae_finish
-#align category_theory.abelian.tfae_mono CategoryTheory.Abelian.tFAE_mono
+#align category_theory.abelian.tfae_mono CategoryTheory.Abelian.tfae_mono
+-/
+#print CategoryTheory.Abelian.mono_iff_kernel_ι_eq_zero /-
-- Note we've already proved `mono_iff_exact_zero_left : mono f ↔ exact (0 : Z ⟶ X) f`
-- in any preadditive category with kernels and images.
theorem mono_iff_kernel_ι_eq_zero : Mono f ↔ kernel.ι f = 0 :=
- (tFAE_mono X f).out 0 1
+ (tfae_mono X f).out 0 1
#align category_theory.abelian.mono_iff_kernel_ι_eq_zero CategoryTheory.Abelian.mono_iff_kernel_ι_eq_zero
+-/
-theorem tFAE_epi : TFAE [Epi f, cokernel.π f = 0, Exact f (0 : Y ⟶ Z)] :=
+#print CategoryTheory.Abelian.tfae_epi /-
+theorem tfae_epi : TFAE [Epi f, cokernel.π f = 0, Exact f (0 : Y ⟶ Z)] :=
by
tfae_have 3 → 2
· rw [exact_iff]
@@ -290,18 +341,27 @@ theorem tFAE_epi : TFAE [Epi f, cokernel.π f = 0, Exact f (0 : Y ⟶ Z)] :=
tfae_have 2 → 1
· exact epi_of_cokernel_π_eq_zero _
tfae_finish
-#align category_theory.abelian.tfae_epi CategoryTheory.Abelian.tFAE_epi
+#align category_theory.abelian.tfae_epi CategoryTheory.Abelian.tfae_epi
+-/
+#print CategoryTheory.Abelian.epi_iff_cokernel_π_eq_zero /-
-- Note we've already proved `epi_iff_exact_zero_right : epi f ↔ exact f (0 : Y ⟶ Z)`
-- in any preadditive category with equalizers and images.
theorem epi_iff_cokernel_π_eq_zero : Epi f ↔ cokernel.π f = 0 :=
- (tFAE_epi X f).out 0 1
+ (tfae_epi X f).out 0 1
#align category_theory.abelian.epi_iff_cokernel_π_eq_zero CategoryTheory.Abelian.epi_iff_cokernel_π_eq_zero
+-/
end
section Opposite
+/- warning: category_theory.abelian.exact.op -> CategoryTheory.Abelian.Exact.op is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g) -> (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f))
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g) -> (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f))
+Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.op CategoryTheory.Abelian.Exact.opₓ'. -/
theorem Exact.op (h : Exact f g) : Exact g.op f.op :=
by
rw [exact_iff]
@@ -310,18 +370,36 @@ theorem Exact.op (h : Exact f g) : Exact g.op f.op :=
category.assoc, kernel_comp_cokernel_assoc _ _ h, zero_comp, comp_zero, unop_zero]
#align category_theory.abelian.exact.op CategoryTheory.Abelian.Exact.op
+/- warning: category_theory.abelian.exact.op_iff -> CategoryTheory.Abelian.Exact.op_iff is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), Iff (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) X Y Z f g)
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : C} {Y : C} {Z : C} (f : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z), Iff (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) (Opposite.op.{succ u2} C Z) (Opposite.op.{succ u2} C Y) (Opposite.op.{succ u2} C X) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z g) (Quiver.Hom.op.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y f)) (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) X Y Z f g)
+Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.op_iff CategoryTheory.Abelian.Exact.op_iffₓ'. -/
theorem Exact.op_iff : Exact g.op f.op ↔ Exact f g :=
⟨fun e => by
rw [← is_equivalence.exact_iff _ _ (op_op_equivalence C).inverse]
exact exact.op _ _ e, Exact.op _ _⟩
#align category_theory.abelian.exact.op_iff CategoryTheory.Abelian.Exact.op_iff
+/- warning: category_theory.abelian.exact.unop -> CategoryTheory.Abelian.Exact.unop is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) X Y Z g f) -> (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g))
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) X Y Z g f) -> (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g))
+Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.unop CategoryTheory.Abelian.Exact.unopₓ'. -/
theorem Exact.unop {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) (h : Exact g f) : Exact f.unop g.unop :=
by
rw [← f.op_unop, ← g.op_unop] at h
rwa [← exact.op_iff]
#align category_theory.abelian.exact.unop CategoryTheory.Abelian.Exact.unop
+/- warning: category_theory.abelian.exact.unop_iff -> CategoryTheory.Abelian.Exact.unop_iff is a dubious translation:
+lean 3 declaration is
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasKernels.{u1, u2} C _inst_1 _inst_2) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g)) (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Abelian.hasKernels.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Opposite.abelian.{u2, u1} C _inst_1 _inst_2)) X Y Z g f)
+but is expected to have type
+ forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Abelian.{u1, u2} C _inst_1] {X : Opposite.{succ u2} C} {Y : Opposite.{succ u2} C} {Z : Opposite.{succ u2} C} (g : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) X Y) (f : Quiver.Hom.{succ u1, u2} (Opposite.{succ u2} C) (Quiver.opposite.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1))) Y Z), Iff (CategoryTheory.Exact.{u1, u2} C _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} C _inst_1 _inst_2)) (Opposite.unop.{succ u2} C Z) (Opposite.unop.{succ u2} C Y) (Opposite.unop.{succ u2} C X) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z f) (Quiver.Hom.unop.{u2, succ u1} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y g)) (CategoryTheory.Exact.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.instAbelianOppositeOpposite.{u2, u1} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} (Opposite.{succ u2} C) (CategoryTheory.Category.opposite.{u1, u2} C _inst_1) (CategoryTheory.Limits.hasZeroMorphismsOpposite.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} C _inst_1 _inst_2))) (CategoryTheory.Limits.hasEqualizers_opposite.{u1, u2} C _inst_1 (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} C _inst_1 _inst_2))) X Y Z g f)
+Case conversion may be inaccurate. Consider using '#align category_theory.abelian.exact.unop_iff CategoryTheory.Abelian.Exact.unop_iffₓ'. -/
theorem Exact.unop_iff {X Y Z : Cᵒᵖ} (g : X ⟶ Y) (f : Y ⟶ Z) : Exact f.unop g.unop ↔ Exact g f :=
⟨fun e => by rwa [← f.op_unop, ← g.op_unop, ← exact.op_iff] at e, fun e => @Exact.unop _ _ g f e⟩
#align category_theory.abelian.exact.unop_iff CategoryTheory.Abelian.Exact.unop_iff
@@ -338,6 +416,7 @@ variable {D : Type u₂} [Category.{v₂} D] [Abelian D]
variable (F : C ⥤ D) [PreservesZeroMorphisms F]
+#print CategoryTheory.Functor.reflectsExactSequencesOfPreservesZeroMorphismsOfFaithful /-
instance (priority := 100) reflectsExactSequencesOfPreservesZeroMorphismsOfFaithful [Faithful F] :
ReflectsExactSequences F
where reflects X Y Z f g hfg :=
@@ -352,6 +431,7 @@ instance (priority := 100) reflectsExactSequencesOfPreservesZeroMorphismsOfFaith
(by simp only [← F.map_comp, cokernel.condition, CategoryTheory.Functor.map_zero])
rw [F.map_comp, ← hk, ← hl, category.assoc, reassoc_of hfg.2, zero_comp, comp_zero]
#align category_theory.functor.reflects_exact_sequences_of_preserves_zero_morphisms_of_faithful CategoryTheory.Functor.reflectsExactSequencesOfPreservesZeroMorphismsOfFaithful
+-/
end
@@ -371,6 +451,12 @@ section
variable [PreservesFiniteLimits L] [PreservesFiniteColimits L]
+/- warning: category_theory.functor.map_exact -> CategoryTheory.Functor.map_exact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4) [_inst_7 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] [_inst_8 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z), (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4) [_inst_7 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] [_inst_8 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z), (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.map_exact CategoryTheory.Functor.map_exactₓ'. -/
/-- A functor preserving finite limits and finite colimits preserves exactness. The converse
result is also true, see `functor.preserves_finite_limits_of_map_exact` and
`functor.preserves_finite_colimits_of_map_exact`. -/
@@ -393,6 +479,12 @@ include h
open ZeroObject
+/- warning: category_theory.functor.preserves_zero_morphisms_of_map_exact -> CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Functor.PreservesZeroMorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) L)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Functor.PreservesZeroMorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) L)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_zero_morphisms_of_map_exact CategoryTheory.Functor.preservesZeroMorphisms_of_map_exactₓ'. -/
/-- A functor which preserves exactness preserves zero morphisms. -/
theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
by
@@ -401,6 +493,12 @@ theorem preservesZeroMorphisms_of_map_exact : L.PreservesZeroMorphisms :=
exact preserves_zero_morphisms_of_map_zero_object (id_zero_equiv_iso_zero _ h)
#align category_theory.functor.preserves_zero_morphisms_of_map_exact CategoryTheory.Functor.preservesZeroMorphisms_of_map_exact
+/- warning: category_theory.functor.preserves_monomorphisms_of_map_exact -> CategoryTheory.Functor.preservesMonomorphisms_of_map_exact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Functor.PreservesMonomorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Functor.PreservesMonomorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_monomorphisms_of_map_exact CategoryTheory.Functor.preservesMonomorphisms_of_map_exactₓ'. -/
/-- A functor which preserves exactness preserves monomorphisms. -/
theorem preservesMonomorphisms_of_map_exact : L.PreservesMonomorphisms :=
{
@@ -412,6 +510,12 @@ theorem preservesMonomorphisms_of_map_exact : L.PreservesMonomorphisms :=
exact h (((tfae_mono 0 f).out 0 2).mp hf) }
#align category_theory.functor.preserves_monomorphisms_of_map_exact CategoryTheory.Functor.preservesMonomorphisms_of_map_exact
+/- warning: category_theory.functor.preserves_epimorphisms_of_map_exact -> CategoryTheory.Functor.preservesEpimorphisms_of_map_exact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Functor.PreservesEpimorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Functor.PreservesEpimorphisms.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_epimorphisms_of_map_exact CategoryTheory.Functor.preservesEpimorphisms_of_map_exactₓ'. -/
/-- A functor which preserves exactness preserves epimorphisms. -/
theorem preservesEpimorphisms_of_map_exact : L.PreservesEpimorphisms :=
{
@@ -423,6 +527,12 @@ theorem preservesEpimorphisms_of_map_exact : L.PreservesEpimorphisms :=
exact h (((tfae_epi 0 f).out 0 2).mp hf) }
#align category_theory.functor.preserves_epimorphisms_of_map_exact CategoryTheory.Functor.preservesEpimorphisms_of_map_exact
+/- warning: category_theory.functor.preserves_kernels_of_map_exact -> CategoryTheory.Functor.preservesKernelsOfMapExact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesKernelsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesKernelsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesLimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y))))) L)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesLimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y)))) L)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_kernels_of_map_exact CategoryTheory.Functor.preservesKernelsOfMapExactₓ'. -/
/-- A functor which preserves exactness preserves kernels. -/
def preservesKernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesLimit (parallelPair f 0) L
where preserves c ic :=
@@ -439,6 +549,12 @@ def preservesKernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesLimit (paralle
exact hf.of_iso_limit ((cones.functoriality _ L).mapIso (iso_of_ι _).symm)
#align category_theory.functor.preserves_kernels_of_map_exact CategoryTheory.Functor.preservesKernelsOfMapExact
+/- warning: category_theory.functor.preserves_cokernels_of_map_exact -> CategoryTheory.Functor.preservesCokernelsOfMapExact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesCokernelsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesCokernelsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesColimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y))))) L)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (forall (X : A) (Y : A) (f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y), CategoryTheory.Limits.PreservesColimit.{0, 0, u1, u2, u3, u4} A _inst_3 B _inst_4 CategoryTheory.Limits.WalkingParallelPair CategoryTheory.Limits.walkingParallelPairHomCategory (CategoryTheory.Limits.parallelPair.{u1, u3} A _inst_3 X Y f (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) X Y)))) L)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_cokernels_of_map_exact CategoryTheory.Functor.preservesCokernelsOfMapExactₓ'. -/
/-- A functor which preserves exactness preserves zero cokernels. -/
def preservesCokernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesColimit (parallelPair f 0) L
where preserves c ic :=
@@ -455,6 +571,12 @@ def preservesCokernelsOfMapExact (X Y : A) (f : X ⟶ Y) : PreservesColimit (par
exact hf.of_iso_colimit ((cocones.functoriality _ L).mapIso (iso_of_π _).symm)
#align category_theory.functor.preserves_cokernels_of_map_exact CategoryTheory.Functor.preservesCokernelsOfMapExact
+/- warning: category_theory.functor.preserves_finite_limits_of_map_exact -> CategoryTheory.Functor.preservesFiniteLimitsOfMapExact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesFiniteLimitsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesFiniteLimitsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteLimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_finite_limits_of_map_exact CategoryTheory.Functor.preservesFiniteLimitsOfMapExactₓ'. -/
/-- A functor which preserves exactness is left exact, i.e. preserves finite limits.
This is part of the inverse implication to `functor.map_exact`. -/
def preservesFiniteLimitsOfMapExact : PreservesFiniteLimits L :=
@@ -464,6 +586,12 @@ def preservesFiniteLimitsOfMapExact : PreservesFiniteLimits L :=
apply preserves_finite_limits_of_preserves_kernels
#align category_theory.functor.preserves_finite_limits_of_map_exact CategoryTheory.Functor.preservesFiniteLimitsOfMapExact
+/- warning: category_theory.functor.preserves_finite_colimits_of_map_exact -> CategoryTheory.Functor.preservesFiniteColimitsOfMapExact is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Functor.preservesFiniteColimitsOfMapExact._proof_1.{u3, u1} A _inst_3 _inst_5) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasKernels.{u1, u3} A _inst_3 _inst_5) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Functor.preservesFiniteColimitsOfMapExact._proof_2.{u4, u2} B _inst_4 _inst_6) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasKernels.{u2, u4} B _inst_4 _inst_6) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y) (CategoryTheory.Functor.obj.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Z) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L X Y f) (CategoryTheory.Functor.map.{u1, u2, u3, u4} A _inst_3 B _inst_4 L Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u1, u3} A] [_inst_4 : CategoryTheory.Category.{u2, u4} B] [_inst_5 : CategoryTheory.Abelian.{u1, u3} A _inst_3] [_inst_6 : CategoryTheory.Abelian.{u2, u4} B _inst_4] (L : CategoryTheory.Functor.{u1, u2, u3, u4} A _inst_3 B _inst_4), (forall {{X : A}} {{Y : A}} {{Z : A}} {f : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) X Y} {g : Quiver.Hom.{succ u1, u3} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) Y Z}, (CategoryTheory.Exact.{u1, u3} A _inst_3 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u3} A _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u3} A _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u3} A _inst_3 _inst_5)) (CategoryTheory.Abelian.hasEqualizers.{u1, u3} A _inst_3 _inst_5)) X Y Z f g) -> (CategoryTheory.Exact.{u2, u4} B _inst_4 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u2, u4} B _inst_4 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u2, u4} B _inst_4 (CategoryTheory.Abelian.toPreadditive.{u2, u4} B _inst_4 _inst_6)) (CategoryTheory.Abelian.hasEqualizers.{u2, u4} B _inst_4 _inst_6)) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y) (Prefunctor.obj.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Z) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) X Y f) (Prefunctor.map.{succ u1, succ u2, u3, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u3} A (CategoryTheory.Category.toCategoryStruct.{u1, u3} A _inst_3)) B (CategoryTheory.CategoryStruct.toQuiver.{u2, u4} B (CategoryTheory.Category.toCategoryStruct.{u2, u4} B _inst_4)) (CategoryTheory.Functor.toPrefunctor.{u1, u2, u3, u4} A _inst_3 B _inst_4 L) Y Z g))) -> (CategoryTheory.Limits.PreservesFiniteColimits.{u1, u2, u3, u4} A _inst_3 B _inst_4 L)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.preserves_finite_colimits_of_map_exact CategoryTheory.Functor.preservesFiniteColimitsOfMapExactₓ'. -/
/-- A functor which preserves exactness is right exact, i.e. preserves finite colimits.
This is part of the inverse implication to `functor.map_exact`. -/
def preservesFiniteColimitsOfMapExact : PreservesFiniteColimits L :=
@@ -477,6 +605,7 @@ end
section
+#print CategoryTheory.Functor.preservesFiniteLimitsOfPreservesMonosAndCokernels /-
/-- A functor preserving zero morphisms, monos, and cokernels preserves finite limits. -/
def preservesFiniteLimitsOfPreservesMonosAndCokernels [PreservesZeroMorphisms L]
[PreservesMonomorphisms L] [∀ {X Y} (f : X ⟶ Y), PreservesColimit (parallelPair f 0) L] :
@@ -488,7 +617,9 @@ def preservesFiniteLimitsOfPreservesMonosAndCokernels [PreservesZeroMorphisms L]
exact
exact_of_is_cokernel _ _ _ (is_colimit_cofork_map_of_is_colimit' L _ (is_colimit_coimage f g h))
#align category_theory.functor.preserves_finite_limits_of_preserves_monos_and_cokernels CategoryTheory.Functor.preservesFiniteLimitsOfPreservesMonosAndCokernels
+-/
+#print CategoryTheory.Functor.preservesFiniteColimitsOfPreservesEpisAndKernels /-
/-- A functor preserving zero morphisms, epis, and kernels preserves finite colimits. -/
def preservesFiniteColimitsOfPreservesEpisAndKernels [PreservesZeroMorphisms L]
[PreservesEpimorphisms L] [∀ {X Y} (f : X ⟶ Y), PreservesLimit (parallelPair f 0) L] :
@@ -499,6 +630,7 @@ def preservesFiniteColimitsOfPreservesEpisAndKernels [PreservesZeroMorphisms L]
rw [← abelian.image.fac f, L.map_comp, exact_epi_comp_iff]
exact exact_of_is_kernel _ _ _ (is_limit_fork_map_of_is_limit' L _ (is_limit_image f g h))
#align category_theory.functor.preserves_finite_colimits_of_preserves_epis_and_kernels CategoryTheory.Functor.preservesFiniteColimitsOfPreservesEpisAndKernels
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/cd8fafa2fac98e1a67097e8a91ad9901cfde48af
@@ -180,11 +180,11 @@ def isColimitImage (h : Exact f g) :
(cancel_mono (Limits.image.ι g)).1 <| by simp
#align category_theory.abelian.is_colimit_image CategoryTheory.Abelian.isColimitImage
-theorem exactCokernel : Exact f (cokernel.π f) :=
+theorem exact_cokernel : Exact f (cokernel.π f) :=
by
rw [exact_iff]
tidy
-#align category_theory.abelian.exact_cokernel CategoryTheory.Abelian.exactCokernel
+#align category_theory.abelian.exact_cokernel CategoryTheory.Abelian.exact_cokernel
instance (h : Exact f g) : Mono (cokernel.desc f g h.w) :=
suffices h :
@@ -231,21 +231,21 @@ def isLimitOfExactOfMono [Mono f] (h : Exact f g) : IsLimit (KernelFork.ofι _ h
fun j => by cases j <;> simp
#align category_theory.abelian.is_limit_of_exact_of_mono CategoryTheory.Abelian.isLimitOfExactOfMono
-theorem exactOfIsCokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.ofπ _ w)) : Exact f g :=
+theorem exact_of_is_cokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.ofπ _ w)) : Exact f g :=
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (cokernel_cofork.of_π _ (cokernel.condition f)) walking_parallel_pair.one
simp only [cofork.of_π_ι_app] at this
rw [← this, ← category.assoc, kernel.condition, zero_comp]
-#align category_theory.abelian.exact_of_is_cokernel CategoryTheory.Abelian.exactOfIsCokernel
+#align category_theory.abelian.exact_of_is_cokernel CategoryTheory.Abelian.exact_of_is_cokernel
-theorem exactOfIsKernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w)) : Exact f g :=
+theorem exact_of_is_kernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w)) : Exact f g :=
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (kernel_fork.of_ι _ (kernel.condition g)) walking_parallel_pair.zero
simp only [fork.of_ι_π_app] at this
rw [← this, category.assoc, cokernel.condition, comp_zero]
-#align category_theory.abelian.exact_of_is_kernel CategoryTheory.Abelian.exactOfIsKernel
+#align category_theory.abelian.exact_of_is_kernel CategoryTheory.Abelian.exact_of_is_kernel
theorem exact_iff_exact_image_ι : Exact f g ↔ Exact (Abelian.image.ι f) g := by
conv_lhs => rw [← abelian.image.fac f] <;> apply exact_epi_comp_iff
@@ -374,13 +374,14 @@ variable [PreservesFiniteLimits L] [PreservesFiniteColimits L]
/-- A functor preserving finite limits and finite colimits preserves exactness. The converse
result is also true, see `functor.preserves_finite_limits_of_map_exact` and
`functor.preserves_finite_colimits_of_map_exact`. -/
-theorem mapExact {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (e1 : Exact f g) : Exact (L.map f) (L.map g) :=
+theorem map_exact {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (e1 : Exact f g) :
+ Exact (L.map f) (L.map g) :=
by
let hcoker := is_colimit_of_has_cokernel_of_preserves_colimit L f
let hker := is_limit_of_has_kernel_of_preserves_limit L g
refine' (exact_iff' _ _ hker hcoker).2 ⟨by simp [← L.map_comp, e1.1], _⟩
rw [fork.ι_of_ι, cofork.π_of_π, ← L.map_comp, kernel_comp_cokernel _ _ e1, L.map_zero]
-#align category_theory.functor.map_exact CategoryTheory.Functor.mapExact
+#align category_theory.functor.map_exact CategoryTheory.Functor.map_exact
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/17ad94b4953419f3e3ce3e77da3239c62d1d09f0
@@ -180,11 +180,11 @@ def isColimitImage (h : Exact f g) :
(cancel_mono (Limits.image.ι g)).1 <| by simp
#align category_theory.abelian.is_colimit_image CategoryTheory.Abelian.isColimitImage
-theorem exact_cokernel : Exact f (cokernel.π f) :=
+theorem exactCokernel : Exact f (cokernel.π f) :=
by
rw [exact_iff]
tidy
-#align category_theory.abelian.exact_cokernel CategoryTheory.Abelian.exact_cokernel
+#align category_theory.abelian.exact_cokernel CategoryTheory.Abelian.exactCokernel
instance (h : Exact f g) : Mono (cokernel.desc f g h.w) :=
suffices h :
@@ -231,21 +231,21 @@ def isLimitOfExactOfMono [Mono f] (h : Exact f g) : IsLimit (KernelFork.ofι _ h
fun j => by cases j <;> simp
#align category_theory.abelian.is_limit_of_exact_of_mono CategoryTheory.Abelian.isLimitOfExactOfMono
-theorem exact_of_is_cokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.ofπ _ w)) : Exact f g :=
+theorem exactOfIsCokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.ofπ _ w)) : Exact f g :=
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (cokernel_cofork.of_π _ (cokernel.condition f)) walking_parallel_pair.one
simp only [cofork.of_π_ι_app] at this
rw [← this, ← category.assoc, kernel.condition, zero_comp]
-#align category_theory.abelian.exact_of_is_cokernel CategoryTheory.Abelian.exact_of_is_cokernel
+#align category_theory.abelian.exact_of_is_cokernel CategoryTheory.Abelian.exactOfIsCokernel
-theorem exact_of_is_kernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w)) : Exact f g :=
+theorem exactOfIsKernel (w : f ≫ g = 0) (h : IsLimit (KernelFork.ofι _ w)) : Exact f g :=
by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (kernel_fork.of_ι _ (kernel.condition g)) walking_parallel_pair.zero
simp only [fork.of_ι_π_app] at this
rw [← this, category.assoc, cokernel.condition, comp_zero]
-#align category_theory.abelian.exact_of_is_kernel CategoryTheory.Abelian.exact_of_is_kernel
+#align category_theory.abelian.exact_of_is_kernel CategoryTheory.Abelian.exactOfIsKernel
theorem exact_iff_exact_image_ι : Exact f g ↔ Exact (Abelian.image.ι f) g := by
conv_lhs => rw [← abelian.image.fac f] <;> apply exact_epi_comp_iff
@@ -374,14 +374,13 @@ variable [PreservesFiniteLimits L] [PreservesFiniteColimits L]
/-- A functor preserving finite limits and finite colimits preserves exactness. The converse
result is also true, see `functor.preserves_finite_limits_of_map_exact` and
`functor.preserves_finite_colimits_of_map_exact`. -/
-theorem map_exact {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (e1 : Exact f g) :
- Exact (L.map f) (L.map g) :=
+theorem mapExact {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (e1 : Exact f g) : Exact (L.map f) (L.map g) :=
by
let hcoker := is_colimit_of_has_cokernel_of_preserves_colimit L f
let hker := is_limit_of_has_kernel_of_preserves_limit L g
refine' (exact_iff' _ _ hker hcoker).2 ⟨by simp [← L.map_comp, e1.1], _⟩
rw [fork.ι_of_ι, cofork.π_of_π, ← L.map_comp, kernel_comp_cokernel _ _ e1, L.map_zero]
-#align category_theory.functor.map_exact CategoryTheory.Functor.map_exact
+#align category_theory.functor.map_exact CategoryTheory.Functor.mapExact
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
These notions on functors are now Functor.Full
, Functor.Faithful
, Functor.EssSurj
, Functor.IsEquivalence
, Functor.ReflectsIsomorphisms
. Deprecated aliases are introduced for the previous names.
@@ -103,7 +103,7 @@ theorem exact_tfae :
#align category_theory.abelian.exact_tfae CategoryTheory.Abelian.exact_tfae
nonrec theorem IsEquivalence.exact_iff {D : Type u₁} [Category.{v₁} D] [Abelian D] (F : C ⥤ D)
- [IsEquivalence F] : Exact (F.map f) (F.map g) ↔ Exact f g := by
+ [F.IsEquivalence] : Exact (F.map f) (F.map g) ↔ Exact f g := by
simp only [exact_iff, ← F.map_eq_zero_iff, F.map_comp, Category.assoc, ←
kernelComparison_comp_ι g F, ← π_comp_cokernelComparison f F]
rw [IsIso.comp_left_eq_zero (kernelComparison g F), ← Category.assoc,
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -325,7 +325,6 @@ namespace Functor
section
variable {D : Type u₂} [Category.{v₂} D] [Abelian D]
-
variable (F : C ⥤ D) [PreservesZeroMorphisms F]
instance (priority := 100) reflectsExactSequencesOfPreservesZeroMorphismsOfFaithful [Faithful F] :
@@ -351,9 +350,7 @@ namespace Functor
open Limits Abelian
variable {A : Type u₁} {B : Type u₂} [Category.{v₁} A] [Category.{v₂} B]
-
variable [Abelian A] [Abelian B]
-
variable (L : A ⥤ B)
section
I removed some of the tactics that were not used and are hopefully uncontroversial arising from the linter at #11308.
As the commit messages should convey, the removed tactics are, essentially,
push_cast
norm_cast
congr
norm_num
dsimp
funext
intro
infer_instance
@@ -77,8 +77,7 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
· refine kernel.lift (cokernel.π f) u ?_ ≫ (imageIsoImage f).hom ≫ (imageSubobjectIso _).inv
rw [← kernel.lift_ι g u hu, Category.assoc, h.2, comp_zero]
· aesop_cat
- · intros
- rw [← cancel_mono (imageSubobject f).arrow, h]
+ · rw [← cancel_mono (imageSubobject f).arrow, h]
simp
#align category_theory.abelian.exact_iff CategoryTheory.Abelian.exact_iff
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -165,7 +165,7 @@ theorem exact_cokernel : Exact f (cokernel.π f) := by
aesop_cat
#align category_theory.abelian.exact_cokernel CategoryTheory.Abelian.exact_cokernel
--- porting note: this can no longer be an instance in Lean4
+-- Porting note: this can no longer be an instance in Lean4
lemma mono_cokernel_desc_of_exact (h : Exact f g) : Mono (cokernel.desc f g h.w) :=
suffices h : cokernel.desc f g h.w =
(IsColimit.coconePointUniqueUpToIso (colimit.isColimit _) (isColimitImage f g h)).hom ≫
@@ -173,14 +173,14 @@ lemma mono_cokernel_desc_of_exact (h : Exact f g) : Mono (cokernel.desc f g h.w)
from h.symm ▸ mono_comp _ _
(cancel_epi (cokernel.π f)).1 <| by simp
--- porting note: this can no longer be an instance in Lean4
+-- Porting note: this can no longer be an instance in Lean4
/-- If `ex : Exact f g` and `epi g`, then `cokernel.desc _ _ ex.w` is an isomorphism. -/
lemma isIso_cokernel_desc_of_exact_of_epi (ex : Exact f g) [Epi g] :
IsIso (cokernel.desc f g ex.w) :=
have := mono_cokernel_desc_of_exact _ _ ex
isIso_of_mono_of_epi (Limits.cokernel.desc f g ex.w)
--- porting note: removed the simp attribute because the lemma may never apply automatically
+-- Porting note: removed the simp attribute because the lemma may never apply automatically
@[reassoc (attr := nolint unusedHavesSuffices)]
theorem cokernel.desc.inv [Epi g] (ex : Exact f g) :
have := isIso_cokernel_desc_of_exact_of_epi _ _ ex
@@ -189,12 +189,12 @@ theorem cokernel.desc.inv [Epi g] (ex : Exact f g) :
simp
#align category_theory.abelian.cokernel.desc.inv CategoryTheory.Abelian.cokernel.desc.inv
--- porting note: this can no longer be an instance in Lean4
+-- Porting note: this can no longer be an instance in Lean4
lemma isIso_kernel_lift_of_exact_of_mono (ex : Exact f g) [Mono f] : IsIso (kernel.lift g f ex.w) :=
have := ex.epi_kernel_lift
isIso_of_mono_of_epi (Limits.kernel.lift g f ex.w)
--- porting note: removed the simp attribute because the lemma may never apply automatically
+-- Porting note: removed the simp attribute because the lemma may never apply automatically
@[reassoc (attr := nolint unusedHavesSuffices)]
theorem kernel.lift.inv [Mono f] (ex : Exact f g) :
have := isIso_kernel_lift_of_exact_of_mono _ _ ex
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -67,9 +67,9 @@ theorem exact_iff : Exact f g ↔ f ≫ g = 0 ∧ kernel.ι g ≫ cokernel.π f
constructor
· exact fun h ↦ ⟨h.1, kernel_comp_cokernel f g h⟩
· refine fun h ↦ ⟨h.1, ?_⟩
- suffices hl :
- IsLimit (KernelFork.ofι (imageSubobject f).arrow (imageSubobject_arrow_comp_eq_zero h.1))
- · have : imageToKernel f g h.1 = (hl.conePointUniqueUpToIso (limit.isLimit _)).hom ≫
+ suffices hl : IsLimit
+ (KernelFork.ofι (imageSubobject f).arrow (imageSubobject_arrow_comp_eq_zero h.1)) by
+ have : imageToKernel f g h.1 = (hl.conePointUniqueUpToIso (limit.isLimit _)).hom ≫
(kernelSubobjectIso _).inv := by ext; simp
rw [this]
infer_instance
@@ -2,11 +2,6 @@
Copyright (c) 2020 Markus Himmel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel, Adam Topaz, Johan Commelin, Jakob von Raumer
-
-! This file was ported from Lean 3 source module category_theory.abelian.exact
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Abelian.Opposite
import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Zero
@@ -16,6 +11,8 @@ import Mathlib.CategoryTheory.Adjunction.Limits
import Mathlib.Algebra.Homology.Exact
import Mathlib.Tactic.TFAE
+#align_import category_theory.abelian.exact from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
+
/-!
# Exact sequences in abelian categories
@@ -152,7 +152,7 @@ def isColimitCoimage (h : Exact f g) :
(by rw [← cokernel.π_desc f u hu, ← Category.assoc, h.2, zero_comp]))
(by aesop_cat) _
intros _ _ _ _ hm
- apply coequalizer.hom_ext
+ ext
rw [hm, cokernel.π_desc]
#align category_theory.abelian.is_colimit_coimage CategoryTheory.Abelian.isColimitCoimage
@@ -366,7 +366,7 @@ variable [PreservesFiniteLimits L] [PreservesFiniteColimits L]
/-- A functor preserving finite limits and finite colimits preserves exactness. The converse
result is also true, see `Functor.preservesFiniteLimitsOfMapExact` and
-`Functor.preservesFiniteCoimitsOfMapExact`. -/
+`Functor.preservesFiniteColimitsOfMapExact`. -/
theorem map_exact {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (e1 : Exact f g) :
Exact (L.map f) (L.map g) := by
let hcoker := isColimitOfHasCokernelOfPreservesColimit L f
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".
@@ -224,8 +224,8 @@ def isLimitOfExactOfMono [Mono f] (h : Exact f g) : IsLimit (KernelFork.ofι _ h
fun j => by cases j <;> simp
#align category_theory.abelian.is_limit_of_exact_of_mono CategoryTheory.Abelian.isLimitOfExactOfMono
-theorem exact_of_is_cokernel (w : f ≫ g = 0) (h : IsColimit (CokernelCofork.ofπ _ w)) : Exact f g :=
- by
+theorem exact_of_is_cokernel (w : f ≫ g = 0)
+ (h : IsColimit (CokernelCofork.ofπ _ w)) : Exact f g := by
refine' (exact_iff _ _).2 ⟨w, _⟩
have := h.fac (CokernelCofork.ofπ _ (cokernel.condition f)) WalkingParallelPair.one
simp only [Cofork.ofπ_ι_app] at this
Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
The unported dependencies are