category_theory.abelian.homologyMathlib.CategoryTheory.Abelian.Homology

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -80,10 +80,10 @@ instance : Mono (homologyCToK f g w) :=
   apply pseudoelement.mono_of_zero_of_map_zero
   intro a ha
   obtain ⟨a, rfl⟩ := pseudoelement.pseudo_surjective_of_epi (cokernel.π (kernel.lift g f w)) a
-  apply_fun kernel.ι (cokernel.desc f g w) at ha 
+  apply_fun kernel.ι (cokernel.desc f g w) at ha
   simp only [← pseudoelement.comp_apply, cokernel.π_desc, kernel.lift_ι,
-    pseudoelement.apply_zero] at ha 
-  simp only [pseudoelement.comp_apply] at ha 
+    pseudoelement.apply_zero] at ha
+  simp only [pseudoelement.comp_apply] at ha
   obtain ⟨b, hb⟩ : ∃ b, f b = _ := (pseudoelement.pseudo_exact_of_exact (exact_cokernel f)).2 _ ha
   rsuffices ⟨c, rfl⟩ : ∃ c, kernel.lift g f w c = a
   · simp [← pseudoelement.comp_apply]
@@ -100,7 +100,7 @@ instance : Epi (homologyCToK f g w) :=
   obtain ⟨c, hc⟩ : ∃ c, cokernel.π f c = b
   apply pseudoelement.pseudo_surjective_of_epi (cokernel.π f)
   have : g c = 0 := by
-    dsimp [b] at hc 
+    dsimp [b] at hc
     rw [show g = cokernel.π f ≫ cokernel.desc f g w by simp, pseudoelement.comp_apply, hc]
     simp [← pseudoelement.comp_apply]
   obtain ⟨d, hd⟩ : ∃ d, kernel.ι g d = c := by
