category_theory.abelian.homology
⟷
Mathlib.CategoryTheory.Abelian.Homology
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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). -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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 : ι) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -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]) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/403190b5419b3f03f1a2893ad9352ca7f7d8bff6
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -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
@@ -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
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)
@@ -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
@@ -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]
@@ -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
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
@@ -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
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>
@@ -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
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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. -/
@@ -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
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
@@ -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]
@@ -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
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>
@@ -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
/-!
Now that leanprover/lean4#2210 has been merged, this PR:
set_option synthInstance.etaExperiment true
commands (and some etaExperiment%
term elaborators)set_option maxHeartbeats
commandsCo-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>
@@ -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
-
The unported dependencies are