category_theory.abelian.exactMathlib.CategoryTheory.Abelian.Exact

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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
Diff
@@ -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
 -/
Diff
@@ -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"
 
Diff
@@ -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
 
Diff
@@ -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
 
Diff
@@ -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. -/
Diff
@@ -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
 
Diff
@@ -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 :=
Diff
@@ -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 :=
Diff
@@ -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
Diff
@@ -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 :=
Diff
@@ -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
Diff
@@ -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.
 
Diff
@@ -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
 
Diff
@@ -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
 
Diff
@@ -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
 

Changes in mathlib4

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

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

Diff
@@ -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,
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -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
chore: remove unused tactics (#11351)

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
Diff
@@ -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
 
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -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
chore: remove stream-of-consciousness uses of 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>

Diff
@@ -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
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2020 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
 
feat: more consistent use of ext, and updating porting notes. (#5242)

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

Diff
@@ -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
 
chore: fix many typos (#4983)

These are all doc fixes

Diff
@@ -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
chore: bye-bye, solo bys! (#3825)

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

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

Diff
@@ -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
feat: port CategoryTheory.Abelian.Exact (#3638)

Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>

Dependencies 8 + 476

477 files ported (98.4%)
188675 lines ported (98.4%)
Show graph

The unported dependencies are