@@ -184,13 +184,13 @@ theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 := by dsimp [ι]; si
 @[ext]
 theorem hom_from_ext {W : A} (a b : homology' f g w ⟶ W) (h : π' f g w ≫ a = π' f g w ≫ b) :
     a = b := by
-  dsimp [π'] at h 
+  dsimp [π'] at h
   apply_fun fun e => (homology'IsoCokernelLift f g w).inv ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (homology'IsoCokernelLift f g w).Hom ≫ e at hh 
+    apply_fun fun e => (homology'IsoCokernelLift f g w).Hom ≫ e at hh
     simpa using hh
-  simp only [category.assoc] at h 
+  simp only [category.assoc] at h
   exact coequalizer.hom_ext h
 #align homology.hom_from_ext homology'.hom_from_ext
 -/
@@ -199,13 +199,13 @@ theorem hom_from_ext {W : A} (a b : homology' f g w ⟶ W) (h : π' f g w ≫ a
 @[ext]
 theorem hom_to_ext {W : A} (a b : W ⟶ homology' f g w) (h : a ≫ ι f g w = b ≫ ι f g w) : a = b :=
   by
-  dsimp [ι] at h 
+  dsimp [ι] at h
   apply_fun fun e => e ≫ (homology'IsoKernelDesc f g w).Hom
   swap
   · intro i j hh
-    apply_fun fun e => e ≫ (homology'IsoKernelDesc f g w).inv at hh 
+    apply_fun fun e => e ≫ (homology'IsoKernelDesc f g w).inv at hh
     simpa using hh
-  simp only [← category.assoc] at h 
+  simp only [← category.assoc] at h
   exact equalizer.hom_ext h
 #align homology.hom_to_ext homology'.hom_to_ext
 -/
@@ -241,7 +241,7 @@ theorem π'_map (α β h) :
   apply_fun fun e => (kernel_subobject_iso _).Hom ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (kernel_subobject_iso _).inv ≫ e at hh 
+    apply_fun fun e => (kernel_subobject_iso _).inv ≫ e at hh
     simpa using hh
   dsimp [map]
   simp only [π'_eq_π_assoc]
Diff
@@ -116,124 +116,124 @@ instance (w : f ≫ g = 0) : IsIso (homologyCToK f g w) :=
 
 end CategoryTheory.Abelian
 
-#print homologyIsoKernelDesc /-
+#print homology'IsoKernelDesc /-
 /-- The homology associated to `f` and `g` is isomorphic to a kernel. -/
-def homologyIsoKernelDesc : homology f g w ≅ kernel (cokernel.desc f g w) :=
-  homologyIsoCokernelLift _ _ _ ≪≫ asIso (CategoryTheory.Abelian.homologyCToK _ _ _)
-#align homology_iso_kernel_desc homologyIsoKernelDesc
+def homology'IsoKernelDesc : homology' f g w ≅ kernel (cokernel.desc f g w) :=
+  homology'IsoCokernelLift _ _ _ ≪≫ asIso (CategoryTheory.Abelian.homologyCToK _ _ _)
+#align homology_iso_kernel_desc homology'IsoKernelDesc
 -/
 
-namespace homology
+namespace homology'
 
-#print homology.π' /-
+#print homology'.π' /-
 -- `homology.π` is taken
 /-- The canonical map from the kernel of `g` to the homology of `f` and `g`. -/
-def π' : kernel g ⟶ homology f g w :=
-  cokernel.π _ ≫ (homologyIsoCokernelLift _ _ _).inv
-#align homology.π' homology.π'
+def π' : kernel g ⟶ homology' f g w :=
+  cokernel.π _ ≫ (homology'IsoCokernelLift _ _ _).inv
+#align homology.π' homology'.π'
 -/
 
-#print homology.ι /-
+#print homology'.ι /-
 /-- The canonical map from the homology of `f` and `g` to the cokernel of `f`. -/
-def ι : homology f g w ⟶ cokernel f :=
-  (homologyIsoKernelDesc _ _ _).Hom ≫ kernel.ι _
-#align homology.ι homology.ι
+def ι : homology' f g w ⟶ cokernel f :=
+  (homology'IsoKernelDesc _ _ _).Hom ≫ kernel.ι _
+#align homology.ι homology'.ι
 -/
 
-#print homology.desc' /-
+#print homology'.desc' /-
 /-- Obtain a morphism from the homology, given a morphism from the kernel. -/
-def desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) : homology f g w ⟶ W :=
-  (homologyIsoCokernelLift _ _ _).Hom ≫ cokernel.desc _ e he
-#align homology.desc' homology.desc'
+def desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) : homology' f g w ⟶ W :=
+  (homology'IsoCokernelLift _ _ _).Hom ≫ cokernel.desc _ e he
+#align homology.desc' homology'.desc'
 -/
 
-#print homology.lift /-
+#print homology'.lift /-
 /-- Obtain a moprhism to the homology, given a morphism to the kernel. -/
-def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W ⟶ homology f g w :=
-  kernel.lift _ e he ≫ (homologyIsoKernelDesc _ _ _).inv
-#align homology.lift homology.lift
+def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W ⟶ homology' f g w :=
+  kernel.lift _ e he ≫ (homology'IsoKernelDesc _ _ _).inv
+#align homology.lift homology'.lift
 -/
 
-#print homology.π'_desc' /-
+#print homology'.π'_desc' /-
 @[simp, reassoc]
 theorem π'_desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) :
     π' f g w ≫ desc' f g w e he = e := by dsimp [π', desc']; simp
-#align homology.π'_desc' homology.π'_desc'
+#align homology.π'_desc' homology'.π'_desc'
 -/
 
-#print homology.lift_ι /-
+#print homology'.lift_ι /-
 @[simp, reassoc]
 theorem lift_ι {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) :
     lift f g w e he ≫ ι _ _ _ = e := by dsimp [ι, lift]; simp
-#align homology.lift_ι homology.lift_ι
+#align homology.lift_ι homology'.lift_ι
 -/
 
-#print homology.condition_π' /-
+#print homology'.condition_π' /-
 @[simp, reassoc]
 theorem condition_π' : kernel.lift g f w ≫ π' f g w = 0 := by dsimp [π']; simp
-#align homology.condition_π' homology.condition_π'
+#align homology.condition_π' homology'.condition_π'
 -/
 
-#print homology.condition_ι /-
+#print homology'.condition_ι /-
 @[simp, reassoc]
 theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 := by dsimp [ι]; simp
-#align homology.condition_ι homology.condition_ι
+#align homology.condition_ι homology'.condition_ι
 -/
 
-#print homology.hom_from_ext /-
+#print homology'.hom_from_ext /-
 @[ext]
-theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W) (h : π' f g w ≫ a = π' f g w ≫ b) : a = b :=
-  by
+theorem hom_from_ext {W : A} (a b : homology' f g w ⟶ W) (h : π' f g w ≫ a = π' f g w ≫ b) :
+    a = b := by
   dsimp [π'] at h 
-  apply_fun fun e => (homologyIsoCokernelLift f g w).inv ≫ e
+  apply_fun fun e => (homology'IsoCokernelLift f g w).inv ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (homologyIsoCokernelLift f g w).Hom ≫ e at hh 
+    apply_fun fun e => (homology'IsoCokernelLift f g w).Hom ≫ e at hh 
     simpa using hh
   simp only [category.assoc] at h 
   exact coequalizer.hom_ext h
-#align homology.hom_from_ext homology.hom_from_ext
+#align homology.hom_from_ext homology'.hom_from_ext
 -/
 
-#print homology.hom_to_ext /-
+#print homology'.hom_to_ext /-
 @[ext]
-theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b ≫ ι f g w) : a = b :=
+theorem hom_to_ext {W : A} (a b : W ⟶ homology' f g w) (h : a ≫ ι f g w = b ≫ ι f g w) : a = b :=
   by
   dsimp [ι] at h 
-  apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).Hom
+  apply_fun fun e => e ≫ (homology'IsoKernelDesc f g w).Hom
   swap
   · intro i j hh
-    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv at hh 
+    apply_fun fun e => e ≫ (homology'IsoKernelDesc f g w).inv at hh 
     simpa using hh
   simp only [← category.assoc] at h 
   exact equalizer.hom_ext h
-#align homology.hom_to_ext homology.hom_to_ext
+#align homology.hom_to_ext homology'.hom_to_ext
 -/
 
-#print homology.π'_ι /-
+#print homology'.π'_ι /-
 @[simp, reassoc]
 theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ := by
-  dsimp [π', ι, homologyIsoKernelDesc]; simp
-#align homology.π'_ι homology.π'_ι
+  dsimp [π', ι, homology'IsoKernelDesc]; simp
+#align homology.π'_ι homology'.π'_ι
 -/
 
-#print homology.π'_eq_π /-
+#print homology'.π'_eq_π /-
 @[simp, reassoc]
 theorem π'_eq_π : (kernelSubobjectIso _).Hom ≫ π' f g w = π _ _ _ :=
   by
-  dsimp [π', homologyIsoCokernelLift]
+  dsimp [π', homology'IsoCokernelLift]
   simp only [← category.assoc]
   rw [iso.comp_inv_eq]
-  dsimp [π, homologyIsoCokernelImageToKernel']
+  dsimp [π, homology'IsoCokernelImageToKernel']
   simp
-#align homology.π'_eq_π homology.π'_eq_π
+#align homology.π'_eq_π homology'.π'_eq_π
 -/
 
 section
 
 variable {X' Y' Z' : A} (f' : X' ⟶ Y') (g' : Y' ⟶ Z') (w' : f' ≫ g' = 0)
 
-#print homology.π'_map /-
+#print homology'.π'_map /-
 @[simp, reassoc]
 theorem π'_map (α β h) :
     π' _ _ _ ≫ map w w' α β h = kernel.map _ _ α.right β.right (by simp [h, β.w.symm]) ≫ π' _ _ _ :=
@@ -258,68 +258,69 @@ theorem π'_map (α β h) :
     simp
   rw [this]
   simp only [category.assoc]
-  dsimp [π', homologyIsoCokernelLift]
+  dsimp [π', homology'IsoCokernelLift]
   simp only [cokernel_iso_of_eq_inv_comp_desc, cokernel.π_desc_assoc]
   congr 1
   · congr; exact h.symm
   · rw [iso.inv_comp_eq, ← category.assoc, iso.eq_comp_inv]
-    dsimp [homologyIsoCokernelImageToKernel']
+    dsimp [homology'IsoCokernelImageToKernel']
     simp
-#align homology.π'_map homology.π'_map
+#align homology.π'_map homology'.π'_map
 -/
 
-#print homology.map_eq_desc'_lift_left /-
+#print homology'.map_eq_desc'_lift_left /-
 theorem map_eq_desc'_lift_left (α β h) :
     map w w' α β h =
-      homology.desc' _ _ _ (homology.lift _ _ _ (kernel.ι _ ≫ β.left ≫ cokernel.π _) (by simp))
+      homology'.desc' _ _ _ (homology'.lift _ _ _ (kernel.ι _ ≫ β.left ≫ cokernel.π _) (by simp))
         (by
           ext; simp only [← h, category.assoc, zero_comp, lift_ι, kernel.lift_ι_assoc]
           erw [← reassoc_of α.w]; simp) :=
   by
-  apply homology.hom_from_ext
+  apply homology'.hom_from_ext
   simp only [π'_map, π'_desc']
   dsimp [π', lift]
   rw [iso.eq_comp_inv]
-  dsimp [homologyIsoKernelDesc]
+  dsimp [homology'IsoKernelDesc]
   ext
   simp [h]
-#align homology.map_eq_desc'_lift_left homology.map_eq_desc'_lift_left
+#align homology.map_eq_desc'_lift_left homology'.map_eq_desc'_lift_left
 -/
 
-#print homology.map_eq_lift_desc'_left /-
+#print homology'.map_eq_lift_desc'_left /-
 theorem map_eq_lift_desc'_left (α β h) :
     map w w' α β h =
-      homology.lift _ _ _
-        (homology.desc' _ _ _ (kernel.ι _ ≫ β.left ≫ cokernel.π _)
+      homology'.lift _ _ _
+        (homology'.desc' _ _ _ (kernel.ι _ ≫ β.left ≫ cokernel.π _)
           (by simp only [kernel.lift_ι_assoc, ← h]; erw [← reassoc_of α.w]; simp))
         (by ext; simp) :=
   by rw [map_eq_desc'_lift_left]; ext; simp
-#align homology.map_eq_lift_desc'_left homology.map_eq_lift_desc'_left
+#align homology.map_eq_lift_desc'_left homology'.map_eq_lift_desc'_left
 -/
 
-#print homology.map_eq_desc'_lift_right /-
+#print homology'.map_eq_desc'_lift_right /-
 theorem map_eq_desc'_lift_right (α β h) :
     map w w' α β h =
-      homology.desc' _ _ _ (homology.lift _ _ _ (kernel.ι _ ≫ α.right ≫ cokernel.π _) (by simp [h]))
+      homology'.desc' _ _ _
+        (homology'.lift _ _ _ (kernel.ι _ ≫ α.right ≫ cokernel.π _) (by simp [h]))
         (by
           ext; simp only [category.assoc, zero_comp, lift_ι, kernel.lift_ι_assoc]
           erw [← reassoc_of α.w]; simp) :=
   by rw [map_eq_desc'_lift_left]; ext; simp [h]
-#align homology.map_eq_desc'_lift_right homology.map_eq_desc'_lift_right
+#align homology.map_eq_desc'_lift_right homology'.map_eq_desc'_lift_right
 -/
 
-#print homology.map_eq_lift_desc'_right /-
+#print homology'.map_eq_lift_desc'_right /-
 theorem map_eq_lift_desc'_right (α β h) :
     map w w' α β h =
-      homology.lift _ _ _
-        (homology.desc' _ _ _ (kernel.ι _ ≫ α.right ≫ cokernel.π _)
+      homology'.lift _ _ _
+        (homology'.desc' _ _ _ (kernel.ι _ ≫ α.right ≫ cokernel.π _)
           (by simp only [kernel.lift_ι_assoc]; erw [← reassoc_of α.w]; simp))
         (by ext; simp [h]) :=
   by rw [map_eq_desc'_lift_right]; ext; simp
-#align homology.map_eq_lift_desc'_right homology.map_eq_lift_desc'_right
+#align homology.map_eq_lift_desc'_right homology'.map_eq_lift_desc'_right
 -/
 
-#print homology.map_ι /-
+#print homology'.map_ι /-
 @[simp, reassoc]
 theorem map_ι (α β h) :
     map w w' α β h ≫ ι f' g' w' =
@@ -329,22 +330,22 @@ theorem map_ι (α β h) :
   ext
   simp only [← category.assoc]
   rw [π'_ι, π'_desc', category.assoc, category.assoc, cokernel.π_desc]
-#align homology.map_ι homology.map_ι
+#align homology.map_ι homology'.map_ι
 -/
 
 end
 
-end homology
+end homology'
 
 namespace CategoryTheory.Functor
 
 variable {ι : Type _} {c : ComplexShape ι} {B : Type _} [Category B] [Abelian B] (F : A ⥤ B)
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
-#print CategoryTheory.Functor.homologyIso /-
+#print CategoryTheory.Functor.homology'Iso /-
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
-noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
-    F.obj (C.homology j) ≅ ((F.mapHomologicalComplex _).obj C).homology j :=
+noncomputable def homology'Iso (C : HomologicalComplex A c) (j : ι) :
+    F.obj (C.homology' j) ≅ ((F.mapHomologicalComplex _).obj C).homology' j :=
   (PreservesCokernel.iso _ _).trans
     (cokernel.mapIso _ _
       ((F.mapIso (imageSubobjectIso _)).trans
@@ -357,21 +358,21 @@ noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
         simp only [category.assoc, imageToKernel_arrow]
         erw [kernel_subobject_arrow', kernel_comparison_comp_ι, image_subobject_arrow']
         simp [← F.map_comp]))
-#align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIso
+#align category_theory.functor.homology_iso CategoryTheory.Functor.homology'Iso
 -/
 
-#print CategoryTheory.Functor.homologyFunctorIso /-
+#print CategoryTheory.Functor.homology'FunctorIso /-
 /-- If `F` is an exact additive functor, then `F` commutes with `Hᵢ` (up to natural isomorphism). -/
-noncomputable def homologyFunctorIso (i : ι) :
-    homologyFunctor A c i ⋙ F ≅ F.mapHomologicalComplex c ⋙ homologyFunctor B c i :=
-  NatIso.ofComponents (fun X => homologyIso F X i)
+noncomputable def homology'FunctorIso (i : ι) :
+    homology'Functor A c i ⋙ F ≅ F.mapHomologicalComplex c ⋙ homology'Functor B c i :=
+  NatIso.ofComponents (fun X => homology'Iso F X i)
     (by
       intro X Y f
       dsimp
       rw [← iso.inv_comp_eq, ← category.assoc, ← iso.eq_comp_inv]
       refine' coequalizer.hom_ext _
       dsimp [homology_iso]
-      simp only [homology.map, ← category.assoc, cokernel.π_desc]
+      simp only [homology'.map, ← category.assoc, cokernel.π_desc]
       simp only [category.assoc, cokernel_comparison_map_desc, cokernel.π_desc,
         π_comp_cokernel_comparison, ← F.map_comp]
       erw [← kernel_subobject_iso_comp_kernel_map_assoc]
@@ -382,7 +383,7 @@ noncomputable def homologyFunctorIso (i : ι) :
       rw [kernel_map_comp_preserves_kernel_iso_inv_assoc, ← F.map_comp_assoc, ←
         kernel_map_comp_kernel_subobject_iso_inv]
       any_goals simp)
-#align category_theory.functor.homology_functor_iso CategoryTheory.Functor.homologyFunctorIso
+#align category_theory.functor.homology_functor_iso CategoryTheory.Functor.homology'FunctorIso
 -/
 
 end CategoryTheory.Functor
Diff
@@ -3,10 +3,10 @@ Copyright (c) 2022 Adam Topaz. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Adam Topaz, Amelia Livingston
 -/
-import Mathbin.Algebra.Homology.Additive
-import Mathbin.CategoryTheory.Abelian.Pseudoelements
-import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Kernels
-import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Images
+import Algebra.Homology.Additive
+import CategoryTheory.Abelian.Pseudoelements
+import CategoryTheory.Limits.Preserves.Shapes.Kernels
+import CategoryTheory.Limits.Preserves.Shapes.Images
 
 #align_import category_theory.abelian.homology from "leanprover-community/mathlib"@"dbdf71cee7bb20367cb7e37279c08b0c218cf967"
 
Diff
@@ -2,17 +2,14 @@
 Copyright (c) 2022 Adam Topaz. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Adam Topaz, Amelia Livingston
-
-! This file was ported from Lean 3 source module category_theory.abelian.homology
-! leanprover-community/mathlib commit dbdf71cee7bb20367cb7e37279c08b0c218cf967
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Homology.Additive
 import Mathbin.CategoryTheory.Abelian.Pseudoelements
 import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Kernels
 import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Images
 
+#align_import category_theory.abelian.homology from "leanprover-community/mathlib"@"dbdf71cee7bb20367cb7e37279c08b0c218cf967"
+
 /-!
 > THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
 > Any changes to this file require a corresponding PR to mathlib4.
Diff
@@ -220,6 +220,7 @@ theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ := by
 #align homology.π'_ι homology.π'_ι
 -/
 
+#print homology.π'_eq_π /-
 @[simp, reassoc]
 theorem π'_eq_π : (kernelSubobjectIso _).Hom ≫ π' f g w = π _ _ _ :=
   by
@@ -229,6 +230,7 @@ theorem π'_eq_π : (kernelSubobjectIso _).Hom ≫ π' f g w = π _ _ _ :=
   dsimp [π, homologyIsoCokernelImageToKernel']
   simp
 #align homology.π'_eq_π homology.π'_eq_π
+-/
 
 section
 
@@ -342,6 +344,7 @@ namespace CategoryTheory.Functor
 variable {ι : Type _} {c : ComplexShape ι} {B : Type _} [Category B] [Abelian B] (F : A ⥤ B)
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
+#print CategoryTheory.Functor.homologyIso /-
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
 noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
     F.obj (C.homology j) ≅ ((F.mapHomologicalComplex _).obj C).homology j :=
@@ -358,6 +361,7 @@ noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
         erw [kernel_subobject_arrow', kernel_comparison_comp_ι, image_subobject_arrow']
         simp [← F.map_comp]))
 #align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIso
+-/
 
 #print CategoryTheory.Functor.homologyFunctorIso /-
 /-- If `F` is an exact additive functor, then `F` commutes with `Hᵢ` (up to natural isomorphism). -/
Diff
@@ -83,7 +83,7 @@ instance : Mono (homologyCToK f g w) :=
   apply pseudoelement.mono_of_zero_of_map_zero
   intro a ha
   obtain ⟨a, rfl⟩ := pseudoelement.pseudo_surjective_of_epi (cokernel.π (kernel.lift g f w)) a
-  apply_fun kernel.ι (cokernel.desc f g w)  at ha 
+  apply_fun kernel.ι (cokernel.desc f g w) at ha 
   simp only [← pseudoelement.comp_apply, cokernel.π_desc, kernel.lift_ι,
     pseudoelement.apply_zero] at ha 
   simp only [pseudoelement.comp_apply] at ha 
@@ -191,7 +191,7 @@ theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W) (h : π' f g w ≫ a =
   apply_fun fun e => (homologyIsoCokernelLift f g w).inv ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (homologyIsoCokernelLift f g w).Hom ≫ e  at hh 
+    apply_fun fun e => (homologyIsoCokernelLift f g w).Hom ≫ e at hh 
     simpa using hh
   simp only [category.assoc] at h 
   exact coequalizer.hom_ext h
@@ -206,7 +206,7 @@ theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b
   apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).Hom
   swap
   · intro i j hh
-    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv  at hh 
+    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv at hh 
     simpa using hh
   simp only [← category.assoc] at h 
   exact equalizer.hom_ext h
@@ -242,7 +242,7 @@ theorem π'_map (α β h) :
   apply_fun fun e => (kernel_subobject_iso _).Hom ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (kernel_subobject_iso _).inv ≫ e  at hh 
+    apply_fun fun e => (kernel_subobject_iso _).inv ≫ e at hh 
     simpa using hh
   dsimp [map]
   simp only [π'_eq_π_assoc]
Diff
@@ -83,10 +83,10 @@ instance : Mono (homologyCToK f g w) :=
   apply pseudoelement.mono_of_zero_of_map_zero
   intro a ha
   obtain ⟨a, rfl⟩ := pseudoelement.pseudo_surjective_of_epi (cokernel.π (kernel.lift g f w)) a
-  apply_fun kernel.ι (cokernel.desc f g w)  at ha
+  apply_fun kernel.ι (cokernel.desc f g w)  at ha 
   simp only [← pseudoelement.comp_apply, cokernel.π_desc, kernel.lift_ι,
-    pseudoelement.apply_zero] at ha
-  simp only [pseudoelement.comp_apply] at ha
+    pseudoelement.apply_zero] at ha 
+  simp only [pseudoelement.comp_apply] at ha 
   obtain ⟨b, hb⟩ : ∃ b, f b = _ := (pseudoelement.pseudo_exact_of_exact (exact_cokernel f)).2 _ ha
   rsuffices ⟨c, rfl⟩ : ∃ c, kernel.lift g f w c = a
   · simp [← pseudoelement.comp_apply]
@@ -103,7 +103,7 @@ instance : Epi (homologyCToK f g w) :=
   obtain ⟨c, hc⟩ : ∃ c, cokernel.π f c = b
   apply pseudoelement.pseudo_surjective_of_epi (cokernel.π f)
   have : g c = 0 := by
-    dsimp [b] at hc
+    dsimp [b] at hc 
     rw [show g = cokernel.π f ≫ cokernel.desc f g w by simp, pseudoelement.comp_apply, hc]
     simp [← pseudoelement.comp_apply]
   obtain ⟨d, hd⟩ : ∃ d, kernel.ι g d = c := by
@@ -187,13 +187,13 @@ theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 := by dsimp [ι]; si
 @[ext]
 theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W) (h : π' f g w ≫ a = π' f g w ≫ b) : a = b :=
   by
-  dsimp [π'] at h
+  dsimp [π'] at h 
   apply_fun fun e => (homologyIsoCokernelLift f g w).inv ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (homologyIsoCokernelLift f g w).Hom ≫ e  at hh
+    apply_fun fun e => (homologyIsoCokernelLift f g w).Hom ≫ e  at hh 
     simpa using hh
-  simp only [category.assoc] at h
+  simp only [category.assoc] at h 
   exact coequalizer.hom_ext h
 #align homology.hom_from_ext homology.hom_from_ext
 -/
@@ -202,13 +202,13 @@ theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W) (h : π' f g w ≫ a =
 @[ext]
 theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b ≫ ι f g w) : a = b :=
   by
-  dsimp [ι] at h
+  dsimp [ι] at h 
   apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).Hom
   swap
   · intro i j hh
-    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv  at hh
+    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv  at hh 
     simpa using hh
-  simp only [← category.assoc] at h
+  simp only [← category.assoc] at h 
   exact equalizer.hom_ext h
 #align homology.hom_to_ext homology.hom_to_ext
 -/
@@ -242,7 +242,7 @@ theorem π'_map (α β h) :
   apply_fun fun e => (kernel_subobject_iso _).Hom ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (kernel_subobject_iso _).inv ≫ e  at hh
+    apply_fun fun e => (kernel_subobject_iso _).inv ≫ e  at hh 
     simpa using hh
   dsimp [map]
   simp only [π'_eq_π_assoc]
@@ -262,7 +262,7 @@ theorem π'_map (α β h) :
   dsimp [π', homologyIsoCokernelLift]
   simp only [cokernel_iso_of_eq_inv_comp_desc, cokernel.π_desc_assoc]
   congr 1
-  · congr ; exact h.symm
+  · congr; exact h.symm
   · rw [iso.inv_comp_eq, ← category.assoc, iso.eq_comp_inv]
     dsimp [homologyIsoCokernelImageToKernel']
     simp
Diff
@@ -220,9 +220,6 @@ theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ := by
 #align homology.π'_ι homology.π'_ι
 -/
 
-/- warning: homology.π'_eq_π -> homology.π'_eq_π is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align homology.π'_eq_π homology.π'_eq_πₓ'. -/
 @[simp, reassoc]
 theorem π'_eq_π : (kernelSubobjectIso _).Hom ≫ π' f g w = π _ _ _ :=
   by
@@ -345,9 +342,6 @@ namespace CategoryTheory.Functor
 variable {ι : Type _} {c : ComplexShape ι} {B : Type _} [Category B] [Abelian B] (F : A ⥤ B)
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
-/- warning: category_theory.functor.homology_iso -> CategoryTheory.Functor.homologyIso is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIsoₓ'. -/
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
 noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
     F.obj (C.homology j) ≅ ((F.mapHomologicalComplex _).obj C).homology j :=
Diff
@@ -110,8 +110,7 @@ instance : Epi (homologyCToK f g w) :=
     apply (pseudoelement.pseudo_exact_of_exact exact_kernel_ι).2 _ this
   use cokernel.π (kernel.lift g f w) d
   apply_fun kernel.ι (cokernel.desc f g w)
-  swap
-  · apply pseudoelement.pseudo_injective_of_mono
+  swap; · apply pseudoelement.pseudo_injective_of_mono
   simp only [← pseudoelement.comp_apply, cokernel.π_desc, kernel.lift_ι]
   simp only [pseudoelement.comp_apply, hd, hc]
 
@@ -161,36 +160,26 @@ def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W
 #print homology.π'_desc' /-
 @[simp, reassoc]
 theorem π'_desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) :
-    π' f g w ≫ desc' f g w e he = e := by
-  dsimp [π', desc']
-  simp
+    π' f g w ≫ desc' f g w e he = e := by dsimp [π', desc']; simp
 #align homology.π'_desc' homology.π'_desc'
 -/
 
 #print homology.lift_ι /-
 @[simp, reassoc]
 theorem lift_ι {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) :
-    lift f g w e he ≫ ι _ _ _ = e := by
-  dsimp [ι, lift]
-  simp
+    lift f g w e he ≫ ι _ _ _ = e := by dsimp [ι, lift]; simp
 #align homology.lift_ι homology.lift_ι
 -/
 
 #print homology.condition_π' /-
 @[simp, reassoc]
-theorem condition_π' : kernel.lift g f w ≫ π' f g w = 0 :=
-  by
-  dsimp [π']
-  simp
+theorem condition_π' : kernel.lift g f w ≫ π' f g w = 0 := by dsimp [π']; simp
 #align homology.condition_π' homology.condition_π'
 -/
 
 #print homology.condition_ι /-
 @[simp, reassoc]
-theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 :=
-  by
-  dsimp [ι]
-  simp
+theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 := by dsimp [ι]; simp
 #align homology.condition_ι homology.condition_ι
 -/
 
@@ -226,10 +215,8 @@ theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b
 
 #print homology.π'_ι /-
 @[simp, reassoc]
-theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ :=
-  by
-  dsimp [π', ι, homologyIsoKernelDesc]
-  simp
+theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ := by
+  dsimp [π', ι, homologyIsoKernelDesc]; simp
 #align homology.π'_ι homology.π'_ι
 -/
 
@@ -278,8 +265,7 @@ theorem π'_map (α β h) :
   dsimp [π', homologyIsoCokernelLift]
   simp only [cokernel_iso_of_eq_inv_comp_desc, cokernel.π_desc_assoc]
   congr 1
-  · congr
-    exact h.symm
+  · congr ; exact h.symm
   · rw [iso.inv_comp_eq, ← category.assoc, iso.eq_comp_inv]
     dsimp [homologyIsoCokernelImageToKernel']
     simp
@@ -291,10 +277,8 @@ theorem map_eq_desc'_lift_left (α β h) :
     map w w' α β h =
       homology.desc' _ _ _ (homology.lift _ _ _ (kernel.ι _ ≫ β.left ≫ cokernel.π _) (by simp))
         (by
-          ext
-          simp only [← h, category.assoc, zero_comp, lift_ι, kernel.lift_ι_assoc]
-          erw [← reassoc_of α.w]
-          simp) :=
+          ext; simp only [← h, category.assoc, zero_comp, lift_ι, kernel.lift_ι_assoc]
+          erw [← reassoc_of α.w]; simp) :=
   by
   apply homology.hom_from_ext
   simp only [π'_map, π'_desc']
@@ -311,17 +295,9 @@ theorem map_eq_lift_desc'_left (α β h) :
     map w w' α β h =
       homology.lift _ _ _
         (homology.desc' _ _ _ (kernel.ι _ ≫ β.left ≫ cokernel.π _)
-          (by
-            simp only [kernel.lift_ι_assoc, ← h]
-            erw [← reassoc_of α.w]
-            simp))
-        (by
-          ext
-          simp) :=
-  by
-  rw [map_eq_desc'_lift_left]
-  ext
-  simp
+          (by simp only [kernel.lift_ι_assoc, ← h]; erw [← reassoc_of α.w]; simp))
+        (by ext; simp) :=
+  by rw [map_eq_desc'_lift_left]; ext; simp
 #align homology.map_eq_lift_desc'_left homology.map_eq_lift_desc'_left
 -/
 
@@ -330,14 +306,9 @@ theorem map_eq_desc'_lift_right (α β h) :
     map w w' α β h =
       homology.desc' _ _ _ (homology.lift _ _ _ (kernel.ι _ ≫ α.right ≫ cokernel.π _) (by simp [h]))
         (by
-          ext
-          simp only [category.assoc, zero_comp, lift_ι, kernel.lift_ι_assoc]
-          erw [← reassoc_of α.w]
-          simp) :=
-  by
-  rw [map_eq_desc'_lift_left]
-  ext
-  simp [h]
+          ext; simp only [category.assoc, zero_comp, lift_ι, kernel.lift_ι_assoc]
+          erw [← reassoc_of α.w]; simp) :=
+  by rw [map_eq_desc'_lift_left]; ext; simp [h]
 #align homology.map_eq_desc'_lift_right homology.map_eq_desc'_lift_right
 -/
 
@@ -346,17 +317,9 @@ theorem map_eq_lift_desc'_right (α β h) :
     map w w' α β h =
       homology.lift _ _ _
         (homology.desc' _ _ _ (kernel.ι _ ≫ α.right ≫ cokernel.π _)
-          (by
-            simp only [kernel.lift_ι_assoc]
-            erw [← reassoc_of α.w]
-            simp))
-        (by
-          ext
-          simp [h]) :=
-  by
-  rw [map_eq_desc'_lift_right]
-  ext
-  simp
+          (by simp only [kernel.lift_ι_assoc]; erw [← reassoc_of α.w]; simp))
+        (by ext; simp [h]) :=
+  by rw [map_eq_desc'_lift_right]; ext; simp
 #align homology.map_eq_lift_desc'_right homology.map_eq_lift_desc'_right
 -/
 
Diff
@@ -234,10 +234,7 @@ theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ :=
 -/
 
 /- warning: homology.π'_eq_π -> homology.π'_eq_π is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) Y Z) (w : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Z))))), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) ((fun (a : Type.{max u2 u1}) (b : Type.{u2}) [self : HasLiftT.{succ (max u2 u1), succ u2} a b] => self.0) (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (HasLiftT.mk.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CoeTCₓ.coe.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (coeBase.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CategoryTheory.Subobject.hasCoe.{u1, u2} A _inst_1 Y)))) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (homology.π'._proof_2.{u2, u1} A _inst_1 _inst_2 X Y f) g (homology.π'._proof_3.{u2, u1} A _inst_1 _inst_2 Y Z g) w (homology.π'._proof_4.{u2, u1} A _inst_1 _inst_2 X Y Z f g w))) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) ((fun (a : Type.{max u2 u1}) (b : Type.{u2}) [self : HasLiftT.{succ (max u2 u1), succ u2} a b] => self.0) (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (HasLiftT.mk.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CoeTCₓ.coe.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (coeBase.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CategoryTheory.Subobject.hasCoe.{u1, u2} A _inst_1 Y)))) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g)) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (homology.π'._proof_2.{u2, u1} A _inst_1 _inst_2 X Y f) g (homology.π'._proof_3.{u2, u1} A _inst_1 _inst_2 Y Z g) w (homology.π'._proof_4.{u2, u1} A _inst_1 _inst_2 X Y Z f g w)) (CategoryTheory.Iso.hom.{u1, u2} A _inst_1 ((fun (a : Type.{max u2 u1}) (b : Type.{u2}) [self : HasLiftT.{succ (max u2 u1), succ u2} a b] => self.0) (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (HasLiftT.mk.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CoeTCₓ.coe.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (coeBase.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CategoryTheory.Subobject.hasCoe.{u1, u2} A _inst_1 Y)))) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g)) (CategoryTheory.Limits.kernelSubobjectIso.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (homology.π'.{u1, u2} A _inst_1 _inst_2 X Y Z f g w)) (homology.π.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (homology.π'._proof_2.{u2, u1} A _inst_1 _inst_2 X Y f) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g) w (homology.π'._proof_4.{u2, u1} A _inst_1 _inst_2 X Y Z f g w))
-but is expected to have type
-  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) Y Z) (w : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Z)))), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w)))) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g)) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w))) (CategoryTheory.Iso.hom.{u1, u2} A _inst_1 (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g)) (CategoryTheory.Limits.kernelSubobjectIso.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (homology.π'.{u1, u2} A _inst_1 _inst_2 X Y Z f g w)) (homology.π.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align homology.π'_eq_π homology.π'_eq_πₓ'. -/
 @[simp, reassoc]
 theorem π'_eq_π : (kernelSubobjectIso _).Hom ≫ π' f g w = π _ _ _ :=
@@ -386,10 +383,7 @@ variable {ι : Type _} {c : ComplexShape ι} {B : Type _} [Category B] [Abelian
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
 /- warning: category_theory.functor.homology_iso -> CategoryTheory.Functor.homologyIso is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {ι : Type.{u3}} {c : ComplexShape.{u3} ι} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u5, u4} B] [_inst_4 : CategoryTheory.Abelian.{u5, u4} B _inst_3] (F : CategoryTheory.Functor.{u1, u5, u2, u4} A _inst_1 B _inst_3) [_inst_5 : CategoryTheory.Functor.Additive.{u2, u4, u1, u5} A B _inst_1 _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F] [_inst_6 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] [_inst_7 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] (C : HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (j : ι), CategoryTheory.Iso.{u5, u4} B _inst_3 (CategoryTheory.Functor.obj.{u1, u5, u2, u4} A _inst_1 B _inst_3 F (HomologicalComplex.homology.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c (CategoryTheory.Abelian.hasKernels.{u1, u2} A _inst_1 _inst_2) (CategoryTheory.Functor.homologyIso._proof_1.{u2, u1} A _inst_1 _inst_2) (CategoryTheory.Abelian.hasCokernels.{u1, u2} A _inst_1 _inst_2) C j)) (HomologicalComplex.homology.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c (CategoryTheory.Abelian.hasKernels.{u5, u4} B _inst_3 _inst_4) (CategoryTheory.Functor.homologyIso._proof_2.{u4, u5} B _inst_3 _inst_4) (CategoryTheory.Abelian.hasCokernels.{u5, u4} B _inst_3 _inst_4) (CategoryTheory.Functor.obj.{max u3 u1, max u3 u5, max u2 u3 u1, max u4 u3 u5} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.CategoryTheory.category.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (HomologicalComplex.CategoryTheory.category.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.Functor.mapHomologicalComplex.{u1, u2, u3, u4, u5} ι A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F _inst_5 c) C) j)
-but is expected to have type
-  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {ι : Type.{u3}} {c : ComplexShape.{u3} ι} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u5, u4} B] [_inst_4 : CategoryTheory.Abelian.{u5, u4} B _inst_3] (F : CategoryTheory.Functor.{u1, u5, u2, u4} A _inst_1 B _inst_3) [_inst_5 : CategoryTheory.Functor.Additive.{u2, u4, u1, u5} A B _inst_1 _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F] [_inst_6 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] [_inst_7 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] (C : HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (j : ι), CategoryTheory.Iso.{u5, u4} B _inst_3 (Prefunctor.obj.{succ u1, succ u5, u2, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) B (CategoryTheory.CategoryStruct.toQuiver.{u5, u4} B (CategoryTheory.Category.toCategoryStruct.{u5, u4} B _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u5, u2, u4} A _inst_1 B _inst_3 F) (HomologicalComplex.homology.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) C j)) (HomologicalComplex.homology.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u5, u4} B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Abelian.hasEqualizers.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u5, u4} B _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u5, u4} B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Abelian.hasCoequalizers.{u5, u4} B _inst_3 _inst_4)) (Prefunctor.obj.{max (succ u1) (succ u3), max (succ u3) (succ u5), max (max u2 u1) u3, max (max u3 u4) u5} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u3, max (max u2 u1) u3} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (CategoryTheory.Category.toCategoryStruct.{max u1 u3, max (max u2 u1) u3} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c))) (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u5, max (max u3 u4) u5} (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.Category.toCategoryStruct.{max u3 u5, max (max u3 u4) u5} (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c))) (CategoryTheory.Functor.toPrefunctor.{max u1 u3, max u3 u5, max (max u2 u1) u3, max (max u3 u4) u5} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.Functor.mapHomologicalComplex.{u1, u2, u3, u4, u5} ι A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F _inst_5 c)) C) j)
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIsoₓ'. -/
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
 noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
Diff
@@ -159,7 +159,7 @@ def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W
 -/
 
 #print homology.π'_desc' /-
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem π'_desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) :
     π' f g w ≫ desc' f g w e he = e := by
   dsimp [π', desc']
@@ -168,7 +168,7 @@ theorem π'_desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0
 -/
 
 #print homology.lift_ι /-
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem lift_ι {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) :
     lift f g w e he ≫ ι _ _ _ = e := by
   dsimp [ι, lift]
@@ -177,7 +177,7 @@ theorem lift_ι {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w =
 -/
 
 #print homology.condition_π' /-
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem condition_π' : kernel.lift g f w ≫ π' f g w = 0 :=
   by
   dsimp [π']
@@ -186,7 +186,7 @@ theorem condition_π' : kernel.lift g f w ≫ π' f g w = 0 :=
 -/
 
 #print homology.condition_ι /-
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 :=
   by
   dsimp [ι]
@@ -225,7 +225,7 @@ theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b
 -/
 
 #print homology.π'_ι /-
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ :=
   by
   dsimp [π', ι, homologyIsoKernelDesc]
@@ -239,7 +239,7 @@ lean 3 declaration is
 but is expected to have type
   forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) Y Z) (w : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Z)))), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w)))) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g)) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w))) (CategoryTheory.Iso.hom.{u1, u2} A _inst_1 (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g)) (CategoryTheory.Limits.kernelSubobjectIso.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (homology.π'.{u1, u2} A _inst_1 _inst_2 X Y Z f g w)) (homology.π.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w)))
 Case conversion may be inaccurate. Consider using '#align homology.π'_eq_π homology.π'_eq_πₓ'. -/
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem π'_eq_π : (kernelSubobjectIso _).Hom ≫ π' f g w = π _ _ _ :=
   by
   dsimp [π', homologyIsoCokernelLift]
@@ -254,7 +254,7 @@ section
 variable {X' Y' Z' : A} (f' : X' ⟶ Y') (g' : Y' ⟶ Z') (w' : f' ≫ g' = 0)
 
 #print homology.π'_map /-
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem π'_map (α β h) :
     π' _ _ _ ≫ map w w' α β h = kernel.map _ _ α.right β.right (by simp [h, β.w.symm]) ≫ π' _ _ _ :=
   by
@@ -364,7 +364,7 @@ theorem map_eq_lift_desc'_right (α β h) :
 -/
 
 #print homology.map_ι /-
-@[simp, reassoc.1]
+@[simp, reassoc]
 theorem map_ι (α β h) :
     map w w' α β h ≫ ι f' g' w' =
       ι f g w ≫ cokernel.map f f' α.left β.left (by simp [h, β.w.symm]) :=
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Adam Topaz, Amelia Livingston
 
 ! This file was ported from Lean 3 source module category_theory.abelian.homology
-! leanprover-community/mathlib commit 956af7c76589f444f2e1313911bad16366ea476d
+! leanprover-community/mathlib commit dbdf71cee7bb20367cb7e37279c08b0c218cf967
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Kernels
 import Mathbin.CategoryTheory.Limits.Preserves.Shapes.Images
 
 /-!
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 
 The object `homology f g w`, where `w : f ≫ g = 0`, can be identified with either a
 cokernel or a kernel. The isomorphism with a cokernel is `homology_iso_cokernel_lift`, which
Diff
@@ -45,18 +45,23 @@ variable {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (w : f ≫ g = 0)
 
 namespace CategoryTheory.Abelian
 
+#print CategoryTheory.Abelian.homologyC /-
 /-- The cokernel of `kernel.lift g f w`. This is isomorphic to `homology f g w`.
   See `homology_iso_cokernel_lift`. -/
 abbrev homologyC : A :=
   cokernel (kernel.lift g f w)
 #align category_theory.abelian.homology_c CategoryTheory.Abelian.homologyC
+-/
 
+#print CategoryTheory.Abelian.homologyK /-
 /-- The kernel of `cokernel.desc f g w`. This is isomorphic to `homology f g w`.
   See `homology_iso_kernel_desc`. -/
 abbrev homologyK : A :=
   kernel (cokernel.desc f g w)
 #align category_theory.abelian.homology_k CategoryTheory.Abelian.homologyK
+-/
 
+#print CategoryTheory.Abelian.homologyCToK /-
 /-- The canonical map from `homology_c` to `homology_k`.
   This is an isomorphism, and it is used in obtaining the API for `homology f g w`
   in the bottom of this file. -/
@@ -66,6 +71,7 @@ abbrev homologyCToK : homologyC f g w ⟶ homologyK f g w :=
       apply limits.equalizer.hom_ext
       simp)
 #align category_theory.abelian.homology_c_to_k CategoryTheory.Abelian.homologyCToK
+-/
 
 attribute [local instance] pseudoelement.hom_to_fun pseudoelement.has_zero
 
@@ -111,62 +117,81 @@ instance (w : f ≫ g = 0) : IsIso (homologyCToK f g w) :=
 
 end CategoryTheory.Abelian
 
+#print homologyIsoKernelDesc /-
 /-- The homology associated to `f` and `g` is isomorphic to a kernel. -/
 def homologyIsoKernelDesc : homology f g w ≅ kernel (cokernel.desc f g w) :=
   homologyIsoCokernelLift _ _ _ ≪≫ asIso (CategoryTheory.Abelian.homologyCToK _ _ _)
 #align homology_iso_kernel_desc homologyIsoKernelDesc
+-/
 
 namespace homology
 
+#print homology.π' /-
 -- `homology.π` is taken
 /-- The canonical map from the kernel of `g` to the homology of `f` and `g`. -/
 def π' : kernel g ⟶ homology f g w :=
   cokernel.π _ ≫ (homologyIsoCokernelLift _ _ _).inv
 #align homology.π' homology.π'
+-/
 
+#print homology.ι /-
 /-- The canonical map from the homology of `f` and `g` to the cokernel of `f`. -/
 def ι : homology f g w ⟶ cokernel f :=
   (homologyIsoKernelDesc _ _ _).Hom ≫ kernel.ι _
 #align homology.ι homology.ι
+-/
 
+#print homology.desc' /-
 /-- Obtain a morphism from the homology, given a morphism from the kernel. -/
 def desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) : homology f g w ⟶ W :=
   (homologyIsoCokernelLift _ _ _).Hom ≫ cokernel.desc _ e he
 #align homology.desc' homology.desc'
+-/
 
+#print homology.lift /-
 /-- Obtain a moprhism to the homology, given a morphism to the kernel. -/
 def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W ⟶ homology f g w :=
   kernel.lift _ e he ≫ (homologyIsoKernelDesc _ _ _).inv
 #align homology.lift homology.lift
+-/
 
+#print homology.π'_desc' /-
 @[simp, reassoc.1]
 theorem π'_desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) :
     π' f g w ≫ desc' f g w e he = e := by
   dsimp [π', desc']
   simp
 #align homology.π'_desc' homology.π'_desc'
+-/
 
+#print homology.lift_ι /-
 @[simp, reassoc.1]
 theorem lift_ι {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) :
     lift f g w e he ≫ ι _ _ _ = e := by
   dsimp [ι, lift]
   simp
 #align homology.lift_ι homology.lift_ι
+-/
 
+#print homology.condition_π' /-
 @[simp, reassoc.1]
 theorem condition_π' : kernel.lift g f w ≫ π' f g w = 0 :=
   by
   dsimp [π']
   simp
 #align homology.condition_π' homology.condition_π'
+-/
 
+#print homology.condition_ι /-
 @[simp, reassoc.1]
 theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 :=
   by
   dsimp [ι]
   simp
 #align homology.condition_ι homology.condition_ι
+-/
 
+#print homology.hom_from_ext /-
 @[ext]
 theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W) (h : π' f g w ≫ a = π' f g w ≫ b) : a = b :=
   by
@@ -179,7 +204,9 @@ theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W) (h : π' f g w ≫ a =
   simp only [category.assoc] at h
   exact coequalizer.hom_ext h
 #align homology.hom_from_ext homology.hom_from_ext
+-/
 
+#print homology.hom_to_ext /-
 @[ext]
 theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b ≫ ι f g w) : a = b :=
   by
@@ -192,14 +219,23 @@ theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b
   simp only [← category.assoc] at h
   exact equalizer.hom_ext h
 #align homology.hom_to_ext homology.hom_to_ext
+-/
 
+#print homology.π'_ι /-
 @[simp, reassoc.1]
 theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ :=
   by
   dsimp [π', ι, homologyIsoKernelDesc]
   simp
 #align homology.π'_ι homology.π'_ι
+-/
 
+/- warning: homology.π'_eq_π -> homology.π'_eq_π is a dubious translation:
+lean 3 declaration is
+  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) Y Z) (w : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Z))))), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) ((fun (a : Type.{max u2 u1}) (b : Type.{u2}) [self : HasLiftT.{succ (max u2 u1), succ u2} a b] => self.0) (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (HasLiftT.mk.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CoeTCₓ.coe.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (coeBase.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CategoryTheory.Subobject.hasCoe.{u1, u2} A _inst_1 Y)))) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (homology.π'._proof_2.{u2, u1} A _inst_1 _inst_2 X Y f) g (homology.π'._proof_3.{u2, u1} A _inst_1 _inst_2 Y Z g) w (homology.π'._proof_4.{u2, u1} A _inst_1 _inst_2 X Y Z f g w))) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) ((fun (a : Type.{max u2 u1}) (b : Type.{u2}) [self : HasLiftT.{succ (max u2 u1), succ u2} a b] => self.0) (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (HasLiftT.mk.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CoeTCₓ.coe.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (coeBase.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CategoryTheory.Subobject.hasCoe.{u1, u2} A _inst_1 Y)))) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g)) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (homology.π'._proof_2.{u2, u1} A _inst_1 _inst_2 X Y f) g (homology.π'._proof_3.{u2, u1} A _inst_1 _inst_2 Y Z g) w (homology.π'._proof_4.{u2, u1} A _inst_1 _inst_2 X Y Z f g w)) (CategoryTheory.Iso.hom.{u1, u2} A _inst_1 ((fun (a : Type.{max u2 u1}) (b : Type.{u2}) [self : HasLiftT.{succ (max u2 u1), succ u2} a b] => self.0) (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (HasLiftT.mk.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CoeTCₓ.coe.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (coeBase.{succ (max u2 u1), succ u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) A (CategoryTheory.Subobject.hasCoe.{u1, u2} A _inst_1 Y)))) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g)) (CategoryTheory.Limits.kernelSubobjectIso.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g))) (homology.π'.{u1, u2} A _inst_1 _inst_2 X Y Z f g w)) (homology.π.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (homology.π'._proof_2.{u2, u1} A _inst_1 _inst_2 X Y f) g (homology.π'._proof_1.{u2, u1} A _inst_1 _inst_2 Y Z g) w (homology.π'._proof_4.{u2, u1} A _inst_1 _inst_2 X Y Z f g w))
+but is expected to have type
+  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {X : A} {Y : A} {Z : A} (f : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Y) (g : Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) Y Z) (w : Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) X Y Z f g) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) X Z) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Z)))), Eq.{succ u1} (Quiver.Hom.{succ u1, u2} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w)))) (CategoryTheory.CategoryStruct.comp.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g)) (homology.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w))) (CategoryTheory.Iso.hom.{u1, u2} A _inst_1 (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (CategoryTheory.Limits.kernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) Y Z g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g)) (CategoryTheory.Limits.kernelSubobjectIso.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (homology.π'.{u1, u2} A _inst_1 _inst_2 X Y Z f g w)) (homology.π.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w (CategoryTheory.Limits.HasCokernels.has_colimit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.imageSubobject.{u1, u2} A _inst_1 X Y f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f))) (Prefunctor.obj.{max (succ u2) (succ u1), succ u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))))) A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) (CategoryTheory.Functor.toPrefunctor.{max u2 u1, u1, max u2 u1, u2} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (Preorder.smallCategory.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (PartialOrder.toPreorder.{max u2 u1} (CategoryTheory.Subobject.{u1, u2} A _inst_1 Y) (CategoryTheory.instPartialOrderSubobject.{u1, u2} A _inst_1 Y))) A _inst_1 (CategoryTheory.Subobject.underlying.{u1, u2} A _inst_1 Y)) (CategoryTheory.Limits.kernelSubobject.{u1, u2} A _inst_1 Y Z (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g))) (imageToKernel.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) X Y Z f (CategoryTheory.Limits.HasImages.has_image.{u1, u2} A _inst_1 (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) X Y f) g (CategoryTheory.Limits.HasKernels.has_limit.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) Y Z g) w)))
+Case conversion may be inaccurate. Consider using '#align homology.π'_eq_π homology.π'_eq_πₓ'. -/
 @[simp, reassoc.1]
 theorem π'_eq_π : (kernelSubobjectIso _).Hom ≫ π' f g w = π _ _ _ :=
   by
@@ -214,6 +250,7 @@ section
 
 variable {X' Y' Z' : A} (f' : X' ⟶ Y') (g' : Y' ⟶ Z') (w' : f' ≫ g' = 0)
 
+#print homology.π'_map /-
 @[simp, reassoc.1]
 theorem π'_map (α β h) :
     π' _ _ _ ≫ map w w' α β h = kernel.map _ _ α.right β.right (by simp [h, β.w.symm]) ≫ π' _ _ _ :=
@@ -247,7 +284,9 @@ theorem π'_map (α β h) :
     dsimp [homologyIsoCokernelImageToKernel']
     simp
 #align homology.π'_map homology.π'_map
+-/
 
+#print homology.map_eq_desc'_lift_left /-
 theorem map_eq_desc'_lift_left (α β h) :
     map w w' α β h =
       homology.desc' _ _ _ (homology.lift _ _ _ (kernel.ι _ ≫ β.left ≫ cokernel.π _) (by simp))
@@ -265,7 +304,9 @@ theorem map_eq_desc'_lift_left (α β h) :
   ext
   simp [h]
 #align homology.map_eq_desc'_lift_left homology.map_eq_desc'_lift_left
+-/
 
+#print homology.map_eq_lift_desc'_left /-
 theorem map_eq_lift_desc'_left (α β h) :
     map w w' α β h =
       homology.lift _ _ _
@@ -282,7 +323,9 @@ theorem map_eq_lift_desc'_left (α β h) :
   ext
   simp
 #align homology.map_eq_lift_desc'_left homology.map_eq_lift_desc'_left
+-/
 
+#print homology.map_eq_desc'_lift_right /-
 theorem map_eq_desc'_lift_right (α β h) :
     map w w' α β h =
       homology.desc' _ _ _ (homology.lift _ _ _ (kernel.ι _ ≫ α.right ≫ cokernel.π _) (by simp [h]))
@@ -296,7 +339,9 @@ theorem map_eq_desc'_lift_right (α β h) :
   ext
   simp [h]
 #align homology.map_eq_desc'_lift_right homology.map_eq_desc'_lift_right
+-/
 
+#print homology.map_eq_lift_desc'_right /-
 theorem map_eq_lift_desc'_right (α β h) :
     map w w' α β h =
       homology.lift _ _ _
@@ -313,7 +358,9 @@ theorem map_eq_lift_desc'_right (α β h) :
   ext
   simp
 #align homology.map_eq_lift_desc'_right homology.map_eq_lift_desc'_right
+-/
 
+#print homology.map_ι /-
 @[simp, reassoc.1]
 theorem map_ι (α β h) :
     map w w' α β h ≫ ι f' g' w' =
@@ -324,6 +371,7 @@ theorem map_ι (α β h) :
   simp only [← category.assoc]
   rw [π'_ι, π'_desc', category.assoc, category.assoc, cokernel.π_desc]
 #align homology.map_ι homology.map_ι
+-/
 
 end
 
@@ -334,6 +382,12 @@ namespace CategoryTheory.Functor
 variable {ι : Type _} {c : ComplexShape ι} {B : Type _} [Category B] [Abelian B] (F : A ⥤ B)
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
+/- warning: category_theory.functor.homology_iso -> CategoryTheory.Functor.homologyIso is a dubious translation:
+lean 3 declaration is
+  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {ι : Type.{u3}} {c : ComplexShape.{u3} ι} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u5, u4} B] [_inst_4 : CategoryTheory.Abelian.{u5, u4} B _inst_3] (F : CategoryTheory.Functor.{u1, u5, u2, u4} A _inst_1 B _inst_3) [_inst_5 : CategoryTheory.Functor.Additive.{u2, u4, u1, u5} A B _inst_1 _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F] [_inst_6 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] [_inst_7 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] (C : HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (j : ι), CategoryTheory.Iso.{u5, u4} B _inst_3 (CategoryTheory.Functor.obj.{u1, u5, u2, u4} A _inst_1 B _inst_3 F (HomologicalComplex.homology.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c (CategoryTheory.Abelian.hasKernels.{u1, u2} A _inst_1 _inst_2) (CategoryTheory.Functor.homologyIso._proof_1.{u2, u1} A _inst_1 _inst_2) (CategoryTheory.Abelian.hasCokernels.{u1, u2} A _inst_1 _inst_2) C j)) (HomologicalComplex.homology.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c (CategoryTheory.Abelian.hasKernels.{u5, u4} B _inst_3 _inst_4) (CategoryTheory.Functor.homologyIso._proof_2.{u4, u5} B _inst_3 _inst_4) (CategoryTheory.Abelian.hasCokernels.{u5, u4} B _inst_3 _inst_4) (CategoryTheory.Functor.obj.{max u3 u1, max u3 u5, max u2 u3 u1, max u4 u3 u5} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.CategoryTheory.category.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (HomologicalComplex.CategoryTheory.category.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.Functor.mapHomologicalComplex.{u1, u2, u3, u4, u5} ι A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F _inst_5 c) C) j)
+but is expected to have type
+  forall {A : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} A] [_inst_2 : CategoryTheory.Abelian.{u1, u2} A _inst_1] {ι : Type.{u3}} {c : ComplexShape.{u3} ι} {B : Type.{u4}} [_inst_3 : CategoryTheory.Category.{u5, u4} B] [_inst_4 : CategoryTheory.Abelian.{u5, u4} B _inst_3] (F : CategoryTheory.Functor.{u1, u5, u2, u4} A _inst_1 B _inst_3) [_inst_5 : CategoryTheory.Functor.Additive.{u2, u4, u1, u5} A B _inst_1 _inst_3 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F] [_inst_6 : CategoryTheory.Limits.PreservesFiniteLimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] [_inst_7 : CategoryTheory.Limits.PreservesFiniteColimits.{u1, u5, u2, u4} A _inst_1 B _inst_3 F] (C : HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (j : ι), CategoryTheory.Iso.{u5, u4} B _inst_3 (Prefunctor.obj.{succ u1, succ u5, u2, u4} A (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} A (CategoryTheory.Category.toCategoryStruct.{u1, u2} A _inst_1)) B (CategoryTheory.CategoryStruct.toQuiver.{u5, u4} B (CategoryTheory.Category.toCategoryStruct.{u5, u4} B _inst_3)) (CategoryTheory.Functor.toPrefunctor.{u1, u5, u2, u4} A _inst_1 B _inst_3 F) (HomologicalComplex.homology.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasEqualizers.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u1, u2} A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) (CategoryTheory.Abelian.hasCoequalizers.{u1, u2} A _inst_1 _inst_2)) C j)) (HomologicalComplex.homology.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u5, u4} B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Abelian.hasEqualizers.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u5, u4} B _inst_3 (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Limits.hasCokernels_of_hasCoequalizers.{u5, u4} B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) (CategoryTheory.Abelian.hasCoequalizers.{u5, u4} B _inst_3 _inst_4)) (Prefunctor.obj.{max (succ u1) (succ u3), max (succ u3) (succ u5), max (max u2 u1) u3, max (max u3 u4) u5} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u3, max (max u2 u1) u3} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (CategoryTheory.Category.toCategoryStruct.{max u1 u3, max (max u2 u1) u3} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c))) (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.CategoryStruct.toQuiver.{max u3 u5, max (max u3 u4) u5} (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.Category.toCategoryStruct.{max u3 u5, max (max u3 u4) u5} (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c))) (CategoryTheory.Functor.toPrefunctor.{max u1 u3, max u3 u5, max (max u2 u1) u3, max (max u3 u4) u5} (HomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u1, u2, u3} ι A _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2)) c) (HomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (HomologicalComplex.instCategoryHomologicalComplex.{u5, u4, u3} ι B _inst_3 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u5, u4} B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4)) c) (CategoryTheory.Functor.mapHomologicalComplex.{u1, u2, u3, u4, u5} ι A _inst_1 (CategoryTheory.Abelian.toPreadditive.{u1, u2} A _inst_1 _inst_2) B _inst_3 (CategoryTheory.Abelian.toPreadditive.{u5, u4} B _inst_3 _inst_4) F _inst_5 c)) C) j)
+Case conversion may be inaccurate. Consider using '#align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIsoₓ'. -/
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
 noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
     F.obj (C.homology j) ≅ ((F.mapHomologicalComplex _).obj C).homology j :=
@@ -351,6 +405,7 @@ noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
         simp [← F.map_comp]))
 #align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIso
 
+#print CategoryTheory.Functor.homologyFunctorIso /-
 /-- If `F` is an exact additive functor, then `F` commutes with `Hᵢ` (up to natural isomorphism). -/
 noncomputable def homologyFunctorIso (i : ι) :
     homologyFunctor A c i ⋙ F ≅ F.mapHomologicalComplex c ⋙ homologyFunctor B c i :=
@@ -373,6 +428,7 @@ noncomputable def homologyFunctorIso (i : ι) :
         kernel_map_comp_kernel_subobject_iso_inv]
       any_goals simp)
 #align category_theory.functor.homology_functor_iso CategoryTheory.Functor.homologyFunctorIso
+-/
 
 end CategoryTheory.Functor
 

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 3 (#12372)

A PR analogous to #12338 and #12361: reformatting proofs following the multiple goals linter of #12339.

Diff
@@ -361,10 +361,10 @@ noncomputable def homology'FunctorIso (i : ι) :
         F.mapHomologicalComplex_map_f, F.map_comp]
       dsimp [HomologicalComplex.dFrom, HomologicalComplex.Hom.next]
       rw [kernel_map_comp_preserves_kernel_iso_inv_assoc]
-      conv_lhs => erw [← F.map_comp_assoc]
-      rotate_right; simp
-      rw [← kernel_map_comp_kernelSubobjectIso_inv]
-      any_goals simp)
+      · conv_lhs => erw [← F.map_comp_assoc]
+        rw [← kernel_map_comp_kernelSubobjectIso_inv]
+        · simp
+        · simp)
 #align category_theory.functor.homology_functor_iso CategoryTheory.Functor.homology'FunctorIso
 
 end CategoryTheory.Functor
doc: replace mathlib3 names in doc comments (#11952)

A few miscellaneous directories: RingTheory, SetTheory, Combinatorics and CategoryTheory.

Co-authored-by: Scott Morrison <scott@tqft.net>

Diff
@@ -112,7 +112,7 @@ def homology'IsoKernelDesc : homology' f g w ≅ kernel (cokernel.desc f g w) :=
 
 namespace homology'
 
--- `homology.π` is taken
+-- `homology'.π` is taken
 /-- The canonical map from the kernel of `g` to the homology of `f` and `g`. -/
 def π' : kernel g ⟶ homology' f g w :=
   cokernel.π _ ≫ (homology'IsoCokernelLift _ _ _).inv
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
@@ -41,7 +41,6 @@ noncomputable section
 universe v u
 
 variable {A : Type u} [Category.{v} A] [Abelian A]
-
 variable {X Y Z : A} (f : X ⟶ Y) (g : Y ⟶ Z) (w : f ≫ g = 0)
 
 namespace CategoryTheory.Abelian
chore: remove stream-of-conciousness syntax for obtain (#11045)

This covers many instances, but is not exhaustive.

Independently of whether that syntax should be avoided (similar to #10534), I think all these changes are small improvements.

Diff
@@ -87,8 +87,8 @@ instance : Epi (homologyCToK f g w) := by
   apply Pseudoelement.epi_of_pseudo_surjective
   intro a
   let b := kernel.ι (cokernel.desc f g w) a
-  obtain ⟨c, hc⟩ : ∃ c, cokernel.π f c = b
-  apply Pseudoelement.pseudo_surjective_of_epi (cokernel.π f)
+  obtain ⟨c, hc⟩ : ∃ c, cokernel.π f c = b := by
+    apply Pseudoelement.pseudo_surjective_of_epi (cokernel.π f)
   have : g c = 0 := by
     rw [show g = cokernel.π f ≫ cokernel.desc f g w by simp, Pseudoelement.comp_apply, hc]
     simp [b, ← Pseudoelement.comp_apply]
chore: prepare Lean version bump with explicit simp (#10999)

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

Diff
@@ -91,7 +91,7 @@ instance : Epi (homologyCToK f g w) := by
   apply Pseudoelement.pseudo_surjective_of_epi (cokernel.π f)
   have : g c = 0 := by
     rw [show g = cokernel.π f ≫ cokernel.desc f g w by simp, Pseudoelement.comp_apply, hc]
-    simp [← Pseudoelement.comp_apply]
+    simp [b, ← Pseudoelement.comp_apply]
   obtain ⟨d, hd⟩ : ∃ d, kernel.ι g d = c := by
     apply (Pseudoelement.pseudo_exact_of_exact exact_kernel_ι).2 _ this
   use cokernel.π (kernel.lift g f w) d
doc: fix typos (#10100)

Fix minor typos in the following files:

  • Mathlib/GroupTheory/GroupAction/Opposite.lean
  • Mathlib/Init/Control/Lawful.lean
  • Mathlib/ModelTheory/ElementarySubstructures.lean
  • Mathlib/Algebra/Group/Defs.lean
  • Mathlib/Algebra/Group/WithOne/Basic.lean
  • Mathlib/Data/Int/Cast/Defs.lean
  • Mathlib/LinearAlgebra/Dimension/Basic.lean
  • Mathlib/NumberTheory/NumberField/CanonicalEmbedding.lean
  • Mathlib/Algebra/Star/StarAlgHom.lean
  • Mathlib/AlgebraicTopology/SimplexCategory.lean
  • Mathlib/CategoryTheory/Abelian/Homology.lean
  • Mathlib/CategoryTheory/Sites/Grothendieck.lean
  • Mathlib/RingTheory/IsTensorProduct.lean
  • Mathlib/AlgebraicTopology/DoldKan/Homotopies.lean
  • Mathlib/AlgebraicTopology/ExtraDegeneracy.lean
  • Mathlib/AlgebraicTopology/Nerve.lean
  • Mathlib/AlgebraicTopology/SplitSimplicialObject.lean
  • Mathlib/Analysis/ConstantSpeed.lean
  • Mathlib/Analysis/Convolution.lean
Diff
@@ -129,7 +129,7 @@ def desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) : homo
   (homology'IsoCokernelLift _ _ _).hom ≫ cokernel.desc _ e he
 #align homology.desc' homology'.desc'
 
-/-- Obtain a moprhism to the homology, given a morphism to the kernel. -/
+/-- Obtain a morphism to the homology, given a morphism to the kernel. -/
 def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W ⟶ homology' f g w :=
   kernel.lift _ e he ≫ (homology'IsoKernelDesc _ _ _).inv
 #align homology.lift homology'.lift
refactor: introduce the new homology API for homological complex and rename the old one (#7954)

This PR renames definitions of the current homology API (adding a ' to homology, cycles, QuasiIso) so as to create space for the development of the new homology API of homological complexes: this PR also contains the new definition of HomologicalComplex.homology which involves the homology theory of short complexes.

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

Diff
@@ -12,19 +12,23 @@ import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Images
 
 /-!
 
-The object `homology f g w`, where `w : f ≫ g = 0`, can be identified with either a
-cokernel or a kernel. The isomorphism with a cokernel is `homologyIsoCokernelLift`, which
+The object `homology' f g w`, where `w : f ≫ g = 0`, can be identified with either a
+cokernel or a kernel. The isomorphism with a cokernel is `homology'IsoCokernelLift`, which
 was obtained elsewhere. In the case of an abelian category, this file shows the isomorphism
 with a kernel as well.
 
-We use these isomorphisms to obtain the analogous api for `homology`:
-- `homology.ι` is the map from `homology f g w` into the cokernel of `f`.
-- `homology.π'` is the map from `kernel g` to `homology f g w`.
-- `homology.desc'` constructs a morphism from `homology f g w`, when it is viewed as a cokernel.
-- `homology.lift` constructs a morphism to `homology f g w`, when it is viewed as a kernel.
+We use these isomorphisms to obtain the analogous api for `homology'`:
+- `homology'.ι` is the map from `homology' f g w` into the cokernel of `f`.
+- `homology'.π'` is the map from `kernel g` to `homology' f g w`.
+- `homology'.desc'` constructs a morphism from `homology' f g w`, when it is viewed as a cokernel.
+- `homology'.lift` constructs a morphism to `homology' f g w`, when it is viewed as a kernel.
 - Various small lemmas are proved as well, mimicking the API for (co)kernels.
 With these definitions and lemmas, the isomorphisms between homology and a (co)kernel need not
 be used directly.
+
+Note: As part of the homology refactor, it is planned to remove the definitions in this file,
+because it can be replaced by the content of `Algebra.Homology.ShortComplex.Homology`.
+
 -/
 
 
@@ -103,98 +107,98 @@ instance (w : f ≫ g = 0) : IsIso (homologyCToK f g w) :=
 end CategoryTheory.Abelian
 
 /-- The homology associated to `f` and `g` is isomorphic to a kernel. -/
-def homologyIsoKernelDesc : homology f g w ≅ kernel (cokernel.desc f g w) :=
-  homologyIsoCokernelLift _ _ _ ≪≫ asIso (CategoryTheory.Abelian.homologyCToK _ _ _)
-#align homology_iso_kernel_desc homologyIsoKernelDesc
+def homology'IsoKernelDesc : homology' f g w ≅ kernel (cokernel.desc f g w) :=
+  homology'IsoCokernelLift _ _ _ ≪≫ asIso (CategoryTheory.Abelian.homologyCToK _ _ _)
+#align homology_iso_kernel_desc homology'IsoKernelDesc
 
-namespace homology
+namespace homology'
 
 -- `homology.π` is taken
 /-- The canonical map from the kernel of `g` to the homology of `f` and `g`. -/
-def π' : kernel g ⟶ homology f g w :=
-  cokernel.π _ ≫ (homologyIsoCokernelLift _ _ _).inv
-#align homology.π' homology.π'
+def π' : kernel g ⟶ homology' f g w :=
+  cokernel.π _ ≫ (homology'IsoCokernelLift _ _ _).inv
+#align homology.π' homology'.π'
 
 /-- The canonical map from the homology of `f` and `g` to the cokernel of `f`. -/
-def ι : homology f g w ⟶ cokernel f :=
-  (homologyIsoKernelDesc _ _ _).hom ≫ kernel.ι _
-#align homology.ι homology.ι
+def ι : homology' f g w ⟶ cokernel f :=
+  (homology'IsoKernelDesc _ _ _).hom ≫ kernel.ι _
+#align homology.ι homology'.ι
 
 /-- Obtain a morphism from the homology, given a morphism from the kernel. -/
-def desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) : homology f g w ⟶ W :=
-  (homologyIsoCokernelLift _ _ _).hom ≫ cokernel.desc _ e he
-#align homology.desc' homology.desc'
+def desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) : homology' f g w ⟶ W :=
+  (homology'IsoCokernelLift _ _ _).hom ≫ cokernel.desc _ e he
+#align homology.desc' homology'.desc'
 
 /-- Obtain a moprhism to the homology, given a morphism to the kernel. -/
-def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W ⟶ homology f g w :=
-  kernel.lift _ e he ≫ (homologyIsoKernelDesc _ _ _).inv
-#align homology.lift homology.lift
+def lift {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) : W ⟶ homology' f g w :=
+  kernel.lift _ e he ≫ (homology'IsoKernelDesc _ _ _).inv
+#align homology.lift homology'.lift
 
 @[reassoc (attr := simp)]
 theorem π'_desc' {W : A} (e : kernel g ⟶ W) (he : kernel.lift g f w ≫ e = 0) :
     π' f g w ≫ desc' f g w e he = e := by
   dsimp [π', desc']
   simp
-#align homology.π'_desc' homology.π'_desc'
+#align homology.π'_desc' homology'.π'_desc'
 
 @[reassoc (attr := simp)]
 theorem lift_ι {W : A} (e : W ⟶ cokernel f) (he : e ≫ cokernel.desc f g w = 0) :
     lift f g w e he ≫ ι _ _ _ = e := by
   dsimp [ι, lift]
   simp
-#align homology.lift_ι homology.lift_ι
+#align homology.lift_ι homology'.lift_ι
 
 @[reassoc (attr := simp)]
 theorem condition_π' : kernel.lift g f w ≫ π' f g w = 0 := by
   dsimp [π']
   simp
-#align homology.condition_π' homology.condition_π'
+#align homology.condition_π' homology'.condition_π'
 
 @[reassoc (attr := simp)]
 theorem condition_ι : ι f g w ≫ cokernel.desc f g w = 0 := by
   dsimp [ι]
   simp
-#align homology.condition_ι homology.condition_ι
+#align homology.condition_ι homology'.condition_ι
 
 @[ext]
-theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W)
+theorem hom_from_ext {W : A} (a b : homology' f g w ⟶ W)
     (h : π' f g w ≫ a = π' f g w ≫ b) : a = b := by
   dsimp [π'] at h
-  apply_fun fun e => (homologyIsoCokernelLift f g w).inv ≫ e
+  apply_fun fun e => (homology'IsoCokernelLift f g w).inv ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (homologyIsoCokernelLift f g w).hom ≫ e at hh
+    apply_fun fun e => (homology'IsoCokernelLift f g w).hom ≫ e at hh
     simpa using hh
   simp only [Category.assoc] at h
   exact coequalizer.hom_ext h
-#align homology.hom_from_ext homology.hom_from_ext
+#align homology.hom_from_ext homology'.hom_from_ext
 
 @[ext]
-theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b ≫ ι f g w) : a = b := by
+theorem hom_to_ext {W : A} (a b : W ⟶ homology' f g w) (h : a ≫ ι f g w = b ≫ ι f g w) : a = b := by
   dsimp [ι] at h
-  apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).hom
+  apply_fun fun e => e ≫ (homology'IsoKernelDesc f g w).hom
   swap
   · intro i j hh
-    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv at hh
+    apply_fun fun e => e ≫ (homology'IsoKernelDesc f g w).inv at hh
     simpa using hh
   simp only [← Category.assoc] at h
   exact equalizer.hom_ext h
-#align homology.hom_to_ext homology.hom_to_ext
+#align homology.hom_to_ext homology'.hom_to_ext
 
 @[reassoc (attr := simp)]
 theorem π'_ι : π' f g w ≫ ι f g w = kernel.ι _ ≫ cokernel.π _ := by
-  dsimp [π', ι, homologyIsoKernelDesc]
+  dsimp [π', ι, homology'IsoKernelDesc]
   simp
-#align homology.π'_ι homology.π'_ι
+#align homology.π'_ι homology'.π'_ι
 
 @[reassoc (attr := simp)]
 theorem π'_eq_π : (kernelSubobjectIso _).hom ≫ π' f g w = π _ _ _ := by
-  dsimp [π', homologyIsoCokernelLift]
+  dsimp [π', homology'IsoCokernelLift]
   simp only [← Category.assoc]
   rw [Iso.comp_inv_eq]
-  dsimp [π, homologyIsoCokernelImageToKernel']
+  dsimp [π, homology'IsoCokernelImageToKernel']
   simp
-#align homology.π'_eq_π homology.π'_eq_π
+#align homology.π'_eq_π homology'.π'_eq_π
 
 section
 
@@ -222,56 +226,56 @@ theorem π'_map (α β h) : π' _ _ _ ≫ map w w' α β h =
     simp
   rw [this]
   simp only [Category.assoc]
-  dsimp [π', homologyIsoCokernelLift]
+  dsimp [π', homology'IsoCokernelLift]
   simp only [cokernelIsoOfEq_inv_comp_desc, cokernel.π_desc_assoc]
   congr 1
   · congr
     exact h.symm
   · rw [Iso.inv_comp_eq, ← Category.assoc, Iso.eq_comp_inv]
-    dsimp [homologyIsoCokernelImageToKernel']
+    dsimp [homology'IsoCokernelImageToKernel']
     simp
-#align homology.π'_map homology.π'_map
+#align homology.π'_map homology'.π'_map
 
 -- Porting note: need to fill in f,g,f',g' in the next few results or time out
 theorem map_eq_desc'_lift_left (α β h) :
     map w w' α β h =
-      homology.desc' f g _ (homology.lift f' g' _ (kernel.ι _ ≫ β.left ≫ cokernel.π _)
+      homology'.desc' f g _ (homology'.lift f' g' _ (kernel.ι _ ≫ β.left ≫ cokernel.π _)
       (by simp)) (by
           ext
           simp only [← h, Category.assoc, zero_comp, lift_ι, kernel.lift_ι_assoc]
           erw [← reassoc_of% α.w]
           simp) := by
-  apply homology.hom_from_ext
+  apply homology'.hom_from_ext
   simp only [π'_map, π'_desc']
   dsimp [π', lift]
   rw [Iso.eq_comp_inv]
-  dsimp [homologyIsoKernelDesc]
+  dsimp [homology'IsoKernelDesc]
   ext
   simp [h]
-#align homology.map_eq_desc'_lift_left homology.map_eq_desc'_lift_left
+#align homology.map_eq_desc'_lift_left homology'.map_eq_desc'_lift_left
 
 theorem map_eq_lift_desc'_left (α β h) :
     map w w' α β h =
-      homology.lift f' g' _
-        (homology.desc' f g _ (kernel.ι _ ≫ β.left ≫ cokernel.π _)
+      homology'.lift f' g' _
+        (homology'.desc' f g _ (kernel.ι _ ≫ β.left ≫ cokernel.π _)
           (by
             simp only [kernel.lift_ι_assoc, ← h]
             erw [← reassoc_of% α.w]
             simp))
         (by
           -- Porting note: used to be ext
-          apply homology.hom_from_ext
+          apply homology'.hom_from_ext
           simp) := by
   rw [map_eq_desc'_lift_left]
   -- Porting note: once was known as ext
-  apply homology.hom_to_ext
-  apply homology.hom_from_ext
+  apply homology'.hom_to_ext
+  apply homology'.hom_from_ext
   simp
-#align homology.map_eq_lift_desc'_left homology.map_eq_lift_desc'_left
+#align homology.map_eq_lift_desc'_left homology'.map_eq_lift_desc'_left
 
 theorem map_eq_desc'_lift_right (α β h) :
     map w w' α β h =
-      homology.desc' f g _ (homology.lift f' g' _ (kernel.ι _ ≫ α.right ≫ cokernel.π _)
+      homology'.desc' f g _ (homology'.lift f' g' _ (kernel.ι _ ≫ α.right ≫ cokernel.π _)
         (by simp [h]))
         (by
           ext
@@ -281,26 +285,26 @@ theorem map_eq_desc'_lift_right (α β h) :
   rw [map_eq_desc'_lift_left]
   ext
   simp [h]
-#align homology.map_eq_desc'_lift_right homology.map_eq_desc'_lift_right
+#align homology.map_eq_desc'_lift_right homology'.map_eq_desc'_lift_right
 
 theorem map_eq_lift_desc'_right (α β h) :
     map w w' α β h =
-      homology.lift f' g' _
-        (homology.desc' f g _ (kernel.ι _ ≫ α.right ≫ cokernel.π _)
+      homology'.lift f' g' _
+        (homology'.desc' f g _ (kernel.ι _ ≫ α.right ≫ cokernel.π _)
           (by
             simp only [kernel.lift_ι_assoc]
             erw [← reassoc_of% α.w]
             simp))
         (by
           -- Porting note: once was known as ext
-          apply homology.hom_from_ext
+          apply homology'.hom_from_ext
           simp [h]) := by
   rw [map_eq_desc'_lift_right]
   -- Porting note: once was known as ext
-  apply homology.hom_to_ext
-  apply homology.hom_from_ext
+  apply homology'.hom_to_ext
+  apply homology'.hom_from_ext
   simp
-#align homology.map_eq_lift_desc'_right homology.map_eq_lift_desc'_right
+#align homology.map_eq_lift_desc'_right homology'.map_eq_lift_desc'_right
 
 @[reassoc (attr := simp)]
 theorem map_ι (α β h) :
@@ -308,14 +312,14 @@ theorem map_ι (α β h) :
       ι f g w ≫ cokernel.map f f' α.left β.left (by simp [h, β.w.symm]) := by
   rw [map_eq_lift_desc'_left, lift_ι]
   -- Porting note: once was known as ext
-  apply homology.hom_from_ext
+  apply homology'.hom_from_ext
   simp only [← Category.assoc]
   rw [π'_ι, π'_desc', Category.assoc, Category.assoc, cokernel.π_desc]
-#align homology.map_ι homology.map_ι
+#align homology.map_ι homology'.map_ι
 
 end
 
-end homology
+end homology'
 
 namespace CategoryTheory.Functor
 
@@ -323,8 +327,8 @@ variable {ι : Type*} {c : ComplexShape ι} {B : Type*} [Category B] [Abelian B]
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
-noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
-    F.obj (C.homology j) ≅ ((F.mapHomologicalComplex c).obj C).homology j :=
+noncomputable def homology'Iso (C : HomologicalComplex A c) (j : ι) :
+    F.obj (C.homology' j) ≅ ((F.mapHomologicalComplex c).obj C).homology' j :=
   (PreservesCokernel.iso F _).trans
     (cokernel.mapIso _ _
       ((F.mapIso (imageSubobjectIso _)).trans
@@ -337,19 +341,19 @@ noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
         simp only [Category.assoc, imageToKernel_arrow]
         erw [kernelSubobject_arrow', imageSubobject_arrow']
         simp [← F.map_comp]))
-#align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIso
+#align category_theory.functor.homology_iso CategoryTheory.Functor.homology'Iso
 
 /-- If `F` is an exact additive functor, then `F` commutes with `Hᵢ` (up to natural isomorphism). -/
-noncomputable def homologyFunctorIso (i : ι) :
-    homologyFunctor A c i ⋙ F ≅ F.mapHomologicalComplex c ⋙ homologyFunctor B c i :=
-  NatIso.ofComponents (fun X => homologyIso F X i) (by
+noncomputable def homology'FunctorIso (i : ι) :
+    homology'Functor A c i ⋙ F ≅ F.mapHomologicalComplex c ⋙ homology'Functor B c i :=
+  NatIso.ofComponents (fun X => homology'Iso F X i) (by
       intro X Y f
       dsimp
       rw [← Iso.inv_comp_eq, ← Category.assoc, ← Iso.eq_comp_inv]
       refine' coequalizer.hom_ext _
-      dsimp [homologyIso]
+      dsimp [homology'Iso]
       simp only [PreservesCokernel.iso_inv]
-      dsimp [homology.map]
+      dsimp [homology'.map]
       simp only [← Category.assoc, cokernel.π_desc]
       simp only [Category.assoc, cokernelComparison_map_desc, cokernel.π_desc]
       simp only [π_comp_cokernelComparison, ← F.map_comp]
@@ -362,6 +366,6 @@ noncomputable def homologyFunctorIso (i : ι) :
       rotate_right; simp
       rw [← kernel_map_comp_kernelSubobjectIso_inv]
       any_goals simp)
-#align category_theory.functor.homology_functor_iso CategoryTheory.Functor.homologyFunctorIso
+#align category_theory.functor.homology_functor_iso CategoryTheory.Functor.homology'FunctorIso
 
 end CategoryTheory.Functor
chore: banish Type _ and Sort _ (#6499)

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

This has nice performance benefits.

Diff
@@ -319,7 +319,7 @@ end homology
 
 namespace CategoryTheory.Functor
 
-variable {ι : Type _} {c : ComplexShape ι} {B : Type _} [Category B] [Abelian B] (F : A ⥤ B)
+variable {ι : Type*} {c : ComplexShape ι} {B : Type*} [Category B] [Abelian B] (F : A ⥤ B)
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,17 +2,14 @@
 Copyright (c) 2022 Adam Topaz. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Adam Topaz, Amelia Livingston
-
-! This file was ported from Lean 3 source module category_theory.abelian.homology
-! leanprover-community/mathlib commit 956af7c76589f444f2e1313911bad16366ea476d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Homology.Additive
 import Mathlib.CategoryTheory.Abelian.Pseudoelements
 import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Kernels
 import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Images
 
+#align_import category_theory.abelian.homology from "leanprover-community/mathlib"@"956af7c76589f444f2e1313911bad16366ea476d"
+
 /-!
 
 The object `homology f g w`, where `w : f ≫ g = 0`, can be identified with either a
chore: clean up spacing around at and goals (#5387)

Changes are of the form

  • some_tactic at h⊢ -> some_tactic at h ⊢
  • some_tactic at h -> some_tactic at h
Diff
@@ -70,7 +70,7 @@ instance : Mono (homologyCToK f g w) := by
   apply Pseudoelement.mono_of_zero_of_map_zero
   intro a ha
   obtain ⟨a, rfl⟩ := Pseudoelement.pseudo_surjective_of_epi (cokernel.π (kernel.lift g f w)) a
-  apply_fun kernel.ι (cokernel.desc f g w)  at ha
+  apply_fun kernel.ι (cokernel.desc f g w) at ha
   simp only [← Pseudoelement.comp_apply, cokernel.π_desc, kernel.lift_ι,
     Pseudoelement.apply_zero] at ha
   simp only [Pseudoelement.comp_apply] at ha
@@ -166,7 +166,7 @@ theorem hom_from_ext {W : A} (a b : homology f g w ⟶ W)
   apply_fun fun e => (homologyIsoCokernelLift f g w).inv ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (homologyIsoCokernelLift f g w).hom ≫ e  at hh
+    apply_fun fun e => (homologyIsoCokernelLift f g w).hom ≫ e at hh
     simpa using hh
   simp only [Category.assoc] at h
   exact coequalizer.hom_ext h
@@ -178,7 +178,7 @@ theorem hom_to_ext {W : A} (a b : W ⟶ homology f g w) (h : a ≫ ι f g w = b
   apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).hom
   swap
   · intro i j hh
-    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv  at hh
+    apply_fun fun e => e ≫ (homologyIsoKernelDesc f g w).inv at hh
     simpa using hh
   simp only [← Category.assoc] at h
   exact equalizer.hom_ext h
@@ -209,7 +209,7 @@ theorem π'_map (α β h) : π' _ _ _ ≫ map w w' α β h =
   apply_fun fun e => (kernelSubobjectIso _).hom ≫ e
   swap
   · intro i j hh
-    apply_fun fun e => (kernelSubobjectIso _).inv ≫ e  at hh
+    apply_fun fun e => (kernelSubobjectIso _).inv ≫ e at hh
     simpa using hh
   dsimp [map]
   simp only [π'_eq_π_assoc]
feat: more consistent use of ext, and updating porting notes. (#5242)

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

Diff
@@ -61,10 +61,7 @@ abbrev homologyK : A :=
   This is an isomorphism, and it is used in obtaining the API for `homology f g w`
   in the bottom of this file. -/
 abbrev homologyCToK : homologyC f g w ⟶ homologyK f g w :=
-  cokernel.desc _ (kernel.lift _ (kernel.ι _ ≫ cokernel.π _) (by simp))
-    (by
-      apply Limits.equalizer.hom_ext
-      simp)
+  cokernel.desc _ (kernel.lift _ (kernel.ι _ ≫ cokernel.π _) (by simp)) (by ext; simp)
 #align category_theory.abelian.homology_c_to_k CategoryTheory.Abelian.homologyCToK
 
 attribute [local instance] Pseudoelement.homToFun Pseudoelement.hasZero
@@ -223,7 +220,7 @@ theorem π'_map (α β h) : π' _ _ _ ≫ map w w' α β h =
     (kernelSubobjectIso g).inv ≫ kernelSubobjectMap β =
       kernel.map _ _ β.left β.right β.w.symm ≫ (kernelSubobjectIso _).inv := by
     rw [Iso.inv_comp_eq, ← Category.assoc, Iso.eq_comp_inv]
-    refine Limits.equalizer.hom_ext ?_
+    ext
     dsimp
     simp
   rw [this]
@@ -252,8 +249,7 @@ theorem map_eq_desc'_lift_left (α β h) :
   dsimp [π', lift]
   rw [Iso.eq_comp_inv]
   dsimp [homologyIsoKernelDesc]
-  -- Porting note: previously ext
-  apply Limits.equalizer.hom_ext
+  ext
   simp [h]
 #align homology.map_eq_desc'_lift_left homology.map_eq_desc'_lift_left
 
feat: add Mathlib.Tactic.Common, and import (#4056)

This makes a mathlib4 version of mathlib3's tactic.basic, now called Mathlib.Tactic.Common, which imports all tactics which do not have significant theory requirements, and then is imported all across the base of the hierarchy.

This ensures that all common tactics are available nearly everywhere in the library, rather than having to be imported one-by-one as you need them.

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

Diff
@@ -12,8 +12,6 @@ import Mathlib.Algebra.Homology.Additive
 import Mathlib.CategoryTheory.Abelian.Pseudoelements
 import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Kernels
 import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Images
-import Mathlib.Tactic.RSuffices
-import Mathlib.Tactic.FailIfNoProgress
 
 /-!
 
chore: reenable eta, bump to nightly 2023-05-16 (#3414)

Now that leanprover/lean4#2210 has been merged, this PR:

  • removes all the set_option synthInstance.etaExperiment true commands (and some etaExperiment% term elaborators)
  • removes many but not quite all set_option maxHeartbeats commands
  • makes various other changes required to cope with leanprover/lean4#2210.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email>

Diff
@@ -331,8 +331,6 @@ namespace CategoryTheory.Functor
 variable {ι : Type _} {c : ComplexShape ι} {B : Type _} [Category B] [Abelian B] (F : A ⥤ B)
   [Functor.Additive F] [PreservesFiniteLimits F] [PreservesFiniteColimits F]
 
--- Porting note: not needed on reenableeta branch
-set_option maxHeartbeats 400000 in
 /-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
 noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
     F.obj (C.homology j) ≅ ((F.mapHomologicalComplex c).obj C).homology j :=
@@ -350,8 +348,6 @@ noncomputable def homologyIso (C : HomologicalComplex A c) (j : ι) :
         simp [← F.map_comp]))
 #align category_theory.functor.homology_iso CategoryTheory.Functor.homologyIso
 
--- Porting note: not needed on reenableeta branch
-set_option maxHeartbeats 400000 in
 /-- If `F` is an exact additive functor, then `F` commutes with `Hᵢ` (up to natural isomorphism). -/
 noncomputable def homologyFunctorIso (i : ι) :
     homologyFunctor A c i ⋙ F ≅ F.mapHomologicalComplex c ⋙ homologyFunctor B c i :=
@@ -378,4 +374,3 @@ noncomputable def homologyFunctorIso (i : ι) :
 #align category_theory.functor.homology_functor_iso CategoryTheory.Functor.homologyFunctorIso
 
 end CategoryTheory.Functor
-
feat: port/CategoryTheory.Abelian.Homology (#3882)

Co-authored-by: int-y1 <jason_yuen2007@hotmail.com> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Matthew Ballard <matt@mrb.email>

Dependencies 8 + 537

538 files ported (98.5%)
208787 lines ported (98.5%)
Show graph

The unported dependencies are